sudo는 매개변수를 사용하여 다른 사용자로 실행합니다.

sudo는 매개변수를 사용하여 다른 사용자로 실행합니다.

나는 다음과 같은 (시스템) 사용자 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"

관련 정보