%EB%A1%9C%20%EC%8B%A4%ED%96%89%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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으로 설정하여 다른 사용자가 읽거나 실행할 수 없도록 해야 합니다.