web-dev-qa-db-ja.com

なぜrootがwheelとoperatorにあるのですか? rootがグループに属していると、違いが出ますか?

私のFreeBSDマシンで、ルートがホイールとオペレーターにあることに気づきました。 UID 0がグループに含まれていると、何にでも影響があるという状況を考えようとしています。さらに言えば、rootは/ etc/passwdにプライマリログイングループを必要としますか?または、ユーザーが空白のプライマリグループフィールドを持っている場合、login(3)は窒息して死ぬのですか?

(明確にするために:ファイルにはグループ所有者が必要なので、「ルート」グループの存在の目的を理解しています。ユーザーroot/toor /何でもそのグループメンバーシップを持つことがどのように重要であるのか理解していません。)

これは数十年前からの粗末なのですか、それとも本当の理由がありますか?

18
Bandrami

つまり、いいえ。 wheelおよびoperatorグループにrootを設定しても、何も変わりません。

しかし、あなたはまた、他の2つのことにも疑問を投げかけています。

  • rootグループIDは(デフォルトで)0に設定されます。これは、取得できる空の値に最も近いものです。

    $ head -4 /etc/passwd
    # $FreeBSD: releng/9.2/etc/master.passwd 243947 2012-12-06 11:52:31Z rwatson $
    #
    root:*:0:0:Charlie &:/root:/bin/csh
    toor:*:0:0:Bourne-again Superuser:/root:
    

    前述のように、すべてのユーザーはグループを持っている必要があるため、rootグループID(またはユーザーgid)をvoidまたは空白の値に設定することはできません。ユーザーgidを空白に設定しようとすると、pwd_mkdbによって警告されます。

    pwd_mkdb: no gid for user root
    pwd_mkdb: at line #3
    pwd_mkdb: /etc/pw.Rlb2U3: Inappropriate file type or format
    re-edit the password file?
    

    したがって、rootが定義されているという事実は、単なるダム番号ではなく、適切に名前が付けられているということです。ルートgidは、意味のない任意の番号(/etc/group内にないgid)に変更できます。あなたのrootユーザーは、suまたはrootができることなら何でもログインできます。あなたはただそのようなものになるでしょう:

    $ id
    uid=0(root) gid=10000 groups=10000,5(operator)
    
  • 一部のユーザーがwheelグループに属している理由について、FreeBSDのように、OpenBSDまたはNetBSDwheelrootを実行するには、ユーザーがsuの一部である必要があります。

    FreeBSDのドキュメントから( 9.4章 ):

    suroot(またはスーパーユーザー権限を持つその他のアカウント)にするには、wheelグループに属している必要があります。この機能がなかった場合、rootのパスワードも知っているシステム上のアカウントを持つユーザーは、システムへのスーパーユーザーレベルのアクセス権を取得できます。この機能では、これは厳密には当てはまりません。 su(1)を使用すると、wheelにない場合でもパスワードを入力できなくなります。

    しかし、あなたが正しい、rootユーザーをwheelから削除しても、状況は変わりません。これは、toorユーザーがwheelの一部でもなく、rootoperatorグループ。

  • ただし、演​​算子グループは純粋に形式的なものであり、それ自体に特別な意味はありません。

Richard Stallmanwheelグループについて考えていることもここにあります(- gnu su manual から):

GNU "su"が「ホイール」グループをサポートしない理由============================ ===================

(このセクションはRichard Stallmanによるものです。)

時々、数人のユーザーが残りのすべてに対して総力を保持しようとします。たとえば、1984年に、MIT AIラボの一部のユーザーは、Twenexシステムのオペレーターパスワードを変更し、他の人にそれを秘密にしておくことで、権力を掌握することにしました。(私は阻止することができましたこのクーデターはカーネルにパッチを当てることでユーザーに力を与えますが、Unixでそれを行う方法はわかりません。)

しかし、時折、支配者は誰かに言います。通常の "su"メカニズムでは、誰かが通常のユーザーに共感するrootパスワードを知ったら、彼または彼女は残りを知ることができます。 「ホイールグループ」機能はこれを不可能にし、したがって支配者の力を強固にします。

私は支配者の側ではなく、大衆の側にいます。ボスやシステム管理者をサポートすることに慣れている場合は、最初はこの考え方がおかしいかもしれません。

5
Ouki

login(3)などは、プライマリグループを想定しています。 utmp/wtmpファイルに有効なフィールドを設定できるようにするために必要です。そして、それらがしなかったとしても(ファイル形式を変更)、login(1)またはsshd(8)または他のプログラムがユーザーセッションをセットアップしようとすると、より根本的な問題が発生します-utmp/wtmpに関係なく、両方に入力する必要がありますUIDおよびGIDカーネルプロセスプロパティ(ログインしたユーザーが作成したファイルには、UIDとGIDが入力されている必要があります)。

All-powerful-rootがプライマリグループより多くを必要とする問題については、(UID 0でスキップされるため)アクセス許可チェックは行われませんが、他の用途では行われます。

「ホイール」グループは特に、たとえば pam_wheel のようないくつかの追加の認証チェックに使用されます。

「operator」などの他のグループは、セキュリティ機能に使用される可能性があります(たとえば、rootで実行されたときの一部のプロセスは、権限のないユーザー(「nobody」など)に setuid (2)になる可能性がありますが、グループメンバーシップは保持されます。 ( "operator"のような)これにより、そのようなプロセスがそのグループが所有するファイルにアクセスし続けることができると同時に、フルUID 0アクセスで実行することのセキュリティ問題が大幅に軽減されます。

システムにこの機能を使用するプログラムがあるかどうか(またはデフォルトのFreeBSD CURRENTかどうか)はわかりません

1
Matija Nalis

それは違いを生む可能性があります-プログラムがグループメンバーシップをチェックするとすぐに、結果に応じて動作が異なります。もちろん、rootユーザーが実行できる権限forceに違いはありません。

0
rackandboneman

だれもグループwheelのメンバーでない場合、wheelは単に無視され、すべてのユーザーがsu ...を実行してパスワードを推測できるというわけではありませんか。少なくとも1つのユーザーIDをグループホイールのメンバー(つまり、ユーザーIDルート)にすることで、ホイールコントロールがチェックされ、グループホイールの他のメンバーだけがsuを実行できるようになります。

0
Rufwoof