작은 bash 스크립트가 있습니다.
#!/bin/bash
touch dummy.txt
이 스크립트를 실행하면 루트로 보호 되는 스크립트 sudo
가 생성 됩니다 .dummy.txt
내가하고 싶은 것은 :
이 스크립트가 sudo
일반 사용자를 사용하여 실행되는지 여부에 관계없이 파일 dummy.txt
은 루트로 보호 되어서는 안됩니다 .
작은 bash 스크립트가 있습니다.
#!/bin/bash
touch dummy.txt
이 스크립트를 실행하면 루트로 보호 되는 스크립트 sudo
가 생성 됩니다 .dummy.txt
내가하고 싶은 것은 :
이 스크립트가 sudo
일반 사용자를 사용하여 실행되는지 여부에 관계없이 파일 dummy.txt
은 루트로 보호 되어서는 안됩니다 .
답변:
and 변수 를 sudo
사용하여 스크립트가 실행 중인지 테스트 한 다음 true 인 것처럼 실행할 수 있습니다.EUID
SUDO_USER
touch
SUDO_USER
#!/bin/bash
if [[ $EUID -eq 0 ]] && [[ -n $SUDO_USER ]]; then
sudo -u "$SUDO_USER" touch dummy.txt
else
touch dummy.txt
fi
==
문자열 비교에 사용됩니다. $EUID
정수 값을 반환해야하기 때문에 -ed
비교 를 사용하는 것이 좋습니다 . usernames에 공백이 허용 되므로 $SUDO_USER
변수를 인용하십시오 . 그렇지 않으면 좋은 대답입니다. 이것은 개인적으로 사용하는 것입니다.
sudo -u
가 루트로 실행되고 있음을 감지하면 스크립트를 다시 실행할 수 있습니다 . OP는 하나의 스크립트에 여러 명령을 갖는 것에 대해 이야기했습니다. 그러나 무한 반복 오류가 발생하지 않도록주의하십시오.
[[...]]
문 @Serg 내가 gues이 경우 내에서 변수를 인용 그래서 꼭 필요한 것은 -ed
오타에 대한이었다-eq
-eq
. [[
단어 분할이 없다는 것을 몰랐습니다 . 감사. 개인적으로, 나는 여전히 좋은 스크립팅 습관을 위해 인용하고 싶습니다
스크립트를로 실행하지 않으려는 경우 root
문제를 해결하는 가장 안전한 방법은 맨 처음에 스크립트 실행을 중단하는 것입니다.
if [ "$EUID" = 0 ]; then
echo "This script must NOT be run as root"
exit 1
fi
선택적 sudo -u FALLBACK_USER "$0"
으로 단순히 중단하는 대신 스크립트를 대체 사용자 (예 :)로 다시 실행할 수 있습니다 .
개별 명령의 단점을 해결하려고하면 스크립트가 불필요하게 복잡해지고 디버깅하기가 어려워집니다. 수정 할 때마다 모든 테스트를 두 번 (일반 사용자로, 다음으로 root
) 수행 root
하고 발생하는 모든 관련 버그를 수정 해야합니다. 따라서 미래를 보장하는 솔루션은 아닙니다.
기본적으로 root accound로 작성된 파일에는 다음과 같은 권한이 있습니다.
-rw-r--r-- 1 root root 0 11月 17 23:25 rootfile.txt
이 파일은 루트 사용자 및 루트 그룹에 속하며 루트로 읽고 쓸 수 있지만 다른 사람 만 읽을 수 있습니다.
가장 간단한 방법은 chown
파일을 원래 사용자에게 되 돌리는 것입니다.
chown username:group_name dummy.txt
다음 과 같이 호출 $SUDO_USER
될 때만 액세스 할 수있는 변수를 사용할 수 있습니다 sudo
.
chown "$SUDO_USER":"$SUDO_USER" dummy.txt
일반 사용자로 스크립트를 실행하는 경우 chown
부분이 전혀 필요하지 않으므로 &&
스크립트가 루트로 실행될 때 if 문 또는 테스트를 사용하여 사례를 테스트하고 다음 행을 따라 무언가를 수행하는 것이 좋습니다 .
#!/bin/bash
touch dummy.txt
[ $UID -eq 0 ] && chown "$SUDO_USER":"$SUDO_USER" dummy.txt
위의 방법을 권장합니다. chmod
사용자 및 그룹에 대한 읽기-쓰기-실행 권한을 변경 하는 데 사용 하는 것과 같은 다른 것들이 있지만 권장되지는 않습니다.
sudo
아니요-무시할 수 없습니다. 귀하의 옵션은 일반 사용자로 스크립트를 실행하거나 (여기서 사용자를 위해 파일을 작성하기 때문에 왜하지 않는지 이해하지 못합니다) 내 대답에 표시된 것처럼 파일 소유권을 변경하십시오.
chown
및chmod
스크립트를 사용하여 원하는대로 소유권과 권한을 설정할 수 있습니다 .