Linuxのどこでgpasswdコマンドを使用してグループマネージャが誰であるかを追跡できますか?

Linuxのどこでgpasswdコマンドを使用してグループマネージャが誰であるかを追跡できますか?

コマンドを使用してグループのメンバーと管理者を変更し、gpasswdユーザーをグループ管理者として追加すると、Linuxはそのユーザーがrootでスケジュールされたタスクを実行できるようにします。

前任者。

[test1@centos ~]$ gpasswd -a test6 test
Adding user test6 to group test

管理者として追加されていないユーザーとして同じ操作を実行しようとすると、許可されません。

[test2@centos ~]$ gpasswd -a test7 test
gpasswd: Permission denied.

これはどこかで追跡されるべきです。このgpasswdコマンドは SUID ビットを設定しますが、制限対象を表しません。

これはどこで追跡されますか?gpasswd誰が高い権限を与えられたのか、コマンドはどのようにわかりますか?

答え1

これはどこで追跡されますか? gpasswdコマンドは、誰が昇格された権限を与えられたかをどのように知ることができますか?

実際、それ自体は「追跡」ではありません。 gpasswdユーザーがさまざまな方法でコマンドを使用する権限を持っているというルールがあり、これらのルール/権限はコマンドが実行されるたびにテストされます。これらのテストの結果はキャッシュまたは保存されません。

通常、実行するにはgpasswdルートまたはターゲットグループの管理メンバーとして定義する必要があります。最初あなたがターゲティングするグループのメンバーです。


具体的な内容を知りたい場合は、次のgpasswd内容の出所などを確認してください。シャドウユーティリティプロジェクト

~によるとgpasswdソースGitHubミラー#ifdef SHADOWGRP)、およびsumの結果に応じて、#ifdef FIRST_MEMBER_IS_ADMINまたはフラグを使用しない呼び出しに対して関数で3つのチェックのいずれかを実行しますcheck_perms(以下の説明は私が書いたものです)。gpasswd-A-M

/* Check 1 */
if (!amroot && !is_on_list (sg->sg_adm, myname)) {
        failure ();
}

/* Check 2 */
if (!amroot) {
        if (gr->gr_mem[0] == (char *) 0) {
            failure ();
        }

        if (strcmp (gr->gr_mem[0], myname) != 0) {
            failure ();
        }
}

/* Check 3 */
if (!amroot) {
        failure ();
}

amrootrootユーザーが呼び出すとtrueになるブール値ですgpasswd。それは次のように定義されますここ:

/* The UID of the caller */
static uid_t bywho;
/* Indicate if gpasswd was called by root */
#define amroot  (0 == bywho)

ルートになると、検査 1、検査 2、検査 3 を「通過」(スキップ)します ( amrootwill be true、つまり!amrootwill be を意味falseするので if 文をスキップします)。

ルート以外のユーザーは、ターゲットグループの管理メンバーである場合は確認1に合格できます。これは、ターゲットグループ(sg-> sg_adm)の管理メンバーのリストと、呼び出すユーザーgpasswdのユーザー名(myname)を関数に渡すことによってテストされますis_on_listここ。呼び出し側のユーザーがグループ管理者リストにある場合は反転し、ユーザーが確認1に合格できるようにis_on_list返します。truefalse

ルート以外のユーザーは確認2を通過できます(ルート以外の場合)。変更したいグループの最初にリストされたメンバー。これは、ターゲットグループの最初のユーザーが呼び出されたユーザーと同じであることを確認してテストされますgpasswd

ルート以外のユーザーはスキャン3を通過できません。


注:すべてのソースリンクは、ソースリポジトリの「debian / 4.2-3」タグへのリンクを提供します。これは一貫した参照を提供するためのものです。

関連情報