提供sftp服务的有vsftpd和internal-sftp,这里用的是系统自带的internal-sftp,操作步骤如下:
1、创建用户 testenv,并禁止ssh登录,不创建家目录
查看是否存在这个用户,不能重复创建同名用户
nano -w /etc/passwd
创建用户
useradd -s /sbin/nologin -M testenv -d /usr/local/nginx/html/testenv
2、设置用户密码
passwd testenv
123456
3、创建sftp根目录,所有sftp用户都将在该目录下活动。(如果以后不会在新增新用户的话,可跳过此目录)
mkdir /usr/local/nginx/html
4、设置目录权限,目录的权限设定有两个要点:
目录开始一直往上到系统根目录为止的目录拥有者都只能是root
目录开始一直往上到系统根目录为止都不可以具有群组写入权限
chown root:root /usr/local/nginx/html
chmod 755 /usr/local/nginx/html
注:该目录权限最大为755,设置成777会报错。
5、创建用户testenv根目录,目录名为用户名
cd /usr/local/nginx/html
mkdir testenv
6、设置testenv目录权限
chown root:testenv /usr/local/nginx/html/testenv
若需要对该目录拥有读写权限,设置权限:
chown testenv:testenv /usr/local/nginx/html/testenv
(注:设置用户testenv,如果设置拥有者为root,表示该目录testenv没有权限读写,在该目录下建立其它目录,赋权给testenv用户读写权限;)
chmod 755 /usr/local/nginx/html/testenv
注:这里的目录testenv 权限也只能是755,否则无法限制目录。
7、配置 sshd_config
nano -w /etc/ssh/sshd_config
8、修改如下内容,并保存退出
#注释掉这行
#Subsystem sftp /usr/libexec/openssh/sftp-server
添加这行:
Subsystem sftp internal-sftp
#指定使用sftp服务使用系统自带的internal-sftp,如果不添加,用户无法通过sftp登录。
#添加在配置文件末尾
Match User testenv
#匹配用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /usr/local/nginx/html/testenv
#用chroot将指定用户的根目录
#这里的%u指的是账号名,/usr/local/nginx/html/%u 含义是:/usr/local/nginx/html/testenv
ForceCommand internal-sftp
#指定sftp命令
X11Forwarding no
AllowTcpForwarding no
#这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
9、重启sshd服务器
systemctl restart sshd.service
#查询sshd启动状态命令:
systemctl status sshd.service
10、testenv用户登录测试:
sftp -oPort=22 testenv@127.0.0.1
至此已经完成了sftp创建用户,并修改权限,限制根目录。
在用户登录测试过程中,可能会遇到如下错误:
Couldn't read packet: Connection reset by peer
这是什么原因导致的呢,当时我一直很困惑,后来发现,是目录权限导致了该问题,具体解决方案,回看以上4、5、6步骤!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)