특정 폴더에만 액세스할 수 있는 SFTP 사용자 - 파일 생성 권한이 거부됨

특정 폴더에만 액세스할 수 있는 SFTP 사용자 - 파일 생성 권한이 거부됨

public_html그래서 내 폴더 내의 특정 폴더에만 액세스할 수 있는 사용자를 생성하려고 합니다 . 사용자를 성공적으로 생성했으며 로그인할 수 있습니다. SFTP 사용자가 SFTP를 사용할 수 있기 전에 폴더를 루트가 소유해야 했기 때문에 처음에는 로그인하는 데 몇 가지 문제가 있었습니다.

그래서 저는 이 가이드를 따랐습니다.https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-comComponent- 폴더의 소유권을 루트로 변경하라고 지시합니다.

이 작업을 수행하면 성공적으로 로그인할 수 있지만 일단 로그인하면 이 폴더가 루트 소유이기 때문에 이 폴더 내에서 파일을 추가하거나 아무 작업도 수행할 수 없습니다.

그룹을 만들고 루트 사용자와 sftp 사용자를 이 그룹의 구성원으로 추가하려고 시도했지만 역시 작동하지 않았습니다.

내 해결 방법은 루트 사용자를 사용하여 sftp 폴더 내에 다른 디렉터리를 만든 다음 나중에 sftp 사용자로 소유권을 변경하는 것이었지만 이것은 나에게 너무 해킹된 것처럼 보이며 추가로 내가 큰 팬이 아닌 트리 구조에 다른 폴더를 추가합니다. 의.

sftp 사용자에게 폴더에 대한 쓰기 액세스를 허용하고 루트는 소유자로 유지되는 방법에 대한 아이디어가 있습니까?

답변1

몇몇 스택 교환 사이트에서 이런 종류의 것에 대해 많은 이야기가 있습니다. 하지만 중복이 아닌 경우에는 ...

내 CentOS 7에서는 ChrootDirectory를 사용하여 사용자를 디렉터리로 제한할 때 해당 디렉터리는 루트가 소유해야 하며 권한이나 FACL을 통해 다른 사용자에게 쓰기 액세스를 허용할 수 없습니다. 심볼릭 링크를 설정할 수 있지만 sftp 사용자는 디렉토리로 제한되어 있으면 이를 따를 수 없습니다. 그래서 당신은 이것을 해야 합니다.

사용자 생성

useradd ftp_user

비밀번호 설정

passwd ftp_user

권한을 설정하세요. 그의 집은 감옥이 될 것입니다.

chown root:root /home/ftp_user
chmod 0755 /home/ftp_user

지금 사용자를 해당 감옥으로 제한하세요

vi /etc/ssh/sshd_config

이것을 변경하십시오:

#Subsystem sftp /usr/lib/openssh/sftp-server

에게

Subsystem sftp internal-sftp

추가하다

Match User ftp_user
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

vi를 저장하고 종료합니다.

잊지 마세요:

systemctl restart sshd 

이제 우리는 그들을 속입니다. 귀하의 고객이 /var/www/corny_website에서 계속 사용할 수 있는 웹사이트를 가지고 있다고 가정해 보겠습니다.

해당 디렉터리에 대한 권한이 있는지 확인하세요.

setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website

이제 심볼릭 링크 대신 마운트합니다.

mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/

이제 사용자가 sftps를 사용할 때. 그는 깨진 파이프 오류를 겪지 않을 것이며 /home/ftp_user만 볼 수 있을 뿐 아니라 /var/www/corny_website에서만 업로드하거나 다운로드할 수 있을 것입니다. /var/www/corny_website는 /로 표시됩니다. corny_website.

관련 정보