AWS EC2 Linux ボックスで、以下のスクリプトを使用してフォルダー構造を持つ SFTP サーバーを作成しています -
/data (owner - root:root)
└── /sftp (owner - root:root)
├── /user1 (owner - user1:sftp_users)
└── /user2 (owner - user2:sftp_users)
私の要件は -
- ユーザーは自分のディレクトリにSSHでアクセスし、ファイルを管理できる必要があります。
- ユーザーは自分に属さないファイルにアクセスできないようにする必要があります。たとえば、user1 は user2 のファイルにアクセスできません。
- 管理者ユーザーはマシンに SSH 接続し、すべてのユーザーのファイルを管理できる必要があります。
以下のスクリプト (sftp_users グループを作成し、ユーザー フォルダーのアクセス許可を 701 に変更する) を使用すると、要件 1 と 2 を満たすように sftp サーバーを設定できます。私は 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
SHELL/bin/false
アクセスを防止してください。
私は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 ボリュームはアベイラビリティーゾーン固有であることも覚えておいてください。