いくつかの大学の配布資料の主張
root
Unixシステムでは、パスワードの変更、通信プロトコルで使用されるネットワークポートへのアクセス、ハードウェアとのやり取りなど、ユーザーのみがアクセスできる機能の一部がオペレーティングシステムに記録されます。
この説明は正しいですか?これは「オペレーティングシステム」で正確にどこに実装されていますか? root以外のユーザーが書き込めない場合は、どのように自分のパスワードを変更できますか/etc/passwd
?
私が知っている限り、rootユーザーに無制限の権限を持たないSELinuxなどのUNIXベースのシステムはありますか?
答え1
この説明は正しいですか?
はい、いいえ。この声明はせいぜい不完全です。具体的には:
- パスワードの変更:ユーザーは自分のパスワードを変更できますが、
root
他のユーザーのパスワードのみを変更できます。これはアクセス権によって強制されます/etc/shadow
。 setuidが書き込み権限を取得できるため、バイナリpasswd(1)
は権限をバイパスできます。/etc/shadow
passwd
root
root
/etc/shadow
- 通信プロトコルで使用されるネットワークポートにアクセスします。
root
1024以下のTCPおよびUDPポートのみをバインドでき、他のポートは誰でもバインドできます。これはカーネルによって実施されます。また、root
rawソケットのみを使用できます(特に実行するping
にはuidを設定する必要がある理由ですroot
)。ただし、rawソケットにアクセスする詳細はオペレーティングシステムによって異なり、時にはさまざまな非標準ACLメカニズムを介してアクセスが許可されることがあります。 - ハードウェアとの対話:原則として、プロセスのみが
root
ハードウェアにネイティブコマンドを送信できます。これは主にデバイスに対する権限によって行われます/dev
。ただし、ほとんどのシステムには、USBディスクのマウント、CDの書き込み、オーディオハードウェアの使用など、ユーザーがこれらの権限をバイパスするメカニズムがあります。
これは「オペレーティングシステム」で正確にどこに実装されていますか?
カーネルによって実装された権限システムがあります。ほとんどのオペレーティングシステムは、OpenBSDなどの他のさまざまなメカニズムでこのシステムを補完します。pledge
、またはLinux SELinux
。
私が知っている限り、rootユーザーに無制限の権限を持たないSELinuxなどのUNIXベースのシステムはありますか?
はい。
答え2
LinuxはUnixではないので、ここでLinuxとの比較は正しくないと思うので、元の声明に戻りましょう。
Unix の passwd コマンドマニュアルでは、root のみがこのユーティリティを使用できることを示しています。
http://man.cat-v.org/unix-1st/5/passwd
同様に、オープンポートは特権プロセスのみを特定のポートに変更することを許可します。 sys/socket.h は Unix で定義されます。 http://pubs.opengroup.org/onlinepubs/7908799/xns/syssocket.h.html
以下に示すように:
http://man7.org/linux/man-pages/man7/ip.7.html
これを行うための権限は、ルートを要求するのと同じです。
ハードウェアとのやりとりはやや広範でさえ曖昧です。ただし、root権限を必要とする/dev/インターフェース(mknodなど)を参照することもできます。
したがって、このステートメントは基本的に正確です。