답변:
이것이 정상적인 바이너리라면 다음을 실행하여 setuid 할 수 있습니다
# chmod u+s /path/to/binary
불행히도 스크립트는 setuid로 설정할 수 없습니다. (잘 할 수는 있지만 무시됩니다). 그 이유는 스크립트의 첫 줄이 OS에 스크립트를 실행할 인터프리터를 알려주기 때문입니다. 예를 들어 다음과 같은 스크립트가있는 경우
#!/bin/bash
당신은 실제로 실행 결국
/bin/bash /path/to/script
분명히 통역사가 setuid가 필요합니다. 그러면 모든 스크립트가 설정됩니다. 이것은 나쁠 것입니다.
visudo를 실행하여 / etc / sudoers 파일에 다음을 넣어 sudo로이를 수행 할 수 있습니다.
ALL ALL=NOPASSWD: /path/to/script
이제 모든 사용자가 실행할 수 있습니다
$ sudo /path/to/script
이를 통해 비밀번호를 입력하지 않고도 스크립트를 실행할 수 있습니다.
명령에 sudo를 필요로하지 않는 대안이 있습니다.이 경우 스크립트를 실행하는 작은 setuided 바이너리를 만들어야하지만 추가적인 setuid 바이너리마다 다른 잠재적 인 보안 문제가 추가됩니다.
ALL
하나의 sudoer 만 암호를 입력하지 않고 실행할 수 있도록 용어 를 사용자 이름으로 바꾸십시오.
내가 그 줄을 삽입하기 위해 필요한 말미에서 의은 / etc /의 sudoers는 : ALL ALL = NOPASSWD: <filename>
분명히, 나중에 %admin ALL=(ALL) ALL
재정 관리 사용자의 암호를 요구했다.
스크립트가 제대로 결정되고 무해하며 허용되는 작업을 수행하고 매개 변수 값으로 인해 스크립트가 제대로 작동하지 않는 한 스크립트를 루트로 실행할 수있는 보안 문제는 없습니다.
그러나 문제가 있습니다 ...
명령 및 파일 이름에는 항상 전체 경로를 사용하십시오. 당신이 좋아하는 뭔가를 작성하는 경우 echo Hello world!
에 myrootscript
, 누군가를 작성할 수 ~/bin/echo script
와 myrootscript
그 안에 무엇이든 루트로 실행됩니다.
/bin/echo "Hoping this will keep you safe"
:-)
기본적으로 wheel
그룹 구성원은 으로 sudo
모든 명령을 수행 할 수 root
있습니다. 이것은 아마도 당신이 sudo
지금까지 사용 하고있는 방법 일 것입니다.
다른 사용자를 허용하려면 sudoers
규칙 을 만들어야합니다 . 예를 들면 다음과 같습니다.
mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh
사용자가 허용 mickey.mouse
명령을 실행 /usr/local/bin/test.sh
으로 root
추가 암호를 입력하라는 메시지를 필요로하지 않고.
chmod +s <filename>
suid 비트를 설정하는 데 사용 합니다. 이것은 파일이 실행될 때 파일 소유자의 권한으로 실행된다는 것을 의미합니다.
그러나 이것은 bash 스크립트와 같이 매우 위험 할 수 있습니다. 사용자가 스크립트를 변경하는 방법을 찾으면 쉽게 루트 셸을 얻을 수 있습니다. 루트 이외의 다른 사람이 쓸 수 없도록하십시오.
Linux에서는 스크립트에서 setuid를 사용할 수 없으므로이를 위해서는 프로그램으로 컴파일해야합니다. 대신 sudoers 파일 (/ etc / sudoers)을 사용하여 이와 같은 행을 추가 할 수 있습니다.
<username> ALL = NOPASSWD: /path/to/script