最近客户需要从服务器的一个目录中下载文件,从安全性考虑只允许访问这一个目录,下面是如何新建一个新的用户并限制访问特定的目录。
服务器是 CentOS 7,传输文件使用sftp协议,工具FileZilla。
新建用户
使用 adduser 命令创建一个用户 sftpuser1
adduser sftpuser1
关于 useradd 和 adduser 的区别可自行搜索
设置用户密码
passwd sftpuser1
禁止用户SSH登录
usermod -s /bin/false sftpuser1
或
usermod -s /usr/sbin/nologin sftpuser1
/bin/false什么也不做只是返回一个错误状态,然后立即退出。将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示。
nologin会礼貌的向用户显示一条信息,并拒绝用户登录:
This account is currently not available.
修改登入目录
usermod -d /data/sftpuser1 sftpuser1
这样用户登录时,默认进入 /data/sftpuser1 目录。确保 /data/sftpuser1 目录存在
设置 sshd_config
打开 ssh_config 文件
vi /etc/ssh/sshd_config
注释掉
# Subsystem sftp /usr/libexec/openssh/sftp-server
在下面添加
Subsystem sftp internal_sftp
Match User sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/sftpuser1/
重启 sshd 服务
systemctl restart sshd.service
注意事项
/data/sftpuser1 目录及所有的上级目录的 owner 都只能是 root ,且群组用户和其他用户不能有写入权限。如果需要写入权限,可以在 /data/sftpuser1 目录中新建一个目录,并赋予 777 权限