应用场景:相比于ftp,sftp在安全性上要更高,如果需要与其他机器进行数据传输,建议采用sftp,ssh与sftp分离,可以实现单独进行用户控制:限制某些用户只能使用sftp传输,无法ssh登陆,某些用户只能ssh登陆,无法进行sftp传输。同时可以指定ssh与sftp使用不同的端口。
基本思路:复制ssh服务建立单独的sftp服务
说明:下面所用命令测试基于redhat7或centos7版本
一、复制相关文件
cp -p /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service
cp -p /etc/pam.d/sshd /etc/pam.d/sftpd
cp -p /etc/ssh/sshd_config /etc/ssh/sftpd_config
ln -sf /usr/sbin/service /usr/sbin/rcsftpd
ln -sf /usr/sbin/sshd /usr/sbin/sftpd
cp -p /etc/sysconfig/sshd /etc/sysconfig/sftpd
二、 修改新服务的配置
1、修改/etc/systemd/system/sftpd.service
vim /etc/systemd/system/sftpd.service
#第2行
Description=Sftp server daemon
#第10行,第11行
EnvironmentFile=/etc/sysconfig/sftpd
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config
2、修改vim /etc/ssh/sftpd_config
vim /etc/ssh/sftpd_config
#第17行
Port 9999 #根据实际情况修改
#第125行
PidFile /var/run/sftpd.pid
#第141行,注释掉这行
#Subsystem sftp /usr/libexec/openssh/sftp-server
#最后添加下面这几行
Subsystem sftp internal-sftp
Match User sftpuser
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
三、新增账号并开启服务
#新增账号
Useradd -d /app/sftp/ qhsftp
#修改密码
passwd qhsftp
#设置禁止ssh登陆
usermod -s /bin/false qhsftp
#修改家目录和权限设置
chown root /app/sftp #家目录的属主必须是root, 该家目录的最高可设置权限为755,如果高于该权限,会导致sftp连接不上
chmod 755 /app/sftp
#reload daemon
systemctl daemon-reload
#开启sftp服务
systemctl start sftpd
## 如果启动时出现 Bind to port 8822 on :: failed: Permission denied 这种报错,则需要把要添加的sshd服务端口在selinux上注册
查看selinux中sshd当前的端口:semanage port -l | grep ssh
在selinux中添加端口:semanage port -a -t ssh_port_t -p tcp 8822
重启sshd服务
防火墙放行修改后的端口
扩展:
ssh只允许指定的用户登陆(同样适用于sftp)
方法1:在/etc/pam.d/sshd文件第一行加入
auth required pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail
然后在/etc下建立sshusers文件,编辑这个文件,加入你允许使用ssh服务的用户名,不用重新启动sshd服务。
方法2:pam规则也可以写成deny的
auth required pam_listfile.so item=user sense=deny file=/etc/sshusers onerr=succeed
方法3:在sshd_config中设置AllowUsers,格式如
AllowUsers a b c
重启sshd服务,则只有a/b/c3个用户可以登陆
按照惯例一键部署脚本已配置好,有需要点下面链接进行下载