私の考えではリダイレクトroot
使用中(切り替え)1つの実行を別のユーザーに実行しますsudo
。
例:としてsudo startup.sh
実行されますが、必要なのは別のユーザー(たとえば)で実行されることです。startup.sh
root
tomcat
この特定の実行に対してのみ、それらが使用する方法で実行したいと思います。つまり、sudo startup.sh
後ろから(内部的に)sudo su - tomcat startup.sh
ユーザーに使用しないと言うことができないので、に変更されることを望んでいますsudo -su or sudo -u
。
この目標をどのように達成できますか?
答え1
要求された操作は簡単に実行できません(たとえば、sudo startup.sh
指定された root 以外のユーザーとして実行)。ただし、次のいずれかまたは両方を実行できます。
ユーザーに
sudo -u tomcat /path/to/startup.sh
代わりに使用するように指示しsudo /path/to/startup.sh
、とにかく後者を許可しません。これがターゲットユーザーアカウントになるように
sudoers
(記憶)この行を追加します。特定のユーザーだけがターゲットユーザーとしてスクリプトを実行できる場合は、最初のユーザーリストをユーザーリストに変更します。visudo
tomcat
ALL
ALL ALL=(tomcat) /path/to/startup.sh
スクリプトを実行し
sudo
、sudo -u root
スクリプトを無効にします。 #1(上記)が必要です。ここがtomcat
一致していることを確認してください。tomcat
sudoers
#!/bin/bash # targetUser=tomcat if [[ $UID -ne "$(id -u "$targetUser")" ]] then exec sudo -u "$targetUser" "$0" "$@" exit 1 fi # ...script continues but as the $targetUser...
これにより、人々はその部分を心配することなく
/path/to/startup.sh
(startup.sh
または存在していても)実行できます。$PATH
sudo
答え2
sudo
スイッチで使用できます-u
。
例:
sudo -u tomcat whoami