사용자가 시스템의 모든 파일이나 디렉터리에서 chown
명령을 실행할 수 있도록 sudoers 파일을 통해 sudo를 구성할 수 있습니다. 그러나 나는 해당 디렉토리에 있는 파일에 대해 이러한 명령을 실행할 수 있는 권한 chmod
만 사용자에게 부여하고 싶습니다 ./var/www/html
사용자가 미리 지정된 디렉터리에서만 실행할 수 있도록 권한 있는 명령을 제한하는 방법은 무엇입니까?
예: 다음 명령은 index.html
파일에 777 권한을 부여합니다.
sudo chmod 777 /var/www/html/index.html
이제 두 가지 작업을 수행하고 싶습니다.
sudo
사용자가 내부chmod
에서 실행되도록 제한chown
/var/www/html
사용자가 시스템의 다른 곳에서 이러한 명령을 실행하는 것을 금지합니다(예:
/var/www
또는 에서 명령을 실행할 수 없음/var/ftp
).
답변1
당신이 묻는 질문은 불가능하지는 않더라도 어렵습니다. 애플리케이션을 특정 디렉토리의 파일로 제한하더라도 chown
누군가 chmod
는 여전히 심볼릭 링크를 전달하여 원하는 위치의 파일에 영향을 미칠 수 있습니다.
다행히도 현재 수행하려는 작업이 실제 문제를 해결하는 올바른 방법이 아닐 가능성이 높으며, 작동하는 다른 방법이 있습니다.
일반적으로 파일을 생성하고 수정하기 위해 추가 권한이 필요한 사용자는 /var/www
그룹에 추가됩니다(일반적 www-data
으로 사이트의 각 부분에 대해 다른 그룹이 있을 수 있음). setgid 디렉토리와 함께 그룹 소유권을 사용할 수 있습니다. 그룹의 모든 사람은 디렉토리에 쓸 chgrp www-data /var/www/html; chmod g+ws /var/www/html
수 있으며 디렉토리에 생성된 파일은 파일을 생성한 사용자의 기본 그룹이 아닌 해당 그룹이 소유합니다 . 그러나 이는 그다지 유연하지 않습니다.www-data
/var/www/html
www-data
당신이 해야 할 일이 정해져 있습니다액세스 제어 목록의 경우 /var/www
먼저 ACL이 활성화되어 있는지 확인하십시오. 열린 파일 시스템은 /var/www
이 옵션을 사용하여 마운트되어야 합니다 . acl
바라보다디렉터리의 모든 새 파일을 그룹에서 액세스할 수 있도록 설정도움을 요청. ACL 유틸리티( getfacl
및 setfacl
)도 설치합니다. 그런 다음 /var/www/html
해당 권한이 있어야 하는 사용자에게 트리에 대한 추가 권한을 부여합니다. 사용자별 ACL을 설정할 수 있지만 일반적으로 파일 시스템의 일부에 대해 동일한 권한을 가진 사용자를 그룹에 배치하고 해당 그룹에 대한 ACL을 설정하는 것이 더 쉽습니다. 예를 들어, 그룹의 사용자가 html-writers
다음 트리에 대한 읽기 및 쓰기 액세스 권한을 가져야 하는 경우 /var/www/html
:
setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html
답변2
/etc/sudoers
add 명령을 사용하여 파일의 모든 매개변수를 "myuser"가 사용하는 명령으로 제한할 수 있습니다 visudo
.
## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt
각 작업에 대한 로깅을 활성화하려면 다음을 추가하세요.
Defaults logfile=/var/log/sudo.log
예제 출력:
[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt
-sh-3.1$
sudo를 사용할 때는 "myuser"가 신뢰할 수 있는 사람이라는 전제가 있어야 합니다. 파일 권한에 주의하세요. 악의적인 sudo 사용자가 외부 리소스의 파일을 연결하고 변경하는 것을 방지할 수 있는 쉬운 방법은 없습니다.
답변3
실제로 이를 수행하는 매우 쉬운 방법이 있는데, 이는 특정 파일이나 디렉토리에 대한 수정을 제한하는 Bash(또는 선택한 셸) 스크립트를 만드는 것입니다.
귀하의 예에서는 다음과 같습니다.
$ vi /usr/local/bin/mychmod
#!/bin/bash
chmod 777 /var/www/index.html
그런 다음 www-data가 /usr/local/bin/mychmod를 실행할 수 있도록 sudoers 파일을 변경합니다.
하지만 이 공간에 사용자 입력(예: 사용자가 chmodded 파일이나 디렉터리를 변경하도록 허용)을 허용하는 것은 매우 위험하며, 비슷한 작업을 수행하려면 주입 공격을 필터링하는 방법을 알아야 합니다. 공격자는 이러한 방식으로 루트 권한으로 모든 명령을 쉽게 실행할 수 있으며 시스템 보안을 효과적으로 손상시킬 수 있습니다.