나는 다음과 같은 (시스템) 사용자 mysysuser
와 일부 sudo 규칙을 생성하여 일부 유지 관리를 위해 다른 사용자의 폴더에 있을 수 있도록 했습니다.
스크립트는 다른 사용자로 실행해야 하지만 일부 매개변수도 필요합니다.
그래서 나는 다음을 만들었습니다./etc/sudoers.d/mysysuser
예:
Cmnd_Alias FIRST = /usr/bin/su -l user1 -c '/home/*/www/*/deploy.sh "$0" "$1" "$2"' * * *
Cmnd_Alias SECOND = /usr/bin/su -l user2 -c '/home/*/www/*/deploy.sh "$0" "$1" "$2"' * * *
mysysuser ALL=(ALL) NOPASSWD: FIRST,SECOND
그런 다음 다음을 실행합니다.
sudo /usr/bin/su -l user1 -c '/home/user1/www/site1/deploy.sh' "param 1" "param 2" "param 3"
작동하지 않고 비밀번호를 묻습니다.
매개변수가 없는 이 버전은 잘 작동하며 비밀번호를 묻지 않고도 실행할 수 있습니다.
Cmnd_Alias FIRST = /usr/bin/su -l user1 -c /home/*/www/*/deploy.sh * * *
하지만... 스크립트가 매개변수를 받지 못했습니다.
sudoers 파일은 와일드카드를 제외하고 매우 문자 그대로 입력해야 한다는 것을 알고 있습니다. *
왜 작동하지 않는지 알고 싶은 것은 다음과 같습니다.
“$0” “$1” “$2”
부분?
달러 기호를 피하면 사람들이 visudo
토하게 됩니다.
고쳐 쓰다:
의견에 따르면 su 명령을 사용하는 대신 sudo를 직접 사용하는 것이 좋습니다.
나는 이것을 시도했지만 지금은 작동시킬 수 없습니다. sudo는 비밀번호가 필요하지 않음에도 불구하고 비밀번호를 묻습니다.
/etc/sudoers.d/mysysuser:
Cmnd_Alias FIRST = /home/*/www/*/deploy.sh "$0" "$1" "$2" * * *
mysysuser ALL=(ALL) NOPASSWD: FIRST
mysysuser로 실행한 명령은 다음과 같습니다.
sudo -u user1 /home/user1/www/site1/deploy.sh "param 1" "param 2" "param 3"
결과:
귀하는 귀하의 로컬 시스템 관리자로부터 일반적인 강의를 들으셨을 것으로 생각됩니다. 일반적으로 다음 세 가지로 귀결됩니다.
#1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
[sudo] mysysuser의 비밀번호:
답변1
실행하려면 sudo
다음을 실행해야 합니다 sudo
.
따라서 명령은 로 시작해야 합니다 sudo
.
su
그리고 와 함께 사용할 필요도 없습니다 sudo
. sudo
사용자 및 그룹을 처리할 수 있습니다. 누가 무엇을 실행할 수 있는지 구성할 수 있습니다.
답변2
괜찮습니다. sudoers 파일에 작은따옴표가 없어도 잘 작동합니다.
Cmnd_Alias FIRST = /usr/bin/su -l user1 -c /home/*/www/*/deploy.sh "$0" "$1" "$2" * * *
다음 명령을 사용하십시오.
/usr/bin/su -l user1 -c '/home/user1/www/site1/deploy.sh' "param 1" "param 2" "param 3"