비밀번호가 없는 다른 사용자로 명령 실행 - sudo가 실패합니까?

비밀번호가 없는 다른 사용자로 명령 실행 - sudo가 실패합니까?

userA나는 해당 사용자 로 내 서버에 로그인했고 bash쉘이 있고 모든 것이 잘 작동합니다.

그런 다음 프로그램의 목적을 위해 다음을 수행해야 합니다 sudo adduser --system --home=/home/userB --group userB. /etc/passwd및 의 내용으로 판단하면 사용자에게는 비밀번호가 없습니다 /etc/shadow.

$ grep userB /etc/passwd
userB:x:Z08:WW9::/home/userB:/bin/false
$ sudo grep userB /etc/shadow
userB:*:16XXX:0:YYYYY:7:::

/home/userB/.profile또한 홈 디렉토리에는 파일이나 파일이 없습니다 ./home/userB/.bash*userB

이제 로그인했을 때 내가 본 내용을 구체적으로 확인하면서 userA명령을 실행하고 싶습니다 . 그래서 via 편집을 시도 하고 다음 중 한 줄을 추가합니다 .userB$PATHuserBEDITOR=/usr/bin/nano sudo visudouserA

...
# User privilege specification
root    ALL=(ALL:ALL) ALL
#userA      ALL=(userB) NOPASSWD: /bin/bash
userA       ALL = (userB) NOPASSWD: ALL
...

...그런 다음 파일을 저장하고 원격 셸에서 로그아웃한 다음 다시 시작합니다 userA.

$ sudo -iu userB; echo $?
1
$ sudo -S -u userB -i /bin/bash -l -c 'echo $HOME'; echo $?
1
$ sudo -i -u userB echo \$HOME; echo $?
1

...분명히 아무것도 작동하지 않으며 오류도 없습니다. 그런 다음 다음 명령 중 하나를 실행하려고 생각했는데 strace실제로 오류가 발생했습니다.

$ strace sudo -iu userB
...
write(2, "sudo: effective uid is not 0, is"..., 140sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?
) = 140
exit_group(1)                           = ?
+++ exited with 1 +++

그러나 nosuid이 루트 파티션에서는 문제가 되지 않는 것 같습니다.

$ mount | grep '/ '
/dev/sdaX on / type ext4 (rw,errors=remount-ro)

그래서 이제 나는 무엇을 해야 할지 잘 모르겠습니다. 이 경우 userA명령(예: 인쇄 $HOME환경 변수) 을 실행할 수 있습니까 userB? 그렇다면 어떻게 작동하게 할 수 있습니까?

답변1

sudo의 옵션은 -i사용자가 선택한 쉘을 시작하는 로그인 쉘을 생성하려고 시도합니다. /bin/false다음과 같이 설정했습니다 /etc/passwd.

$ grep userB /etc/passwd
userB:x:Z08:WW9::/home/userB:/bin/false

다음을 실행해 보세요.

sudo -u userB ls

이것이 작동하면 모든 것이 구성에 따라 작동하는 것입니다. -s사용자의 로그인 쉘을 호출하지 않는 대화형 쉘을 원하는 경우 이를 사용하십시오 .

완전한 로그인 쉘을 원한다면 다음을 사용하여 사용자 쉘을 변경해야 합니다.

sudo chsh -s /bin/bash userB

답변2

sudo맨페이지 에서 :

-i, --login
             Run the shell specified by the target user's password data-
             base entry as a login shell. 

userB에는 /bin/false쉘이 있으므로 이것이 실행되는 명령입니다.

% /bin/false ; echo $? 
1

/bin/bash따라서 이 문제를 해결하려면 userB의 쉘을 (또는 /bin/sh원하는 대로) 변경해야 합니다.또는-isudo 플래그를 사용하지 마십시오 . 로그인 쉘이 필요합니까?

관련 정보