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
$PATH
userB
EDITOR=/usr/bin/nano sudo visudo
userA
...
# 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
원하는 대로) 변경해야 합니다.또는-i
sudo 플래그를 사용하지 마십시오 . 로그인 쉘이 필요합니까?