필자는 파일 소유권 등을 엉망으로 만들 수 있기 때문에 대부분의 명령을 sudo 전에 일반 사용자로 실행 해야하는 반면 명령을 루트로 실행 해야하는 길고 오래 실행되는 bash 스크립트가 있습니다.
나는 몇 가지 방법을 생각해 냈지만 각각의 방법에는 문제가 있습니다
방법 1 : 파일 내에서 sudo 사용
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
이것은 코드 작성 방식에서 좋아 보일 것입니다. sudo
실제로 루트로 실행해야하는 몇 개의 명령문 앞에 작성되지만 각 sudo
호출 사이의 시간 이 너무 길면 sudo
다시 암호를 요청합니다. 또한 sudo
잘못된 암호 등으로 인해 첫 번째 실행에 실패한 경우 나머지 스크립트는 계속 실행됩니다.
방법 2 : sudo를 사용하여 파일을 호출 한 다음 필요할 때 원래 사용자로 다시 변경
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
su username -c
거의 모든 라인 앞에 추가해야하기 때문에 이것도 짜증납니다 . 나중에 원래 사용자 이름을 찾는 sudo
것도 가능하지만 번거 롭습니다.
더 좋은 방법이 있습니까?
편집 : 나는 내가 말하고있는 것을 보여주기 위해 작고 무의미한 스크립트 만 게시했습니다. 실제 스크립트에는 sudo (서비스 시작 및 중지)가 필요한 줄이 있습니다. sudo가 있는지 여부와 상관없이 sudo가 필요하지 않은 줄이 있습니다.
man sudo
?에 설명 된 validate 옵션을 고려 했습니까 ? -v, --validate
'필요한 경우 사용자를 인증하여 사용자의 캐시 된 자격 증명을 업데이트하십시오. sudoers 플러그인의 경우 기본적으로 sudo 제한 시간이 15 분 더 연장되지만 명령은 실행되지 않습니다. 모든 보안 정책이 캐시 된 자격 증명을 지원하지는 않습니다. ' (자주 실행하는 경우 sudo 인증 시간이 초과되지 않아야합니다.)
sudo
상승 된 권한이 필요한 경우 스크립트를 실행하면됩니다 . 그러나su username -c
를 실행하도록 전환 할 필요는 없습니다echo
. 다시 말해 이것은 [XY]처럼 들립니다. 당신이 할 수 편집 및 스크립트가 실제로 일을 할 것입니다 무엇을 설명하고 왜 그렇게 자주 사용자를 전환 할 필요가 기분이?