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フラグを使用しないでください。ログインシェルが必要ですか?