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.