パスワードのない他のユーザーでコマンドを実行する - 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フラグを使用しないでください。ログインシェルが必要ですか?

関連情報