SFTP의 시작 폴더를 /home/username 이외의 폴더로 설정하면 권한 문제가 발생할 수 있습니다.

SFTP의 시작 폴더를 /home/username 이외의 폴더로 설정하면 권한 문제가 발생할 수 있습니다.

방금 CentOS 기반 서버를 SFTP 서버로 설치했습니다.

/mnt/inbound/ 폴더로 이동하려면 들어오는 모든 파일이 필요하므로 SFTP를 통해 로그인하는 이 호스트의 모든 사용자가 /mnt/inbound/를 시작점으로 가지고 있는지 확인하고 싶습니다. 다른 곳으로 갈 수 없다는 것입니다.

SFTP 클라이언트를 사용하여 테스트 사용자와 연결할 수 있었고 사용자가 해당 폴더에 갇혀 있는지 확인할 수 있었지만 사용자는 파일을 업로드할 수 없습니다...

지금까지 내가 한 일은 다음과 같습니다.

  1. 모든 고객 인바운드 사용자를 포함하도록 sftponly라는 그룹을 만듭니다.

$ groupadd sftponly

  1. 내부 SFTP 하위 시스템을 사용하도록 /etc/ssh/sshd_config를 수정합니다.

# Enable built-in implementation of SFTP Subsystem sftp internal-sftp

  1. sshd_conf 끝에 다음을 추가합니다.

Match Group sftponly # Force the connection to use the built-in SFTP support ForceCommand internal-sftp # Chroot the connection into the specified directory ChrootDirectory /mnt/inbound/%u # Disable network tunneling PermitTunnel no # Disable authentication agent forwarding AllowAgentForwarding no # Disable TCP connection forwarding AllowTcpForwarding no # Disable X11 remote desktop forwarding X11Forwarding no

  1. SFTP를 사용할 사용자 추가:

$ sudo useradd -g sftponly testuser

  1. 사용자 폴더는 /mnt/inbound 아래에 생성되어야 합니다:

$ sudo mkdir /mnt/inbound/testuser

이제 FileZilla(또는 다른 클라이언트)를 사용하여 이 호스트에 SFTP 연결을 설정할 수 있으며 사용자가 /mnt/inbound/testuser 폴더로 제한되어 있음을 알 수 있습니다. 하지만 사용자는 파일을 업로드할 수 없습니다.

사용자 테스트가 액세스할 수 있도록 /mnt/inbound/test 폴더에 대한 권한을 변경하려고 시도했지만 이로 인해 사용자가 SFTP를 통해 연결할 수 없게 되었습니다.

폴더 소유자를 루트가 아닌 다른 사람으로 변경할 수 없습니다. 그렇다면 사용자가 해당 폴더를 읽고 쓸 수 있도록 하려면 어떻게 해야 합니까?

인터넷에서 유사한 질문(StackExchange 포함)에 대한 답변을 여러 번 보았지만 모두 한두 가지가 누락된 것 같습니다. 답변에 제공된 지침을 따르려고 하면 항상 SFTP 설정이 손상됩니다. 사례.

감사합니다, P.

답변1

예, #openssh IRC 채널에서 몇 가지 조언을 얻었습니다. 내 솔루션에서 누락된 내용은 다음과 같습니다.

ChrootDirectory에 지정된 디렉터리는 루트가 소유해야 합니다. 위 파일에서 변수를 sshd_config지정했기 때문에 각 사용자는 자신의 사용자 이름을 기반으로 하는 자신만의 루트 디렉터리를 가지며( 예: ), 이러한 디렉터리는 모두 루트가 소유해야 합니다. 명령이 상승하기 때문에 이것이 실제로 디렉토리를 생성할 때의 기본값입니다 .%utestuser/mnt/inbound/testuser/sudo mkdir /mnt/inbound/<username>mkdirsudo

그래서 내가 해야 할 일은 아래에 하위 디렉터리를 만들고 /mnt/inbound/<username>해당 디렉터리에 대한 사용자 권한을 부여하는 것입니다. 내 경우에는 이 디렉토리를 이라고 부릅니다 uploads.

그래서 다음과 같이 구성을 약간 변경했습니다.

Match Group sftponly # Chroot the connection into the specified directory ChrootDirectory /mnt/inbound/%u # Force the connection to use the built-in SFTP support ForceCommand internal-sftp -d /uploads

