私が管理しているすべてのLinuxシステムでは、rootアカウントのGIDとUIDは0です。これは保証されているのでしょうか、それともシステムがrootに別のIDを与えるのでしょうか?
あなたの質問には、実際には2つの部分があります。
Linuxでは、スーパーユーザーアカウントは常にuid/gid 0/0を持っていますか?
はい。Rich Homolka で指摘されているように、 a comment 、rootユーザーをチェックする必要があるときに明示的にuid 0をチェックするカーネル内のコードがあります。これはrootが少なくとも uid 0を持つことを意味します。
Uid 0のユーザーアカウントの名前は常に
root
ですか?
番号root
は、/ etc/passwdまたはその他の認証ストアにリストされている単なる名前です。アカウントadmin
を呼び出すこともできます。OS自体は気にしなくてもかまいませんが、アプリケーションによってはroot
という名前の特権アカウントが存在することを想定しているため、まったく好まない場合があります。 * nix root
でuid 0アカウントを呼び出すことは、非常に強力な取り決めですが、システムでは必要ありません(システム管理ユーティリティを含む、特定のユーザーランドソフトウェアでは必要な場合もあります)。
Simon Richter で指摘されているように、BSDにはtoor
という命名法で second uid 0アカウントが存在することもしばしばあります。 (これは後方に綴られた「ルート」であり、アルファベット順にソートされたリストでは字句的に の後 root
になります)。例えば、 FreeBSDはrootユーザにデフォルトのShell を残してカスタマイズされたShell設定をrootユーザに提供するためにそれを使います。システムのルートパーティション(リカバリ目的に便利).
1)管理者は常にuid == 0です。これはカーネルでコーディングされています。これを変更するには、カーネル内でコーディングが必要になります。あまり意味がありませんので、完了していません。たとえば、同じNFSを共有している他のUNIXとは矛盾します。
2)uid 0は必ずしもrootに対応しません。最も良い例はFreeBSDです。それは2つのuid == 0アカウントを持ち、違いはシェルです。 rootにはShell/bin/shがあります。これは単純なシェルで、ディスクが不良でfsck/usrが必要な場合に役立ちます。 toorはtcshを使いますが、これは歴史のようなものを持っているので、緊急ではない状況ではもっと便利です。
もう一つのもっと個人的な例。私が持っていた仕事の1つでは、NISを介してルート等価(つまりuid = 0)アカウントを持っていました。パスワード、空白!新しいsysadminはマシンのrootパスワードを思い出せないからです。私は明白な理由でこれについて叫んだ(定義上NISパスワードはそれらの空白を隠すことができない)。私はこのアカウントに満足していませんでした。
そしてそれは実際にはuid 0を与えるシステムがrootではない、それはあなたです。あなたはこれをpasswdファイルや他のネーミングディレクトリ(NIS、ldap)を使って変更しますが、コンパイルされていません。/ etc/passwdに少なくとも1つのuid 0アカウントがあるはずです。
そのため、rootは常にuid 0ですが、uid 0は必ずしもrootである必要はありません。
NonStopサーバーを使用するシステムの場合、ROOT_UIDは0ではなく65535です。
OSSユーザーとグループOSS環境では、サイト管理者が明示的に作成しない限り、一般的なUNIXのデフォルトのユーザー名とユーザーIDは提供されません。ただし、同等のOSSユーザー名とユーザーIDが存在します。たとえば、UNIXのユーザー名rootおよびユーザーID 0に通常関連付けられている特権は、ユーザーSUPER.SUPERとその別名である65535(スーパーID)のOSSユーザーID(UID)に対して存在します。
https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf ]を参照してください。
Coreutilsでは、そのroot-uid.hヘッダファイルを見つけることができます:
/* The user ID that always has appropriate privileges in the POSIX sense.
Copyright 2012-2016 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Written by Paul Eggert. */
#ifndef ROOT_UID_H_
#define ROOT_UID_H_
/* The user ID that always has appropriate privileges in the POSIX sense. */
#ifdef __TANDEM
# define ROOT_UID 65535
#else
# define ROOT_UID 0
#endif
#endif