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로 수정)를 사용하여 요구 사항 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 볼륨은 가용 영역에 따라 다르다는 점도 기억하세요.

관련 정보