SFTP 구성에서 SSH 공개 키 공유

SFTP 구성에서 SSH 공개 키 공유

다음과 같이 CentOS에서 SFTP 서버를 구성했습니다.이 문서. 내 의도는 그룹에 속 하지만 여전히 해당 폴더에 로그인할 수 있는 새 사용자( user1, ) 의 콘솔 로그인을 금지하는 것입니다 .user2sftpuserssftp

sftp또한 CentOS 사용자가 사용하는 것과 동일한 키(콘솔에 문제 없이 로그인할 수 있음)를 사용하고 싶습니다 . 이를 위해 .sshCentOS 사용자의 폴더를 user1user2홈 폴더로 복사하여 소유권을 사용자, 700폴더 .ssh및 파일 600로 변경했습니다 authorized_keys.

그런데 계속 메시지가 옵니다 Server refused our key. CentOS 사용자가 사용하는 키는 모든 서버의 마스터 키와 같기 때문에 새 사용자에게 해당 키를 재사용하고 싶습니다.

이 구성을 어떻게 달성할 수 있습니까?

업데이트

각 사용자에 대한 키를 생성한 후 두 사용자 모두 개인 키를 사용하여 원격으로 서버에 액세스할 수 있지만 다음 구성을 활성화하면 /etc/ssh/sshd_config명령을 사용하여 권한이 거부됩니다 sftp.

SSHD 구성

Match Group sftpusers #Or you could replace Group with User and specify a different configuration for each user
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
ChrootDirectory /path/to/shared_folder/%u # %h the path to upload the files
ForceCommand internal-sftp

쉘의 메시지

packet_write_wait: Connection to IPSERVER port 22: Broken pipe
Couldn't read packet: Connection reset by peer

답변1

업데이트로 인해 원래 질문과 다른 문제가 발생합니다. 원래 문제는 더 이상 문제가 되지 않는 것 같습니다. 업데이트를 다루고 있습니다.

그만큼수동읽는다:

ChrootDirectory
chroot(2)인증 후 디렉토리의 경로 이름을 지정합니다 . 세션 시작 시 sshd(8)경로 이름의 모든 구성 요소가 다른 사용자나 그룹이 쓸 수 없는 루트 소유 디렉터리인지 확인합니다.

내 테스트에 따르면 이 조건이 충족되지 않으면 Broken pipe로 로그인을 시도할 때 오류가 발생합니다 sftp.

