SUDOERS를 통해 특정 디렉토리에서 명령을 실행하도록 제한하는 방법은 무엇입니까?


13

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)


1
올리지하지 마십시오 - superuser.com/questions/456662/...
울리히 DANGEL

7
이것이 정말로 올바른 방법입니까? 어떻게 약 www-data의 필요성 제거 그룹 chmod/ chown아무것도?
sr_

멋있는. 그렇게하면 루트가 매우 쉬워집니다. 포기하는 것은 매우 나쁜 생각 chown입니다. 그 외에는 왜 chmod루트로 실행 해야하는지 이유 가 없습니다 .
Nils

답변:


13

불가능하지는 않지만 당신이 묻는 것은 어렵습니다. 특정 디렉토리에있는 파일 의 응용 프로그램 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

에 관하여 "이 매우 유연하지 않다" (제 3의 끝) - 왜 그렇지? 사람들이 특정 그룹에 속해 있어야합니까? (권한, ACL 및 관련 사항에 대해서는 거의 알지 못합니다.)
KajMagnus

3
@KajMagnus root는 그룹을 관리해야하고 파일은 단일 그룹에만 속할 수 있기 때문에 융통성이 없습니다. ACL을 사용하면 모든 사용자가 자신이 소유 한 파일에 액세스 할 수있는 사람을 선택할 수 있으며 여러 사용자 및 그룹을 ACL에 언급 할 수 있습니다.
Gilles 'SO- 악마 그만해'

2

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 사용자가 외부 자원에서 파일을 링크하지 못하도록 변경하는 간단한 방법은 없습니다.


전에 시도했지만 오류가 발생했습니다. 죄송합니다. 사용자 prashant가 prashant.xyz.com의 루트로 '/ bin / chmod 777 / var / www / html / a'를 실행할 수 없습니다.
PrashantB

su - prashant또는 로 사용자를 전환 su prashant했습니까?
tombolinux

예, 나는 불쾌한 사용자가 명령을 실행하고 있습니다. 포럼을 읽고 명령이 시스템 전체에서 실행된다고 말합니다. 아무도 그런 문제에 대해 쓰지 않았습니다.
PrashantB

나는 whooo를 실행 :). 그러나 이것은 정적 명령이 될 것입니다. / var / www / html에있는 모든 파일에 대한 권한을 적용 할 수 있도록 일반으로 만들 수 있습니까?
PrashantB

3
이것은 완전히 안전하지 않습니다 : sudo /bin/chmod 666 /var/www/html/../../../etc/passwd그리고 만약 당신이 어떻게 든 그것을 고치면ln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
Gilles 'SO- 악의를 그만두십시오'

1

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

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

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

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

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


이것은 매우 위험하며 실제로 해결되지 않습니다 ...
SomeGuy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.