#新增用户
useradd username
#设置密码
passwd username
#连续输两次密码完成用户设置
#删除用户
userdel username
#删除用户及删除创建的文件夹
userdel -r username
#查看用户是否添加
tail /etc/passwd
#修改sshd_config文件,建议先备份
cp sshd_config sshd_config.back // 备份
#使用vi进入文件修改
vi /etc/ssh/sshd_config
#enter进入后,按I键,insert插入
#找到下面这行,前面加上#号,注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
#在文件的最下方加入以下代码
Subsystem sftp internal-sftp
#实现username账号访问固定文件夹
Match User username
ChrootDirectory /data/nginx/wwwroot/default/source/plugin
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
#下面开始更改权限,首先从根目录看起
cd data到根目录
ls -l看权限
一层一层的看下去,要求权限都是755
常见的权限表示形式有:
-rw——- (600) 只有拥有者有读写权限。
-rw-r–r– (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx—— (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx–x–x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
要求从根目录开始到最后要指定的文件夹为止,都需要是755权限,所有者都是root,用户组也是root
#建议按如下指令设置一下
sudo chmod 755 /data
#然后设置username属于root用户组,指定其成为 some_dir 某个文件夹的所有者,这样username就具有了some_dir的读写权限
sudo chown -R username:root /datas/nginx/wwwroot/default/source/plugin/some_dir
这里要求some_dir在上图写的路径下面
#重启ssh服务
service sshd restart
#尝试登陆sftp
sftp -oPort=端口号 username@192.168.1.1(你的IP)
可能会登陆失败
如果你链接服务器的时候出现下面的提示:
Write failed: Broken pipe
Couldn’t read packet: Connection reset by peer
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。注意以下两点原则:
目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
目录开始一直往上到系统根目录为止都不可以具有群组写入权限
上面2点一定注意,仔细检查。我就是因为这个问题,导致一直有这个问题。仔细检查配置后,解决问题。
转载请注明:燕骏博客 » 记坑爹的Linux服务器设置用户权限用sftp访问固定文件夹
赞赏作者微信赞赏支付宝赞赏