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

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

tar를 사용하여 디렉터리를 백업하는 bash 스크립트(Ubuntu에서)를 작성하려고 합니다.

루트(또는 sudo)로만 실행할 수 있도록 스크립트에서 검사를 수행하려면 어떻게 해야 합니까?

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

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

답변1

유효한 uid를 가져오려면 다음 명령을 사용하십시오.

id -u

결과가 '0'이면 스크립트는 루트로 실행 중이거나 sudo를 사용하는 것입니다. 다음과 같은 작업을 수행하여 검사를 실행할 수 있습니다.

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

답변2

소유권을 루트로 변경하면 알 수 있다고 가정합니다.

chown root:root file

권한을 700으로 설정하고

chmod 700 file

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

하지만 완전성을 위해 이 답변을 게시하겠습니다.

답변3

bash 변수는 $EUID스크립트가 실행 중인 유효 UID를 표시합니다. 스크립트가 루트로 실행되는지 확인하려면 $EUID값 0이 포함되어 있는지 확인하세요.

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

/usr/bin/id이는 외부 명령이 필요하지 않기 때문에 (bash 스크립트용!) 솔루션보다 낫습니다 .

답변4

사용자에게 루트 또는 일종의 보안 예방 조치로 스크립트를 실행해야 함을 알리는 목적은 무엇입니까?

사용자에게 uid 제안 중 하나라도 괜찮다는 점을 알리고 싶지만 보안 예방 조치만큼 말에 달린 타이어만큼 유용하다면 사용자가 if 문을 꺼내서 스크립트를 복사하는 것을 막을 수 있는 방법은 없습니다. 어쨌든 그것을 실행합니다.

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

관련 정보