需求描述:创建多个SFTP用户,用户权限隔离,每个用户都只能在自己的目录下操作
环境:Ubuntu
1、安装OpenSSH服务器(如果未安装)
sudo apt update
sudo apt install openssh-server
2、创建一个SFTP用户组
sudo groupadd sftpusers
3、创建SFTP用户并分配到用户组
使用 useradd
命令创建新的SFTP用户,并使用 -G
选项将其添加到刚刚创建的用户组,限制其登录Shell为 /bin/false
,确保用户的家目录位于 /sftp
目录下
sudo useradd -m -s /bin/false -G sftpusers sftpuser1
sudo passwd sftpuser1
4、创建SFTP根目录并设置权限
sudo mkdir /sftp/sftpuser1
sudo chown root:sftpusers /sftp/sftpuser1
sudo chmod 755 /sftp/sftpuser1
目录的权限设置有两个原则:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
5、配置SSH服务器
编辑SSH服务器的配置文件 /etc/ssh/sshd_config
,并添加以下配置来强制SFTP用户组只能使用SFTP协议
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /sftp/%u
PermitRootLogin no
PasswordAuthentication yes
6、重启SSH服务器以应用更改
sudo service ssh restart
到这里用户sftpuser1可以使用SFTP协议登录,但用户只有读和执行权限,没有写的权限
下述操作可为sftpuser1创建单独的操作目录,为用户创建一个 home 目录,根据自己的需求添加权限
sudo chown sftpuser1:sftpusers /sftp/sftpuser1/home
设置所有者sftpuser1有写入权限,而所有组sftpusers无写入权限
sudo chmod 755 /sftp/sftpuser1/home
参考文档:
SFTP账号连接出现错误fatal: bad ownership or modes for chroot directory component “/“ [postauth]-CSDN博客