귀하의 경우 경로 이름은 입니다 /path/to/shared_folder/%u. 참고 %u(확장 후)는또한구성 요소; 따라서 "루트 소유여야 하며 다른 사용자나 그룹이 쓸 수 없어야 합니다". 소유권과 권한을 수정해야 합니다. 그러면 분명히 사용자는 디렉터리에 쓸 수 없게 됩니다. 와 함께 사용하는 경로 이름이 무엇이든 ChrootDirectory사용자는 해당 경로에 쓸 수 없습니다(사용자가 루트가 아닌 경우). 즉, 사용자는 /chroot된 환경에서 쓸 수 없습니다. 쓰기를 허용하려면 하위 디렉터리가 필요합니다. 이를 처리하는 방법은 거의 없습니다.

  • 공통 chroot 디렉토리에서 홈 디렉토리를 사용합니다.

    설명서에는 다음과 같이 명시되어 있습니다.

    이후에는 chroot작업 sshd(8)디렉터리를 사용자의 홈 디렉터리로 변경합니다.

    나는 홈 디렉토리가 기본적으로 /home/user1, 등과 같다고 가정합니다 . /home/user2이는 다음과 같은 시나리오를 제안합니다.

    1. /path/to/shared_folder(no %u) 로 chroot하도록 서버를 설정합니다 .

      ChrootDirectory /path/to/shared_folder
      
    2. 거기에 관련 디렉토리 구조를 복제하십시오( /path/to/shared_folder/home/user1등).

    3. path, to및 의 조건을 만족합니다 shared_folder.
    4. home일반 와 마찬가지로 소유권과 권한을 부여합니다 /home.
    5. home.NET의 디렉터리와 마찬가지로 내부 디렉터리의 소유권과 권한을 만듭니다 /home.

    이 설정을 사용하면 인증 후 sftp자동 으로 user1배치 되지만 ./path/to/shared_folder/home/user1/home/user1chroot

  • 공통 chroot 디렉토리에서 사용자 정의 디렉토리를 사용합니다.

    를 사용하면 ForceCommand internal-sftp시작 디렉터리를 지정할 수 있습니다( internal-sftp와 동일한 옵션 세트 지원).sftp-server). 이와 같이:

    ChrootDirectory /path/to/shared_folder
    ForceCommand internal-sftp -d /home/%u
    

    사용자가 OS의 공식 홈 디렉토리에 관계없이 sftp사용할 수 있도록 합니다 . /path/to/shared_folder/home/…또는 다음과 같습니다:

    ChrootDirectory /path/to/shared_folder
    ForceCommand internal-sftp -d /%u
    

    home경로를 단순화하고 중간에 이를 제거합니다 . 이렇게 하면 로 로그인한 후 user1해당 사용자가 로그인되어 있는지 확인할 수 있습니다 . 이 경우에는 사용자 폴더(가 아님 )를 직접 포함해야 합니다./user1sftpshared_folderhome

  • 사용자와 관련된 chroot 디렉터리에서 최소한 하나의 하위 디렉터리를 사용합니다.

    위의 솔루션을 사용하면 사용자가 서로의 디렉터리를 탐색할 수 있습니다. 사용자는 chmod자신의 파일( sftp지원 chmod)에 대해 액세스를 허용하거나 거부할 수 있습니다.

    %u와 함께 사용했으므로 ChrootDirectory별도의 chroot 디렉토리를 만들고 싶을 가능성이 높습니다. 그러한 경우에는 당신이 한 일을 하십시오:

    ChrootDirectory /path/to/shared_folder/%u
    

    %u조건을 충족하기 위해 모든 구성 요소(확장 대상 포함)의 소유권과 권한을 설정합니다 . 읽기 전용 액세스에 관한 것이 아니라면 사용자가 쓸 수 있는 하위 디렉터리가 하나 이상 필요합니다. 가능성은 거의 없습니다:

    • OS에 정의된 대로 사용자의 홈 디렉터리에 대한 경로를 복제합니다.
    • 강제 /home/%uForceCommand internal-sftp -d /home/%u;
    • 강제 /%uForceCommand internal-sftp -d /%u;
    • 고정된 하위 디렉터리 이름을 사용합니다(예 ForceCommand internal-sftp -d /files: .

    각각의 경우 내부에 디렉터리 구조를 준비해야 합니다 /path/to/shared_folder. 예를 들어 /home/user1를 강제로 적용하려는 경우 user1관련 경로는 다음과 같습니다.

    /path/to/shared_folder/user1/home/user1
    

    여기서 path, toshared_folder(첫 번째)는 user1조건을 충족하고 home시뮬레이션하며 /home(두 번째) user1는 사용자가 쓸 수 있습니다.

보다 유연한 접근이 가능합니다. 예를 들어 user1및 에 대해서는 공통 chroot 디렉토리를 가질 수 있지만 user2에 대해서는 다른 디렉토리를 가질 수 있습니다 user3.

Chroot 디렉터리가 일반적이든 아니든, 개인적으로 저는 가장 놀라운 방식으로 하위 디렉터리를 만들 것입니다. 따라서 모든 사용자는 자신이 기대하는 디렉터리에서 자신을 찾을 수 있습니다. 입력 pwd한 후에는 sftp다음과 같이 표시되어야 합니다 /home/user1. 나는 다른 가능성( /user1, /files)이 다소 놀랍다고 생각합니다.

관련 정보