Bash 스크립팅 : 스크립트를 루트 또는 sudo로 실행해야합니다.


26

tar를 사용하여 디렉토리를 백업 할 bash 스크립트 (우분투에서)를 작성하려고합니다.

스크립트를 루트 (또는 sudo)로만 실행할 수 있도록 스크립트를 어떻게 확인합니까?

예를 들어, 사용자가 스크립트를 실행하는 경우이 스크립트를 sudo 권한으로 실행 한 다음 종료해야한다고해야합니다. 스크립트가 루트로 실행되면 검사를지나 계속 진행됩니다.

쉬운 해결책이 있어야한다는 것을 알고 있습니다. 인터넷 검색으로 찾을 수 없었습니다.

답변:


37

유효 uid를 당기려면 다음 명령을 사용하십시오.

id -u

결과가 '0'이면 스크립트가 루트로 실행 중이거나 sudo를 사용 중입니다. 다음과 같은 방법으로 검사를 실행할 수 있습니다.

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

5
id의 경로를 완전히 규정하는 것이 좋습니다 (예 : / usr / bin / id). 그렇지 않으면 악의적 인 사용자가 항상 0을 반환하는 스크립트 / 바이너리를 작성한 다음 실행중인 사용자 경로의 이전 위치에 배치 할 수 있습니다.
— ktower

동의했다. 수정으로 수정.
— Scott Pack

6
스크립트를 실행하려는 '의심스러운'사람은 id의 전체 경로를 사용하여 멈추지 않습니다.
— theotherreceive

나는 다른 것에 동의합니다 ... bash 스크립트입니다. 'ID'빈을 자격으로하여도 수표를 둘러보고자하는 사람을 막을 수는 없습니다. 이식성을 위해 자격을 갖추지 않는 것이 좋습니다.
— Chris

1
이것은 "sudo"요구 사항을 다루지 않습니다.
— GregB

17

소유권을 루트로 변경하면

chown root:root file

권한을 700으로 설정

chmod 700 file

sudo로 실행하라는 제안없이 동일한 작업을 수행합니다.

그러나 나는이 답변을 완전성을 위해 게시 할 것입니다.


3
이것은 허용되는 답변보다 더 적합한 솔루션입니다. -내 $ 0.02
— Chris

참고 사항 : 스크립트를 git에 체크인하는 것이 어려워집니다. 수정 :sudo git add <file>
— 짜잔 Eliyah에게

2

스크립트를 루트 또는 어떤 종류의 보안 예방책으로 실행해야한다고 사용자에게 알리는 목표는 무엇입니까?

uid 제안 중 아무 것도 제안하지 않는 것보다 사용자에게 알리고 싶지만 보안상의 예방책처럼 말에 대한 타이어만큼 유용합니다. 어쨌든 실행하십시오.

이것이 보안 문제인 경우 다른 사용자가 스크립트를 읽거나 실행할 수 없도록 스크립트를 root : root가 소유 한 700으로 설정해야합니다.


또는, 스크립트 파일에 대한 액세스를 필요로하거나 내 경우와 같이 작업을, 수행하기 위해 루트 만 액세스 명령이 될 수
— chrisbunney

2

whoami 명령도 사용할 수 있습니다.

if [ ! "`whoami`" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi

실제로 uid 0은 모든 권한을 가진 특수 사용자 계정입니다. "root"는 해당 UID에 매핑 된 가장 일반적인 레이블 / 이름입니다. 그것은하지 않습니다 이 '루트'로 공격자는이를 악용 할 수 있습니다.
— 0xSheepdog

2

bash 변수 $EUID는 스크립트가 실행중인 유효 UID를 표시합니다. 스크립트가 루트로 실행되도록 $EUID하려면 값이 0인지 여부를 확인하십시오 .

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Aborting."
    exit 2
fi

/usr/bin/id외부 명령이 필요 없기 때문에 (bash 스크립트의 경우!) 솔루션보다 낫습니다 .


대신 종료로의 대체하여 sudo는 로그인을 사용자에게 메시지를 표시 할 수 echo와 라인을 sudo "$0" "$@", 그리고 교체 exit 2와 함께 exit $?.
— schumacher574

0

루트로만 스크립트를 실행 가능하게하는 간단한 방법은 다음과 같이 스크립트를 시작하는 것입니다.
#!/bin/su root


-1

"#! / bin / su root"를 사용하면 수퍼 유저 모드의 사용자가 루트 비밀번호를 사용하지 않고 스크립트를 실행할 수 있습니다. 수퍼 유저가 루트 결과로 스크립트를 실행하도록하려면이 작업을 수행하십시오.

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