web-dev-qa-db-ja.com

グループ内の任意のユーザーとしてユーザーにSudoを許可する

ホームディレクトリからサービスを実行しているユーザーがいるサービスを実行しています。それらはすべてグループserviceusersに属しており、サービスユーザーファイルのWebサイトから開始された自動タスクを実行するユーザーがいます。彼をtaskrunnerと呼びましょう。

taskrunner内の任意のユーザーとしてserviceusersをSudoに許可しようとしています。

今、私はsudoersファイルを介してこれを実行しようとしました:

serviceuser=ALL(serviceusers:serviceusers) NOPASSWD:ALL

(「serviceusers:serviceusers」はserviceuserユーザーとserviceuserグループを意味することを理解しています。しかし、taskrunnerユーザーがすべてのユーザーとしてSudoを実行できるようにしたくありません。serviceusersグループのユーザーのみ)

具体的には、Sudo -u serviceuser1 ...ではなくSudo -g serviceusers...を実行できるようにしたいと思います。

これを可能にするために、/etc/pam.d/Sudoを追加しようとしています。しかし、pam.d/Sudoファイルの適切な構文についての非常に優れたリソースを見つけることができません。


Pam.d/suに追加して、ユーザーがグループ内のユーザーにsuできるようにすることができるので、それはオプションかもしれませんが、単純なSudoだけで可能かどうか疑問に思いました。

私はサーバー管理にかなり慣れていないので、これが正しい方法ではない場合は、いくつかの優れたリソースを教えてください。

2
James McDonnell

ジェームズ。

このsudoers構成行を使用すると、目的の結果を達成できると思います。

taskrunner ALL = (%serviceusers) NOPASSWD: ALL

上記の行は、Sudoに、taskrunnerグループのメンバーである任意のユーザーとしてコマンドを実行することをserviceusersユーザーに許可するように指示しています。 man 5 sudoersの関連セクションは次のとおりです。

 User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
               (':' Host_List '=' Cmnd_Spec_List)*

 Cmnd_Spec_List ::= Cmnd_Spec |
                    Cmnd_Spec ',' Cmnd_Spec_List

 Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd

 Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'

 Runas_List ::= Runas_Member |
                Runas_Member ',' Runas_List

 Runas_Member ::= '!'* user name |
                  '!'* #uid |
                  '!'* %group |
                  '!'* %#gid |
                  '!'* %:nonunix_group |
                  '!'* %:#nonunix_gid |
                  '!'* +netgroup |
                  '!'* Runas_Alias

User_Specは、指定されたホストでユーザーが(およびどのユーザーとして)実行できるコマンドを決定します。デフォルトでは、コマンドはrootとして実行されますが、これはコマンドごとに変更できます。ユーザー仕様の基本構造は「whowhere =(as_whom)what」です。

Runas_Specは、コマンドを実行できるユーザーやグループを決定します。完全に指定されたRunas_Specは、2つのRunas_Lists(上記で定義)で構成されますコロン( ':')で区切られ、括弧のセットで囲まれています。最初のRunas_Listは、Sudoの-uオプションを介してコマンドを実行できるユーザーを示します。 2つ目は、Sudoの-gオプションを介して指定できるグループのリストを定義します。両方のRunas_Listsが指定されている場合、コマンドは、それぞれのRunas_Listsにリストされているユーザーとグループの任意の組み合わせで実行できます。最初のものだけが指定されている場合、コマンドはリスト内の任意のユーザーとして実行できますが、-gオプションは指定できません。最初のRunas_Listが空で、2番目が指定されている場合、コマンドは、グループがRunas_List。両方のRunas_Listsが空の場合、コマンドは呼び出し元のユーザーとしてのみ実行できます。 Runas_Specが指定されていない場合、コマンドはrootとして実行され、グループは指定されません。

したがって、提案された構成行の意味は次のとおりです。

  • User_Spec:taskrunner ALL =(%serviceusers)NOPASSWD:ALL
  • User_List:taskrunner
  • Host_List:[〜#〜] all [〜#〜]
  • Cmnd_Spec_List:(%serviceusers)NOPASSWD:ALL
  • Cmnd_Spec:(%serviceusers)NOPASSWD:ALL
  • Runas_Spec:(%serviceusers)
  • Runas_List:%serviceusers
  • Runas_Member:%serviceusers
  • Tag_Spec:NOPASSWD:
  • Cmnd:[〜#〜] all [〜#〜]