쉘 스크립트 root 권한으로만 실행되게 하기

리눅스를 관리하다 보면 작업의 자동화를 위해 쉘 스크립트를 쓰는 경우가 아주 많다. 그런데 간혹가다 root 권한으로 쉘 스크립트를 실행할 필요가 있는 경우가 생길 수 있다. 일반적으로 root 권한을 요구하는 쉘 스크립트를 일반 계정으로 실행 할 경우 진행하다 권한 문제로 알아서 막히게 된다. 하지만 이런 식으로 예외처리에 기대는것 보다는, 스크립트 진입점에서 해당 쉘 스크립트를 실행한 계정을 확인해 명시적으로 처리하는 게 관리 차원에서 더 좋다. 다음은 해당 쉘 스크립트를 실행한 계정이 root 계정인지 확인하는 스크립트다.

#!/bin/bash

if [ $EUID -ne 0 ]; then
    echo "Please run as root!"
    exit
fi

EUID는 '유효 사용자 ID'라는 의미로 명령어가 실행 되었을 때, 해당 명령어를 실질적으로 실행한 사용자의 UID가 된다. 참고로 root 계정의 UID0이다. 일반 계정에서 sudo 명령어로 실행한 경우, 임시적으로 root의 권한을 빌리게 되므로 rootUIDEUID 값을 덮어쓰게 된다. 즉 위의 스크립트가 실행되었을 때, EUIDroot가 아닌 경우 "Please run as root!"라는 메시지를 터미널에 출력 시키고 그대로 프로세스를 종료해 버린다.