openssh/sftp-server 가상 chroot가 작동하지 않습니다

openssh/sftp-server 가상 chroot가 작동하지 않습니다

예를 들어 ssh에 접속하여 실행하면 sshfs 접속을 통해 루트 디렉터리를 얻을 /usr/libexec/openssh/sftp-server -d /opt/files수 있다./

예: test사용자 가 있고 authorized_keys두 개의 액세스 권한이 있습니다. 하나는 모든 액세스 권한이 있고 다른 하나는 제한된 액세스 권한이 있습니다. 예:

restrict,command="/usr/libexec/openssh/sftp-server -d /opt/files" ssh-rsa AAA...

하지만 다음 키를 사용하여 루트 디렉터리를 마운트할 수 있습니다.

# mkdir /mnt/remote
# sshfs test@hostname:/ /mnt/remote
# ls /mnt/remote
bin boot dev etc home ...

Python으로 개발된 사용자 정의 소프트웨어와의 통합을 만들려고 합니다. 그래서 chroot에 대해 서로 다른 권한을 가진 여러 사용자를 사용하는 대신 단일 사용자를 사용하려고 합니다. 위임된 액세스를 기반으로 단일 사용자를 사용하고 싶습니다. 다른 디렉토리 각 키에 대해 이 작업을 수행합니다.

답변1

단순히 -d옵션을 사용한다고 sftp-server해서 세션이 루트화되지는 않습니다.

sftp-server그 자체로는 특별한 권한이 없으며 chroot()시스템 호출에는 루트 권한(또는 CAP_SYS_CHROOT별도의 기능을 사용하는 경우 특정 기능)이 필요합니다. 따라서 sftp-server루트로 실행하지 않는 한 실제 chroot 작업을 수행하는 것은 사실상 불가능합니다 .

매뉴얼 sftp-server(8)페이지에는 다음과 같이 나와 있습니다.

-d 시작 디렉토리

사용자의 대체 시작 디렉터리를 지정합니다. [...] 기본값은 사용자의 홈 디렉터리를 사용하는 것입니다. 이 옵션은 유용합니다sshd_config(5) ChrootDirectory 옵션과 함께 사용됩니다.

따라서 귀하의 sftp-server -d /opt/files것은 "가상 chroot"가 아닙니다. cd /opt/filesSFTP 세션에 대한 제어권을 원격 클라이언트에 부여하기 전의 프로세스 에 지나지 않습니다 .

특정 사용자만 chroot하려면 파일 끝에서 다음과 같이 할 수 있습니다 /etc/ssh/sshd_config.

Match User test
ChrootDirectory /opt/files

실제 chroot를 수행할 계획이라면 이 옵션에 대한 설명을 주의 깊게 읽어야 합니다 ChrootDirectory. 이를 디렉토리로 사용하기 위한 요구 사항은 ChrootDirectory매우 엄격합니다.

불행하게도 세션이 루트로 지정될 디렉터리를 결정하기 위해 키를 사용할 수 없는 것 같습니다. 이 ChrootDirectory옵션은 일부 %-토큰을 허용하지만,최신 버전의 OpenSSH에 대한 sshd_config(5) 매뉴얼 페이지설명하다:

ChrootDirectory는 %%, %h, %U 및 %u 태그를 허용합니다.

이 네 가지 토큰은 리터럴 %문자, 사용자의 홈 디렉터리, 숫자로 구성된 사용자 ID 및 사용자 이름을 나타냅니다.

예를 들어, Python 애플리케이션이 여러 클라이언트를 위해 파일을 준비하도록 하는 것이 목표라면 사용자 그룹이 바로 그것입니다! 많은 최신 Linux 배포판에서 각 사용자는 사용자 이름과 동일한 그룹 이름을 사용하여 해당 사용자 전용 그룹으로 생성됩니다.

다음과 같이 사용자 계정을 설정할 수 있습니다.

사용자 초등학교 그룹 보조 그룹
파이썬 앱 파이썬 앱 테스트 1, 테스트 2, 테스트 3...
테스트 1 테스트 1 (아무것도 아님)
테스트 2 테스트 2 (아무것도 아님)
테스트 3 테스트 3 (아무것도 아님)
... ... ...

사용자 의 홈 디렉터리에 최소 710( )으로 설정된 권한이 있고 test1각 홈 디렉터리에 권한이 2770()인 그룹 쓰기 가능 하위 디렉터리가 있는 경우 , 사용자는 모든 그룹 쓰기 가능 하위 디렉터리 하위 디렉터리에 액세스할 수 있지만 사용자는 액세스 할 수 없습니다. 사용자들 사이에는 공개 그룹 멤버십이 없기 때문에 서로의 홈 디렉토리나 그 안에 있는 그룹 쓰기 가능 디렉토리에 액세스할 수 없습니다 . 그룹 쓰기 가능 하위 디렉터리의 setgid 비트는 사용자가 만든 모든 파일이 사용자별 그룹에 할당되도록 보장하므로 사용자는 그룹 이름을 볼 수 없습니다.test2test3drwx--x---drwxrws---pythonapptest...test...pythonapptest...pythonapp

물론, 수백 또는 수천 명의 고객이 있는 경우 이 접근 방식은 그렇게까지 확장하기 어려울 수 있습니다.

관련 정보