很多的系统在和外部其他系统交换文件时,喜欢使用SFTP协议。对于SFTP服务器来说,我们不想给予SFTP用户太多的权限,更不想让用户随意浏览服务器上的其他文件和执行shell命令,下面介绍如何通过配置SSH来限制SFTP用户的目录和权限。
首先我们需要新建一个SFTP登录用户(例如asftp用户):
groupadd asftp -g 1000
useradd asftp -u 1000 -g 1000 -d /home/asftp
然后我们可以在/home下看到刚刚建立的家目录:
ls -l /home
total 4
drwx------ 3 asftp asftp 4096 Sep 12 10:39 asftp
现在有两种选择,一是让asftp用户进入后为家目录,或者为其他任何一个目录,先介绍家目录。
我们首先要把 /home/asftp 目录的权限属主设置为 root:asftp,换句话说就是用户asftp登录后的根目录所在目录,和这个目录所有的上层目录,其所属主必须是root,属组暂时还没有限制。这个意思就是说:
● /home 的所属必须为 root,如 root:root 或者 root:asftp 都可以
● /home 的权限至少应为755,当然Linux系统默认就是这个
标准情况下,/home的状态应为下面这样:
drwxr-xr-x. 3 root root 4096 Sep 12 10:32 home
而 /home/asftp 目录默认情况下是 asftp:asftp 权限为700,现在应该改为 root:asftp 权限755,命令如下:
chown root:asftp /home/asftp
chmod 755 /home/asftp
ls -l
total 4
drwxr-xr-x 3 root asftp 4096 Sep 12 10:39 asftp
asftp:x:1000:1000::/home/asftp:/sbin/nologin
至于这里家目录可以随便写,可以填 /home/asftp 或者 / 都可以,因为不登录之后这里的家目录已经没有意义了,asftp用户登录后的根目录在 /etc/ssh/sshd_config 中指定,如下:
首先我们要注释掉一行,不然修改后启动不了sshd服务
# Subsystem sftp /usr/libexec/openssh/sftp-server
然后加入后面这几行
Subsystem sftp internal-sftp
UsePAM yes
Match User asftp
ChrootDirectory /home/asftp/
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
其中上面指定了asftp用户登录后的根目录,即/home/asftp/
这里再强调一遍,根目录本身所属必须是root,属组为sftp用户的属组,权限最小为755,意味着777是不行的,也意味着asftp用户本身是不能在 /home/asftp 中建立新文件、文件夹或者修改文件的。虽然asftp用户对于登录后的根目录没有写权限,但是我们可以用root新建一个文件夹,比如叫upload,然后把这个文件夹所属改为asftp,这样asftp用户就对 /home/asftp/upload 拥有完全的写权限了,上传文件不要放到根目录而是放到“/upload”下面。
修改完sshd的配置后需要重启sshd服务,命令如下:
service sshd restart
下面介绍一下,如果不使用家目录作为sftp的根目录,使用其他目录的方法。
但是有一个原则还是要遵守,就是sftp所在的根目录,和其所有的上级目录,所属必须是root,不然就会碰到sftp连接马上被关闭的情况。
比如,我们想要登录后的根目录为/data/hao/abc
那么:
/data/hao/abc 应该为root:asftp 755
/data/hao/ 应该为root:root 755
/data 应该为root:root 755
如果想要上传文件,应该建立/data/hao/abc/upload文件夹,所属 asftp:asftp 权限为755,然后上传文件的目标路径为/upload
最后修改/etc/ssh/sshd_config文件,修改ChrootDirectory后面的目录为/data/hao/abc/即可。
2023-10-25 14:30:04
,某些文章具有时效性,若有错误或已失效,请在文末评论留言●版权归原作者和机构所有,严禁商用,否则产生的一切后果将由您自己承担
●如果您不喜欢本站有您信息的存在,请邮件告知我们予以删除
暂无评论内容