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 서버를 설정할 수 있습니다. 나는 유닉스 전문가가 아니며 세 번째 요구 사항을 충족하려고 노력하고 있습니다. 어떤 예나 방향이라도 도움이 될 것입니다.
미리 감사드립니다.
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 사용자 그룹에 포함되어 있으므로 모든 것에 액세스하고 볼 수 있어야 하며, 각 사용자는 자신의 홈 디렉터리만 볼 수 있습니다. 마지막으로 SHELL 액세스를 방지 --shell
하려면 각 SFTP 사용자를 설정해야 합니다 /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개 그룹에만 연결될 수 있다는 것입니다. SFTP 사용자가 32명이 넘는 경우 관리자를 위한 다른 방법을 찾아야 할 수도 있습니다.
사용자 데이터이기 때문에 에 마운트된 암호화된 EBS 볼륨을 사용하는 것을 권장합니다 /var/sftp
. 인스턴스에 장애가 발생하더라도 데이터는 계속 유지되지만 EBS 볼륨은 가용 영역에 따라 다르다는 점도 기억하세요.