ssh下载地址:

https://mina.apache.org/sshd-project/downloads.html

 

sftp基本介绍:

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp有着几乎一样的语法和功能。SFTP 为 SSH的一部份,和vsftpd一点关系没有,是一种传输档案至 Blogger 伺服器的安全方式。本身没有守护进程,是包含在ssh中,默认端口也是22。

sftp服务器有两种搭建方式:

1、直接在系统上新建一个用户即可,此种方式最简单,但最不安全,用户sftp登陆之后可以随意切换目录,切用户可以ssh登陆到系统,很不安全,生产环境中不会这么干,故不介绍;

2、标准sftp的搭建

 

 

sftp搭建 方式1

##系统已经有并且启动了ssh服务的情况下;

1.添加sftp用户

adduser user1

passwd user1

usermod -s /bin/false user1

usermod -d /data/wwwroot/user1/ user1

 

2.修改sftp配置

vi /etc/ssh/sshd_config

##找到 Subsystem sftp 这一行,修改成:

Subsystem sftp internal-sftp

UsePAM yes

Match user user1

ForceCommand internal-sftp

ChrootDirectory /data/wwwroot/user1/

##多个用户请重复配置这三行:

Match user user2

ForceCommand internal-sftp

ChrootDirectory /data/wwwroot/user2/

 

3.设置sftp用户目录和权限

mkdir /data/wwwroot/user1/upload chown -R sftpuser1:root /data/wwwroot/user1/upload

chmod -R 755 /data

chmod -R 775 /data/wwwroot/user1/upload

 

4.启动ssh服务

service sshd restart                        ##重启ssh服务

或者

/etc/init.d/sshd restart

或者

kill -9 `ps -ef| grep "/usr/sbin/sshd -D" | awk '{print $2}'` >/dev/null 2>&1

/usr/sbin/sshd -D &

 

给sftp新用户的家目录的权限设定有几个要点:

1、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root

2、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限 755)

3.如果需要添加管理员用户,可以设置ChrootDirectory目录属组为sftp,然后把所有的用户和管理员用户属组均改为sftp.具体可参考Dockerfile实例部分。

或者通过软链接实现:

ln -s /sftp/wwwroot /sftp/wwwroot/admin

password=`mkpasswd admin`;useradd -b /sftp/admin admin;echo "admin:$password" | chpasswd;echo $password

 

 

SFTP搭建 方式2

##在没有ssh的镜像或者系统中;以及通过用户组方式控制sftp用户登陆;

 

1.ssh安装配置

yum install -y curl tar unzip which sudo initscripts openssh-server openssh-clients rsync

yum install -y libaio.so.1* ll* vim*

yum update -y libselinux

 

echo 'root'| passwd --stdin root

ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key

ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa

ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_ecdsa_key

ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_ed25519_key

cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

 

sed -i "/^[^#]*UsePAM/ s/.*/#&/" /etc/ssh/sshd_config

echo "Port=39535" >> /etc/ssh/sshd_config

 

###添加sftp用户

groupadd sftp

cat /etc/group

mkdir -p /data/sftp

useradd -d /data/sftp/mysftp -s /bin/false -g sftp mysftp

rm -rf /data/sftp/mysftp/.bash*

echo mysftp |passwd --stdin mysftp

 

##编辑sftp配置

vi /etc/ssh/sshd_config

##先注释下面一行,

# Subsystem sftp /usr/libexec/openssh/sftp-server

##然后添加以下配置:

Subsystem sftp internal-sftp

Match Group sftp

ChrootDirectory /data/sftp/%u

ForceCommand internal-sftp

AllowTcpForwarding no

X11Forwarding no

 

备注:

# 注释掉该行

# Subsystem sftp /usr/lib/openssh/sftp-server

# 使用系统默认的sftp服务

Subsystem sftp internal-sftp

# 匹配组名 sftp

Match Group sftp

# 指定活动目录

ChrootDirectory /data/sftp/%u

# 由ChrootDirectory指定的目录开始一直往上到系统根目录的目录属主都是root.

# 由ChrootDirectory指定的目录开始一直往上到系统根目录都不可以具有群组写入权限.

# 禁用端口转发

AllowTcpForwarding no

X11Forwarding no

# 强制执行内部SFTP,并忽略任何~/.ssh/rc中的命令

ForceCommand internal-sftp

 

##设置Chroot目录权限

chown root:sftp /data

chown root:sftp /data/sftp

chown root:sftp /data/sftp/mysftp

chmod 755 /data/sftp/mysftp

 

##新建一个目录供sftp用户mysftp上传文件

mkdir /data/sftp/mysftp/upload

chown mysftp:sftp /data/sftp/mysftp/upload

chmod 755 /data/sftp/mysftp/upload

 

##启动sshd服务

service sshd start

或者

/usr/sbin/sshd -D &

 

##验证sftp登陆使用:

sftp -P 39535 mysftp@localhost

 

##新建测试用户:

useradd -d /data/sftp/119sftp -s /bin/false -g sftp 119sftp

rm -rf /data/sftp/119sftp/.bash*

echo 119sftp |passwd --stdin 119sftp

chown root:sftp /data/sftp/119sftp

mkdir /data/sftp/119sftp/upload

chown 119sftp:sftp /data/sftp/119sftp/upload

chmod 755 /data/sftp/119sftp

chmod 755 /data/sftp/119sftp/upload

 

##登陆测试

sftp -P 39535 119sftp@localhost

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