사용자를 다른 위치의 여러 디렉터리에 chroot

사용자를 다른 위치의 여러 디렉터리에 chroot

사용자가 RWX 권한이 있는 홈 디렉토리 와 /etc/httpd같은 디렉토리 에만 액세스하도록 제한하는 방법을 알고 싶습니다 ./etc/php/var/www/html

또한 이 사용자가 Apache 서비스만 시작/중지/다시 시작하도록 제한하고 싶습니다.

내가 생각할 수 있는 것은 chroot뿐이었지만 디렉토리를 사용하여 그렇게 했습니다. 어떤 아이디어가 있나요?

답변1

감옥에 갇힌 사용자는 이러한 폴더에 있는 그대로 액세스할 수 없습니다. 파일 시스템에서 ACL을 활성화한 경우 일반 사용자를 생성하고 액세스 제어 목록을 사용하여 디렉토리에 대한 액세스를 제어할 수 있습니다.

사용자 "Bob"에게 디렉토리 액세스 권한을 부여하려면 그룹을 생성하고 Bob을 그룹에 배치한 다음 /etc/http/에 있는 모든 기존 파일과 새로 생성된 파일에 대한 그룹 액세스 권한을 반복적으로 부여합니다.

# groupadd WebAccessGroup
# usermod -a -G WebAccessGroup Bob
# setfacl -Rm d:g:WebAccessGroup:rwx,g:WebAccessGroup:rwx /etc/httpd/

그룹을 생성하지 않고 사용자 "Bob" wrx에게만 /etc/httpd에 대한 액세스 권한을 부여할 수도 있습니다.

# setfacl -Rm d:u:Bob:rwx,u:Bob:rwx /etc/httpd/

WebAccessGroup 그룹이 Apache를 시작하고 중지할 수 있도록 하려면 그룹에 sudo 액세스 권한을 부여하여 루트로 Apache를 시작/중지할 때 호출되는 특정 스크립트를 실행할 수 있습니다.

"visudo" 명령을 사용하여 /etc/sudoers 파일에 다음 내용을 추가합니다.

# visudo
%WebAccessGroup   ALL=(root)    NOEXEC: /usr/bin/httpd

Bob은 sudo를 사용하여 Apache를 시작합니다.

$ sudo /usr/sbin/httpd -k start

** 참고: 루트가 아닌 사용자(이 예에서는 "다른 사용자")로 비표준 포트에서 Apache를 실행하는 경우 All=(root)를 All=(anotheruser)로 변경하는 것이 더 안전하고 효율적입니다. run start 좋은 명령은 다음과 같습니다:

sudo -u anotheruser /usr/sbin/httpd -k start

답변2

Linux에서는 바인드 마운트를 사용하여 chroot에 다른 디렉터리를 표시할 수 있습니다.

# mkdir -p /users/chroot/var/www/html
# mount --bind /var/www/html /users/chroot/var/www/html 
etc.

사용자가 단일 서비스를 다시 시작할 수 있도록 허용하려면 다음 과 같은 명령을 사용 sudo하고 사용자가 실행하도록 허용하면 됩니다.service apache2 restart

그러나 사용자를 chroot 상태로 유지하고 사용자가 chroot 외부에서 서비스를 다시 시작하도록 허용하는 것은 어려울 수 있습니다. 이를 위해서는 서비스 관리자(systemd?)에 필요한 모든 것이 chroot에 표시되어야 합니다. 그 시점에서는 동일한 chroot(또는 컨테이너 또는 가상 머신) 내에서 전체 서버를 실행하는 것이 더 쉬울 수 있습니다.

관련 정보