SFTP 服务器设置 - 管理员用户

SFTP 服务器设置 - 管理员用户

在 AWS EC2 Linux 机器上,我使用以下脚本创建具有文件夹结构的 SFTP 服务器 -

/data                 (owner - root:root)
    └── /sftp         (owner - root:root)
        ├── /user1    (owner - user1:sftp_users)
        └── /user2    (owner - user2:sftp_users)

我的要求是 -

  1. 用户应该能够通过 ssh 进入自己的目录并管理文件
  2. 用户不应能够访问不属于他们的文件。例如,用户 1 不能访问用户 2 的文件
  3. 管理员用户应该能够通过 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 卷是特定于可用区的。

相关内容