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配置
vim /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