给sftp创建新用户、默认打开和限制在某个目录 | 您所在的位置:网站首页 › root用户家目录路径 › 给sftp创建新用户、默认打开和限制在某个目录 |
一、环境:
CentOS 6.8 使用 FileZilla 进行 sftp 连接 二、背景给外包的工作人员提供我司服务器的某一目录的访问(包括读写)权限,方便他们部署代码文件。 之所以是某一目录的访问,是因为 SFTP 的用户登录后,默认是能看到整个系统的文件目录,这样很不安全。 题外话:如果是针对 ftp 的用户权限管理,推荐使用 vsftpd,可通过 yum 直接安装。 三、正文 1、创建新用户 adduser sftpuser1useradd 和 adduser 的区别 useradd 只会添加一个用户,并没有创建它的主目录,除了添加一个新用户之外什么都没有。这个用户甚至不能登录,因为没有密码。所以这里选择 adduser。 2、设置该用户密码 passwd sftpuser1回车后再输入密码即可 3、禁止该用户登录 SSH因为我们只想该用户使用 SFTP,并不需要该用户能登录 SSH,威胁安全。 usermod -s /bin/false sftpuser1将sftpuser1的 shell 改成 /bin/false。 4、修改该用户的家目录 usermod -d /data/wwwroot/user1/ sftpuser1这样每次用户访问服务器都会默认打开/data/wwwroot/user1/,但还是可以跳出这个访问其它目录,需要进行下面一步的操作。 5、设置 sshd_config:打开sshd_config文件 vi /etc/ssh/sshd_config找到 Subsystem sftp 这一行,修改成: Subsystem sftp internal-sftp UsePAM yes Match user sftpuser1 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user1/将上面的 sftpuser1 和 /data/wwwroot/user1/ 替换成你需要的。 多个用户请重复配置这三行: Match user sftpuser2 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user2/ 这样可以为不同的用户设置不同的限制目录。 6、重新启动 sshd 服务: /etc/init.d/sshd restart现在用 SFTP 软件使用sftpuser1用户登录,就可以发现目录已经被限定、锁死在/data/wwwroot/user1/了。 四、可能遇到的问题 1、修改sshd_config文件后重启 sshd,报错:Directive 'UseDNS' is not allowed within a Match block语法错误,原因未知,只需要把两段配置的位置互调就不报错了。 修改前: Subsystem sftp internal-sftp UsePAM yes Match user sftpuser1 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user1/ UseDNS no AddressFamily inet PermitRootLogin yes SyslogFacility AUTHPRIV PasswordAuthentication yes修改后: UseDNS no AddressFamily inet PermitRootLogin yes SyslogFacility AUTHPRIV PasswordAuthentication yes Subsystem sftp internal-sftp UsePAM yes Match user sftpuser1 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user1/注:当你出现这个错误的时候,sftp 肯定是连不上了。如果你习惯用 FileZilla 去修改配置文件,那么此时你得不情愿的切换到 shell,去用 vi/vim 去修改它了。 2、新用户通过 sftp 访问时,权限不全,只能读不能写我试着用 root 账号去把该用户的家目录权限改成 777,但是会出现该用户 sftp 登陆不了的情况。(报错:Server unexpectedly closed network connection) google 了原因如下: 给新用户的家目录的权限设定有两个要点: 1、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root 2、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限 755) 如果违反了上面的两条要求,那么就会出现新用户访问不了 sftp 的情况。 所以/data/wwwroot/user1/及上级的所有目录属主一定要是 root,并且组权限和公共权限不能有写入权限,如果一定需要有写入权限,那们可以在/data/wwwroot/user1/下建立 777 权限的文件夹。 mkdir /data/wwwroot/user1/upload chown -R sftpuser1:root /data/wwwroot/user1/upload这样sftpuser1用户就可以在/data/wwwroot/user1/upload里随意读写文件了。 |
CopyRight 2018-2019 实验室设备网 版权所有 |