linux搭建SFTP服务(不同用户不同根目录)

339 阅读2分钟

简单步骤:

1. 创建sftp用户组

groupadd sftpuser

2. 创建sftp测试用户sftptestuser并指定用户组sftpuser

useradd -s /sbin/nologin -M -g sftpuser sftptestuser
  • -M表示不创建用户主目录
  • -s /sbin/nologin表示禁止用户ssh登录
  • -g表示指定用户组

3. 设置用户密码

passwd sftptestuser

4. 创建sftp根目录,所有sftp用户都将在该目录下活动。

mkdir -p /data/sftp

5. 设置目录权限,目录的权限设定有两个要点:

  • 目录开始一直往上到系统根目录为止的目录拥有者都只能是root

  • 目录开始一直往上到系统根目录为止都不可以具有群组写入权限

chown root:root /data/sftp
chmod 755 /data/sftp  

6. 创建用户sftptestuser的sftp根目录,目录名为用户名

cd /data/sftp
mkdir sftptestuser

7. 设置sftptestuser目录权限

chown root:sftpuser /data/sftp/sftptestuser
chmod 755 /data/sftp/sftptestuser   #限制目录权限。

8. 配置sshd_config

vim /etc/ssh/sshd_config

修改如下内容:

#注释掉下面一行
#Subsystem sftp /usr/libexec/openssh/sftp-serve
#添加这行:
Subsystem sftp internal-sftp  #指定使用sftp服务使用系统自带的internal-sftp

文件末尾添加:

Match Group sftpuser #匹配用户组,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /data/sftp/%u #用chroot将指定用户的根目录,这里的%u指的是账号名
ForceCommand internal-sftp #指定sftp命令
X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
AllowTcpForwarding no

9. 重启sshd服务

systemctl restart sshd.service   #重启sshd
systemctl status sshd.service    #查询sshd启动状态

10、sftptestuser用户登录测试:

sftp -oPort=22 sftptestuser@127.0.0.1

附:

至此已经搭建好了sftp服务,如果需要新增sftp用户的话,只需重复2、3、6、7步骤即可