在向服务器上传文件时,现在我们很多都是拿服务器的登录用户,通过第3方工具(wincp,xftp等)直接上传的,这些用户可以进入服务器的大部分目录,下载拥有可读权限的文件,直接拿用户做sftp还是存在风险的,尤其是向第3方人员或服务提供sftp服时,所以在提供专用的sftp用户有必要做好权限的控制
现在对sftp用户的控制方法,一般就是把访问目录限定在用户加目录下,翻看了一些网上资料和自身实践后,具体方法如下(需root执行):
1、建立sftp用户和相关用户组,以psftp用户为例
groupadd p2psftp
mkdir /hsdata/
useradd -d /hsdata/psftp -g p2psftp -s /bin/false psftp
passwd psftp
chown root /hsdata/psftp
chmod 750 /hsdata/psftp
说明:psftp家目录的属主必须是root,属组必须是p2psftp(在后面的ssh中使用是的p2psftp),该家目录的最高可设置权限为755,如果高于该权限,会导致sftp连接不上
2、建立sftp目录
cd /hsdata/psftp
mkdir upload
chmod a+w upload -R upload
upload目录可以用于上传和下载文件
说明:必须在psftp目录的下级目录中才可以上传下载,在同级目录中不行
3、修改ssh配置(ssh版本必须在4.8以上)
cd /etc/ssh/
cp sshd_config sshd_config.bak
vim sshd_config,修改内容如下:
#Subsystem sftp /usr/libexec/openssh/sftp-server(这行需注释)
新增如下内容(最好在配置文件的结尾添加)
Subsystem sftp internal-sftp
Match Group p2psftp
ChrootDirectory /hsdata/psftp
ForceCommand internal-sftp
修改保存后重启服务
service sshd restart
centos7.X版本重启则执行
/bin/systemctl restart sshd.service
如果出现如下报错
把Subsystemz这块的配置放到配置文件的最后。在重启