우분투 : 사용자가 루트 권한으로 스크립트를 실행하도록하십시오.


9

우분투 8.04가 root있으며 모든 사용자가 실행할 수 있는 bash 스크립트를 작성하고 싶습니다 .

나는 스스로 sudo를 할 수있다.

어떻게합니까?

명확화 : sudo로하고 싶지 않습니다. 사용자는 암호를 입력해야하기 때문입니다. 스크립트를 루트, 아마도 setuid, dunno로 실행하기를 원합니다.

답변:


23

이것이 정상적인 바이너리라면 다음을 실행하여 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 바이너리마다 다른 잠재적 인 보안 문제가 추가됩니다.


나는 이것이 내가 찾고있는 대답이라고 생각합니다. bash 스크립트를 바이너리로만 설정할 수 없습니까? (물론 편집 할 수 없도록 조치를 취할 것입니다)
flybywire

아니요, 스크립트 setuid를 만들 수 없습니다.
wfaulk

wfaulk : 예전에는 가능했지만 최신 Linux 배포판에서는 더 이상 사용할 수 없습니다. shc와 같은 도구를 사용하여 스크립트를 '컴파일'한 다음 setuid로 만들 수 있습니다.
Kyle Brandt

wfaulk : 물론, 의도적으로 비활성화 된 작업을 수행하는 데 방해가되므로 아마도 나쁜 생각 일 것입니다 :-)
Kyle Brandt

ALL하나의 sudoer 만 암호를 입력하지 않고 실행할 수 있도록 용어 를 사용자 이름으로 바꾸십시오.
hdave

3

내가 그 줄을 삽입하기 위해 필요한 말미에서 의은 / etc /의 sudoers는 : ALL ALL = NOPASSWD: <filename> 분명히, 나중에 %admin ALL=(ALL) ALL재정 관리 사용자의 암호를 요구했다.

스크립트가 제대로 결정되고 무해하며 허용되는 작업을 수행하고 매개 변수 값으로 인해 스크립트가 제대로 작동하지 않는 한 스크립트를 루트로 실행할 수있는 보안 문제는 없습니다.

그러나 문제가 있습니다 ...

명령 및 파일 이름에는 항상 전체 경로를 사용하십시오. 당신이 좋아하는 뭔가를 작성하는 경우 echo Hello world!myrootscript, 누군가를 작성할 수 ~/bin/echo scriptmyrootscript그 안에 무엇이든 루트로 실행됩니다.

/bin/echo "Hoping this will keep you safe" :-)


머신의 루트가 아닌 사용자가 해당 스크립트를 편집 할 수있는 경우 해당 사용자가 머신을 대신 할 수 있습니다. 동일한 사용자의 암호가 약하면 시스템이 완전히 손상되는 것을 막을 수있는 것은 없습니다.
hdave

2

기본적으로 wheel그룹 구성원은 으로 sudo모든 명령을 수행 할 수 root있습니다. 이것은 아마도 당신이 sudo지금까지 사용 하고있는 방법 일 것입니다.

다른 사용자를 허용하려면 sudoers규칙 을 만들어야합니다 . 예를 들면 다음과 같습니다.

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

사용자가 허용 mickey.mouse명령을 실행 /usr/local/bin/test.sh으로 root추가 암호를 입력하라는 메시지를 필요로하지 않고.

자세한 내용 은 이 문서 를 읽어야 합니다 .


데비안 / 우분투는 wheel 대신 관리자 그룹을 사용합니다. 약간 더 정확한 이름 일 수 있습니다.
David Pashley

구식이라고 불러주세요 ..;)
Dan Carley

1
구식 : P
David Pashley

0

chmod +s <filename>suid 비트를 설정하는 데 사용 합니다. 이것은 파일이 실행될 때 파일 소유자의 권한으로 실행된다는 것을 의미합니다.

그러나 이것은 bash 스크립트와 같이 매우 위험 할 수 있습니다. 사용자가 스크립트를 변경하는 방법을 찾으면 쉽게 루트 셸을 얻을 수 있습니다. 루트 이외의 다른 사람이 쓸 수 없도록하십시오.

Linux에서는 스크립트에서 setuid를 사용할 수 없으므로이를 위해서는 프로그램으로 컴파일해야합니다. 대신 sudoers 파일 (/ etc / sudoers)을 사용하여 이와 같은 행을 추가 할 수 있습니다.

<username> ALL = NOPASSWD: /path/to/script


0

다른 대안 : 해당 스크립트 주위에 작은 setuid C 래퍼를 수행 할 수 있습니다.

  • 적용하려는 제한 사항을 확인합니다 (사용자 목록, 시간, 시스템로드 등).
  • 원하는 경우 로그 / 감사 실행
  • 스크립트를 실행

의 여러 기능 중 자신의 하위 집합과 같은 종류입니다 sudo.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.