SUDOERS를 통해 특정 디렉토리에서 명령을 실행하도록 제한하는 방법은 무엇입니까? 실행할 수있는 권한 만 사용자에게 부여하고 싶습니다

sudoers 파일을 통해 sudo를 구성하여 사용자가 시스템의 모든 파일 또는 디렉토리에서 chownchmod명령 을 실행할 수 있도록 할 수 있습니다. 그러나 /var/www/html디렉토리 아래에있는 파일에서 이러한 명령을 실행할 수있는 권한 만 사용자에게 부여하고 싶습니다 .

사용자가 미리 지정된 디렉토리에서만 명령을 실행할 수 있도록 권한있는 명령을 어떻게 제한 할 수 있습니까?

예를 들면 다음과 같습니다. 다음 명령은 index.html파일에 777 권한을 부여 합니다.

sudo chmod 777 /var/www/html/index.html

이제 두 가지 작업을 수행하고 싶습니다

  1. 제한 sudo사용자 만 실행할 수 있도록 chmod하고 chown내에서/var/www/html

  2. 사용자가 시스템의 다른 곳에서 이러한 명령을 실행할 수 없도록합니다 (예 : /var/www또는 에서 명령을 실행할 수 없음 /var/ftp)



답변

불가능하지는 않지만 당신이 묻는 것은 어렵습니다. 특정 디렉토리에있는 파일 의 응용 프로그램 chownchmod파일 의 응용 프로그램을 제한 한 경우에도 누군가가 여전히 심볼릭 링크를 전달하여 원하는 위치의 파일에 영향을 줄 수 있습니다.

다행히도, 당신이하려는 것은 실제 문제에 대한 올바른 해결책이 아니며 다른 방법이 있습니다.

일반적으로 파일을 만들고 수정하기위한 추가 권한이 필요한 사용자 /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/wwwacl옵션 으로 마운트해야합니다 . 참조 그룹에 대한 디렉토리에있는 모든 새 파일을 액세스 할 수있게 하는에 도움. ACL 유틸리티 ( getfaclsetfacl) 도 설치하십시오 . 그런 다음 /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


답변

add /etc/sudoers명령을 사용하여 파일의 모든 인수와 함께 “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 사용자가 외부 자원에서 파일을 링크하지 못하도록 변경하는 간단한 방법은 없습니다.


답변

실제로 Bash (또는 선택한 셸) 스크립트를 만들어 특정 파일이나 디렉토리에 대한 수정 사항을 제한함으로써 상당히 간단한 방법이 있습니다.

귀하의 예에서는 다음과 같습니다.

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

그런 다음 www-data가 / usr / local / bin / mychmod를 실행하도록 sudoers 파일을 변경합니다.

그러나이 공간에 사용자 입력 (예 : 사용자가 어떤 파일 또는 디렉토리를 변경할 수 있도록 허용)하는 것은 매우 위험하므로 다음과 같은 작업을 수행하려는 경우 주입 공격을 필터링하는 방법을 알아야합니다. 그. 공격자는이 방법으로 루트로 모든 명령을 쉽게 실행하여 시스템의 보안을 효과적으로 손상시킬 수 있습니다.


답변