sudoを使用すると、rootではなく他のユーザーに切り替えます

sudoを使用すると、rootではなく他のユーザーに切り替えます

私の考えではリダイレクトroot使用中(切り替え)1つの実行を別のユーザーに実行しますsudo

例:としてsudo startup.sh実行されますが、必要なのは別のユーザー(たとえば)で実行されることです。startup.shroottomcat

この特定の実行に対してのみ、それらが使用する方法で実行したいと思います。つまり、sudo startup.sh後ろから(内部的に)sudo su - tomcat startup.shユーザーに使用しないと言うことができないので、に変更されることを望んでいますsudo -su or sudo -u

この目標をどのように達成できますか?

答え1

要求された操作は簡単に実行できません(たとえば、sudo startup.sh指定された root 以外のユーザーとして実行)。ただし、次のいずれかまたは両方を実行できます。

  1. ユーザーにsudo -u tomcat /path/to/startup.sh代わりに使用するように指示しsudo /path/to/startup.sh、とにかく後者を許可しません。

    これがターゲットユーザーアカウントになるようにsudoers(記憶)この行を追加します。特定のユーザーだけがターゲットユーザーとしてスクリプトを実行できる場合は、最初のユーザーリストをユーザーリストに変更します。visudotomcatALL

     ALL    ALL=(tomcat) /path/to/startup.sh
    
  2. スクリプトを実行しsudosudo -u rootスクリプトを無効にします。 #1(上記)が必要です。ここがtomcat一致していることを確認してください。tomcatsudoers

     #!/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.shstartup.shまたは存在していても)実行できます。$PATHsudo

答え2

sudoスイッチで使用できます-u

例:

sudo -u tomcat whoami

関連情報