Eric's blog

随笔记录

给sftp创建新用户、默认打开和限制在某个目录

前言:容易忘,记录一下,快速配置一个sftp用户,用于自动部署。

一、快速配置

1、输入命令

1
2
3
4
5
6
7
8
adduser sftpuser1
# 增加一个用户
passwd sftpuser1
# 设置密码为sftpuser1
usermod -s /bin/false sftpuser1
# 禁止用户登录 SSH
usermod -d /var/www/ sftpuser1
# 修改用户的家目录

2、打开 sshd_config 文件

1
vi /etc/ssh/sshd_config

找到 Subsystem sftp 这一行,修改成:

1
2
3
4
5
Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /var/www/

多个用户请重复配置这三行:

1
2
3
Match user sftpuser2
ForceCommand internal-sftp
ChrootDirectory /var/www2/

3、重新启动 sshd 服务

1
/etc/init.d/sshd restart

4、设置用户目录

1
2
mkdir /var/www/html
chown -R sftpuser1:root /var/www/html

5、其他(CI相关
将CI的cache文件夹设置为 nginx 拥有者

1
chown -R www-data:www-data /application/cache

二、需要注意的问题

1、修改 sshd_config 时,顺序需要正确,否则会提示Directive 'UseDNS' is not allowed within a Match block

正确的顺序:

1
2
3
4
5
6
7
8
9
10
11
UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /var/www/

2、设置目录权限的时候,需要遵循:

1、由 ChrootDirectory 指定的目录 往上到系统根目录为止的 目录拥有者 都只能是 root
2、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都 不可以具有群组写入权限(最大权限 755)

如果违反了上面的两条要求,那么就会出现新用户访问不了 sftp 的情况。

所以在这里设定www为用户的家文件夹,然后下面的html文件夹为sftpuser1拥有。


三、其他(关于权限

下面为用户权限

1
2
3
4
5
root@localhost:/var/www# ls -ls
total 12
4 drwxr-xr-x 14 root root 4096 Feb 6 18:21 test1
4 drwxr-xr-x 3 sftpuser1 root 4096 Jan 30 16:48 test2
4 drwxr-xr-x 5 sftpuser1 root 4096 Sep 19 20:52 html

最后一行,表示文件夹拥有者为sftpuser1,所属组为属组root。

可以通过 chmod 来修改文件拥有者或归属组。

1
2
3
4
chown -R sftpuser1 /var/www/html
# 将文件夹html的所有者设置为sftpuser1
chown -R sftpuser1:root /var/www/html
# 将文件夹html的所有者设置为sftpuser1,归属组为root

参考文档:

  1. linux修改文件所有者和文件所在组
  2. 给sftp创建新用户、默认打开和限制在某个目录