ForceCommand행은 include로 변경되었습니다 -d /uploads. 이는 사용자가 로그인한 후의 기본 디렉토리가 임을 의미합니다 /uploads. 구성의 이전 줄에 지정되었으므로 새 루트로 간주 되지 /uploads않습니다 ./mnt/inbound/%u/uploads/mnt/inbound/%u

ChrootDirectory /mnt/inbound/그런 다음 사양을 수행하면 이제 루트 계정이 소유해야 하는 새 루트 디렉터리가 되므로 최종 사용자가 소유한 폴더를 ForceCommand internal-sftp -d /%u만들 수 있습니다 . 그러나 사용자는 상위 폴더로 이동하여 다른 모든 계정의 디렉터리 이름을 볼 수 있습니다. 나는 그것을 반대하기로 결정했다 :)/mnt/inbound/<username>/mnt/inbound

답변2

업데이트된 솔루션을 게시해 주셔서 감사합니다(@pmdci). Ubuntu 18의 특정 사용자의 /home 디렉토리에서 작동하도록 하기 위해 약간의 수정을 해야 했습니다. 예, 이런 종류의 작업은 홈이 아닌 폴더를 사용하려는 특정 목표를 무너뜨리지만 다른 사람들이 시도하는 데 도움이 될 수 있습니다. 비슷한 것들.

  1. SFTP 액세스를 위해 새 시스템 사용자(이 예에서는 이 사용자를 "yournewuser"라고 함)를 생성하고(Ubuntu는 "adduser" 입력 중에 홈 디렉터리를 자동으로 생성해야 함) 비밀번호를 설정한 후 새 사용자를 그룹에 추가합니다. SFTP에 대한 제어 그룹으로 설정하겠습니다. 이 예에서는 이를 "yoursftpgroup"이라고 부르겠습니다.

  2. 이 사용자가 로그인하는 것을 원하지 않으면 다음을 설정하십시오: sudo usermod -s /sbin/nologon yournewuser

  3. 지적한 대로 새 사용자의 디렉터리가 "CHOWN 루트"를 사용하여 루트가 소유하고 있는지 확인하세요. 예, 이 작업을 수행해야 하며 sudo가 이를 처리해야 합니다. 하지만 만일의 경우에 대비하여 명시적으로 수행했습니다...

  4. 이 새 사용자 디렉터리 "/home/newuser/"의 권한(CHMOD)을 755로 설정합니다. -R 스위치를 사용할 필요가 없습니다(스위치 참고). 참고: 이 권한은 최소한 다른 사용자와 동일한 권한을 가져야 합니다. 나의 경우에는. 그렇지 않으면 SFTP 로그인 중에 액세스 거부 문제가 발생합니다(WinSCP를 사용하여 테스트).

  5. /home/yournewuser/uploads에 업로드를 위한 새 디렉터리를 만듭니다. 이 작업을 sudo로 수행해야 할 수도 있으므로 이제 yournewuser를 사용하여 해당 사용자에게 소유권을 다시 이전해야 합니다. yoursftpgroup CHOWN /home/yournewuser/uploads

  6. 이제 이 디렉터리의 권한을 700: CHMOD 700 /home/yournewuser/uploads로 설정합니다.

  7. /etc/ssh/sshd_config 파일을 변경하고 끝에 다음 줄을 추가합니다(이 경우 줄을 조정하면 됩니다).

     Subsystem       sftp    internal-sftp
    
     Match Group yoursftpgroup
    
     ChrootDirectory /home/%u
    
     X11Forwarding no
    
     AllowTcpForwarding no
    
     ForceCommand internal-sftp -d /uploads
    
  8. 다음 명령을 사용하여 SSH 서비스를 다시 시작합니다. sudo service ssh restart

  9. 테스트 액세스

답변3

/mnt/inbound 폴더의 소유권을 루트 계정에 부여한 다음, inbound 폴더에 다른 사용자와 동일한 이름의 폴더를 생성하고 해당 사용자에게 전체 권한을 부여해야 합니다.

chroot 옵션을 사용하면 각 사용자가 자신의 폴더만 갖게 되고 해당 폴더에 접근할 수 없게 됩니다.

하지만 이 솔루션을 사용하면 범용 업로드 폴더를 가질 수 없습니다.

관련 정보