사용자가 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(또는 컨테이너 또는 가상 머신) 내에서 전체 서버를 실행하는 것이 더 쉬울 수 있습니다.