비밀번호가없는 다른 사용자로 쉘 스크립트를 실행하십시오.


245

기본 우분투 셸에서 암호가없는 다른 사용자로 스크립트를 실행하고 싶습니다.

나는 완전한 sudo 권한을 가지고 있으므로 이것을 시도했다.

sudo su -c "Your command right here" -s /bin/sh otheruser

그런 다음 암호를 입력해야하지만 해당 스크립트가 해당 사용자에서 실제로 실행되고 있는지 확실하지 않습니다.

스크립트가 해당 사용자에서 실제로 실행되고 있는지 어떻게 확인할 수 있습니까?

답변:


354

당신은에 그렇게 할 수 없다 su거나 sudo, 모두가 필요합니다.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

관련 부분 man sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

su루트 인 경우 비밀번호를 제공하지 않아도 사용자를 전환 할 수 있습니다. 칼렙의 답변보기

비밀번호없이 /etc/pam.d/su허용하도록 파일을 수정할 수 있습니다 su. 이 답변을 참조하십시오 .

당신이 다음에 인증 파일을 수정 한 경우, 그룹의 일부 사용자했다 그 somegroupsuotheruser암호없이.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

그런 다음 터미널에서 테스트

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

4
당신도 그렇게하는 방법을 추가 할 수 있습니까 su?
rubo77

2
이것은 나에게 암호를 요구한다 :-(
IanVaughan

1
@IanVaughan, sudo의 기본 구성에서는 루트로 실행하지 않는 한 암호를 묻는 메시지가 나타납니다. "암호없이 사용자 A가 cmd C를 사용자 B로 실행할 수 있도록"sudo를 구성 할 수 있습니다. help.ubuntu.com/community/Sudoers
geirha

1
이것을 루트로 실행할 때 암호를 묻는 메시지가 나타납니다. 어떤 제안?
Nate

1
@NamGVU는 순서가 중요하다는 것을 명심하십시오. sudoers에 사용자 나 구성원 인 그룹에 대한 다른 권한을 설정하는 규칙이 더 아래에 있으면 NOPASSWD 규칙보다 우선합니다.
geirha

100

sudo 대신 su를 사용하려면 다음과 같이 사용할 수 있다고 생각합니다.

su - <username> -c "<commands>"
  • - 지정된 사용자의 로그인을 시뮬레이션합니다
  • -c 명령을 실행하고 싶다고 알려줍니다

추신. 불행히도이 방법으로 rvm을 사용하여 루비를 설치할 수는 없지만 관련이 없습니다.


5
sudo처음 에 추가 해야했으며 그렇지 않으면 비밀번호를 묻습니다.
IanVaughan

2
이 없으면 분명히 작동하지 않습니다 sudo. sudo를 함께 예를 들어, 작동 : sudo su - www-data -c "touch /tmp/test"성공적으로 www가 데이터로 파일 생성
rubo77을

"su"를 사용하려면 루트 암호가 필요합니다. "sudo"의 요점은이를 피하는 것입니다. 위와 같이 "su"를 사용하는 루트 암호가 있으면 제대로 작동합니다.
Samuel Åslund 7

6

위의 답변은 나에게 실제로 유용하지만 실제 질문에 대답하는 것은 ...

스크립트가 해당 사용자에서 실제로 실행되고 있는지 확인하려면 어떻게해야합니까?-

사용하다:

ps -ef | grep <command-name>

출력에는 스크립트와 스크립트를 실행하는 실제 사용자가 포함되어야합니다. BSD와 같은 시스템 사용자, 예를 들어 MAC은 다음과 같은 정보를 찾을 수 있습니다.

ps aux | grep <command-name>

Linux 사용자는 ps aux를 사용할 수 있습니다.
Dean Howell

@DeanHowell; 그러나 MAC 사용자는 "ps -ef"를 사용할 수 없으며 "ps aux"는 BSD 옵션이며 "ps -ef"는 표준화 된 Unix / POSIX 옵션 인 반면 호환성 기능으로 만 사용할 수 있습니다.
Samuel Åslund

2

나는 같은 문제가 있었다. 명령을 입력하면 screen -dmS testscreensudo가 아닌 사용자 계정에 분리 된 화면이 생성되고 로그인하여이 화면이 있는지 확인할 수 있습니다 screen -ls.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.