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. 使用者不應該能夠存取不屬於他們的文件。例如,user1無法存取user2的文件
  3. 管理員使用者應該能夠透過 ssh 進入電腦並管理所有使用者的檔案。

使用下面的腳本(建立 sftp_users 群組並將使用者資料夾權限修改為 701),我可以設定 sftp 伺服器以滿足要求 1 和 2。我不是 unix 專家,並試圖滿足第三個要求。任何例子或方向都會有所幫助。

提前致謝。

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 個群組。如果您的 SFTP 使用者超過 32 個,您可能需要為管理員尋找其他方法。

由於它是用戶數據,我建議使用安裝到/var/sftp.如果執行個體發生故障,您仍將擁有數據,但也要記住,EBS 磁碟區是特定於可用區的。

相關內容