パスワードなしで別のユーザーとしてスクリプトを実行するにはどうすればよいですか?


145

user2として実行する必要があるscript.shがあります。ただし、このスクリプトは、アプリケーションのuser1の下でのみ実行できます。

次のコマンドを実行してください。

su user2 -C script.sh

ただし、パスワードなしで実行できます。

また、user1はuser2の下でしかscript.shを実行できず、他には何も実行できないため、これも非常に制限したいと考えています。

私はこれをsudoersファイルで試してみましたが、何時間も試行した後、際限なく混乱しました。

誰かがこれをどのように達成できるかについての明確な例を提供できる場合(sudoersのような一般的なものの代わりに)、それは大いに評価されます。


15
特に終値ではありません。これは、特定の方法でシステムをプログラムする方法に関する質問です。そのため、それはシェルプログラミングに関するものであり、プログラミングに関する質問のためのSOの範囲内です。多くの人がこれをあまり話題から外れているため、反対票が投じられるべきではないことは明らかです。質問と回答にはすべてかなりの数の賛成票があります。
ジョナサンレフラー2014年

回答:


121

これを呼び出しvisudoて追加します。

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

コマンド・パスは絶対パスでなければなりません!次にsudo -u user2 /home/user2/bin/test.shuser1シェルから呼び出します。できました。


3
Ubuntuのヘルプにsudoers形式のわかりやすい説明があります。sudoersのmanページは醜い:(
Mifeet

では、user1だけでなく、user2として実行するすべてのユーザーのこれをどのように拡張するのでしょうか。
jiggunjer

193

実行してみてください:

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

これは、ユーザーがそのユーザーとしてsudoへのアクセス許可を持っている場合、ユーザー名としてコマンドを実行します。


17
次のような完全なsudo権限を持つ通常のユーザーとして機能しました:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77

5
Macユーザー向けの注意事項ですが、構文は少し異なりますsu username -c "command"
NHDaly

1
あなたが起動しようとした場合screen-別のユーザーとして、これが参考になっかもしれないlinuxquestions.org/questions/linux-software-2/...
ミント

2
場合username(または問題のuser2パスワードそのものを持っている)、これはそれのためのプロンプトをスキップすることはできません。もう1つの答えは、user1とuser2の両方でパスワードは不要です。
phil294 2018年

1
`su -c "Your command right here" -s /bin/sh username`

上記のコマンドは正しいですが、Red Hatでselinuxが適用されている場合、cronは別のユーザーとしてスクリプトを実行できません。例; execl: couldn't exec /bin/sh execl: Permission denied

私はそれを許可するために、setroubleshootとsetoolsをインストールし、以下を実行する必要がありました。

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.