Ubuntu SFTP多用户管理配置指南
首先确保系统已安装OpenSSH服务器(默认可能未安装),使用以下命令安装:
sudo apt update
sudo apt install openssh-server
为便于集中管理,建议创建专门的SFTP用户组,并将用户添加至该组:
sudo groupadd sftp_users # 创建名为"sftp_users"的用户组
sudo useradd -m sftpuser1 -g sftp_users # 创建用户"sftpuser1",并加入"sftp_users"组
sudo passwd sftpuser1 # 设置用户密码
sudo mkdir /home/sftpuser1
编辑SSH配置文件,通过Match指令限制指定用户组的访问权限:
sudo nano /etc/ssh/sshd_config
在文件末尾添加以下内容(关键配置):
Match Group sftp_users # 匹配"sftp_users"组的所有用户
ChrootDirectory /sftp_root # 限制用户根目录为/sftp_root(需提前创建)
ForceCommand internal-sftp # 强制使用SFTP协议,禁止SSH登录
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no # 禁止X11转发
说明:
ChrootDirectory:用户的“根目录”,用户登录后无法访问该目录之外的文件;internal-sftp:使用OpenSSH内置的SFTP服务器,无需额外安装。保存文件后,重启SSH服务使配置生效:
sudo systemctl restart sshd
SFTP的ChrootDirectory要求根目录必须由root拥有,且用户无法写入,避免越权;用户个人目录需由用户自身拥有,保证可写:
sudo mkdir /sftp_root
sudo chown root:root /sftp_root # 所有者为root
sudo chmod 755 /sftp_root # 权限为755(root可读写执行,其他用户仅可读执行)
sudo mkdir /sftp_root/sftpuser1 # 用户"sftpuser1"的个人目录
sudo chown sftpuser1:sftp_users /sftp_root/sftpuser1 # 所有者为"sftpuser1",组为"sftp_users"
sudo chmod 700 /sftp_root/sftpuser1 # 权限为700(仅用户自身可读写执行)
若需要允许同一组内用户共享目录,可使用setfacl命令设置ACL(访问控制列表):
sudo mount -o remount,acl /
/sftp_root下的shared目录为例):sudo mkdir /sftp_root/shared # 创建共享目录
sudo chown root:sftp_users /sftp_root/shared # 所有者为root,组为"sftp_users"
sudo chmod 775 /sftp_root/shared # 基础权限(组可读写执行)
sudo setfacl -m g:sftp_users:rwx /sftp_root/shared # 为"sftp_users"组添加rwx权限
getfacl /sftp_root/shared # 查看目录ACL信息
使用创建的SFTP用户登录,验证配置是否生效:
sftp sftpuser1@your_server_ip # 替换为服务器IP
/sftp_root/sftpuser1);/或/home);ufw allow 22开放端口;ForceCommand internal-sftp)是防止用户通过SSH执行命令的关键步骤。