![SFTP 服务器设置 - 管理员用户](https://linux22.com/image/1587109/SFTP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE%20-%20%E7%AE%A1%E7%90%86%E5%91%98%E7%94%A8%E6%88%B7.png)
在 AWS EC2 Linux 机器上,我使用以下脚本创建具有文件夹结构的 SFTP 服务器 -
/data (owner - root:root)
└── /sftp (owner - root:root)
├── /user1 (owner - user1:sftp_users)
└── /user2 (owner - user2:sftp_users)
我的要求是 -
- 用户应该能够通过 ssh 进入自己的目录并管理文件
- 用户不应能够访问不属于他们的文件。例如,用户 1 不能访问用户 2 的文件
- 管理员用户应该能够通过 ssh 进入机器并管理所有用户的文件。
使用下面的脚本(创建 sftp_users 组并将用户文件夹权限修改为 701),我可以设置 sftp 服务器以满足要求 1 和 2。我不是 unix 专家,正在尝试满足第 3 个要求。任何示例或指导都会有所帮助。
提前致谢。
echo "`date` Creating SFTP directory...."
mkdir -p /data/sftp
echo "`date` updating sshd_config"
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
echo 'Match Group sftp_users' >> /etc/ssh/sshd_config
echo 'ChrootDirectory /data/sftp' >> /etc/ssh/sshd_config
echo 'ForceCommand internal-sftp' >> /etc/ssh/sshd_config
echo "`date` Set permissions to 701 for all folders on the efs mount"
chmod -R 701 /data
echo "`date` Set owner to root:root for all folders on the efs mount"
chown -R root:root /data
echo "`date` adding sft_users group"
groupadd sftp_users
echo "`date` restarting sshd"
systemctl restart sshd
###### Below is my user creation script that I eventually use to create individual SFTP users ######
echo "`date` creating /usr/local/bin/create_sftp_user.sh"
echo -e '#!/bin/bash\n\nUSER_NAME=$1\nuseradd -g sftp_users -d /$USER_NAME -s /sbin/nologin $USER_NAME\n' > /usr/local/sbin/create_sftp_user.sh
echo -e 'passwd $USER_NAME\nmkdir -p /data/sftp/$USER_NAME\n' >> /usr/local/sbin/create_sftp_user.sh
echo -e 'chown $USER_NAME:sftp_users /data/sftp/$USER_NAME\n' >> /usr/local/sbin/create_sftp_user.sh
echo -e 'chmod 700 /data/sftp/$USER_NAME\n' >> /usr/local/sbin/create_sftp_user.sh
chmod +x /usr/local/sbin/create_sftp_user.sh
答案1
我的设置是将我的管理员用户设置为我的每个 SFTP 成员组的成员。对于每个 SFTP 用户,user:group
为该用户创建一个唯一的组合,并将每个用户的目录所有权授予相应的 SFTP 用户/组。您的管理员用户应该能够访问/查看所有内容,因为他们包括每个 SFTP 用户的组,并且每个用户只能查看自己的主目录。最后,确保将每个 SFTP 用户的设置--shell
为/bin/false
阻止 SHELL 访问。
我已通过 SSH 密钥设置身份验证。将每个用户的公钥添加到authorized_keys
/var/sftp (admin:admin 0700)
|
|-/.ssh (admin:admin 0700)
| -/authroized_keys
|
|-/user1 (admin:admin 0755)
| |
| |-/uploads (user1:user1 0770)
| |-/.ssh
| -/authorized_keys
|
|-/user2 (admin:admin 0755)
|
|-/uploads (user2:user2 0770)
|-/.ssh
-/authorized_keys
在我的 中/etc/ssh/sshd_config
,我有以下设置:
Match User ADMIN_USERNAME
ChrootDirectory /var/sftp
AuthenticationMethods publickey
AuthroizedKeysFile /var/sftp/.ssh/authorized_keys
ForceCommand internal-sftp
OPTIONS...
Match Group SFTP_USER
ChrootDirectory /var/sftp/%u
AuthenticationMethods publickey
AuthorizedKeysFile /var/sftp/%u/.ssh/authorized_keys
ForceCommand internal-sftp
OPTIONS...
每个 SFTP 用户都应将其主目录设置为各自的/var/sftp/HOME
。此设置的唯一缺点是用户只能与 32 个组相关联。如果您有超过 32 个 SFTP 用户,您可能需要为您的管理员寻找另一种方法。
由于它是用户数据,我建议使用安装到的加密 EBS 卷/var/sftp
。如果实例发生故障,您仍然可以保留数据,但也要记住 EBS 卷是特定于可用区的。