스크립트를 항상 루트로 실행할 수 있습니까?


27

누가 스크립트를 실행하든 루트로 스크립트를 실행하는 방법은 무엇입니까?

setuid에 대해 읽었지만 어떻게 해야할지 모르겠습니다.

Linux, Ubuntu 12.04 LTS를 사용하고 있습니다.


어떤 Linux 배포판이 있습니까? 아니면 유닉스?
slhck 2016 년

@slhck Linux, 우분투 12
HappyDeveloper

3
setuid스크립트에서는 작동하지 않습니다. 요즘 대부분의 * nix 배포판에서는 보안상의 이유로 비활성화되어 있습니다. 설정할 수는 있지만 무시됩니다. 실제 문제에 대해 더 자세히 설명하여 문제를 해결하는 데 도움을 줄 수 있습니까? 어떤 스크립트입니까? 왜 루트로 실행해야합니까? sudo대안을 사용 하고 있습니까?
slhck 2016 년

당신은 시도 했습니까 sudo -s?
Nam Phung

답변:


29

setuid와 결합 된 스크립트는 위험합니다!

먼저이 질문 / 답변 , 특히이 답변 및 보안 경고를 살펴보십시오 .

여전히 setuidset을 사용 하여 스크립트를 실행하려면 짧은 C 프로그램을 래퍼로 작성하고 setuid컴파일 된 바이너리에 비트를 설정할 수 있습니다.

래퍼 예 :

int main(void) {        
    setuid(0);
    clearenv();
    system("/absolute/path/to/your/script.sh");
}

를 사용하는 또 다른 솔루션 sudo( here 언급 ) :

  1. 루트로서 스크립트에 대한 쓰기 (및 기타) 액세스를 방지하십시오.

    chown root /absolute/path/to/your/script.sh
    chmod 700 / 절대 / 경로 /to/your/script.sh
    
  2. 루트를 제외한 아무도 스크립트를 대체 할 수 없는지 확인하십시오 ( 예 : 상위 폴더의 액세스 권한을 수정하여).

    chown root / 절대 / 경로 / to / your /
    chmod 755 / 절대 / 경로 / to / your /
    
  3. 다음을 사용 /etc/sudoers하여 sudo 액세스 권한을 수정하십시오 visudo.

    ALL ALL = (루트) NOPASSWD : /absolute/path/to/your/script.sh
    

    설정에 대한 자세한 내용 (예 : 특정 사용자 또는 그룹에 대한 액세스 제한)은 sudoers 맨 페이지에서 찾을 수 있습니다.

이후 모든 사용자는 비밀번호없이 루트로 스크립트를 실행할 수 있습니다.

sudo /absolute/path/to/your/script.sh

이것은 위의 래퍼 / 세트 솔루션을 사용하는 것과 유사합니다.


3
구체적인 위험은 분명하지 않지만 환경을 중심으로 크게 좌우됩니다. 대부분의 프로그램과 달리 쉘 스크립트의 동작은 수십 가지 환경 변수에 의해 크게 변경 될 수 있으므로 광범위한 보호 조치없이 이러한 스크립트를 쉽게 임의의 코드를 실행하도록 속일 수 있습니다.
Stephanie

1
해당 랩퍼에서 시스템 호출 전에 clearenv () 호출을 추가하여 환경을 완전히 날려서 스크립트를 조작하기위한 악의적 인 설정이 없도록하십시오. kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html
Stephanie

@Stephanie 나는 잘못된 일을해야합니다.이 모든 것이 일반적인 작업에 너무 미쳐 보이기 때문입니다. 이것이 내가하려는 일 : serverfault.com/questions/401405/…
HappyDeveloper

@HappyDeveloper 보안이 제대로 설정되지 않은 스크립트는 스크립트를 관리하는 모든 사람이 루트로 사용할 수있는 경로이기 때문에 setuid 스크립트에는 그리 열광하지 않습니다.
Stephanie

4
sudo모든 사용자에게 특정 프로그램 (또는 스크립트)에 대한 액세스 권한을 부여하는 데 사용할 수 있습니다. 그런 의미에서 멋진 setuid 래퍼 역할을합니다. 일반적으로 자신의 setuid 래퍼를 작성하는 것보다 더 나은 선택 인 것 같습니다.
jjlin

4

가장 쉽고 안전한 방법은 파일 권한에서 SETUID 비트를 사용하는 것입니다. 이렇게하면 명령 권한이 파일 소유자 권한으로 올라갑니다.

스크립트가 판에서 나오는 것을 방지하기 위해 모든 사람에게 쓰기를 설정하지 마십시오.


0

이것이 유용한 지 모르겠지만 스크립트를 루트로만 실행하려면 스크립트의 첫 번째 줄에서이 shebang을 사용할 수 있습니다.

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