私が管理しているすべてのLinuxシステムでは、rootアカウントのGIDとUIDが0になっていますが、これは保証されているのでしょうか、それともシステムがrootに別のIDを与える可能性があるのでしょうか?
60 Tanaki 2013-08-01
あなたの質問には実は2つの部分があります
Linux ではスーパーユーザアカウントは常に uid/gid 0/0 になっていますか?
そうですね。Rich Homolka が a comment で指摘しているように、ルートユーザをチェックする必要があるときに uid 0 を明示的にチェックするコードがカーネル内にあります
uid 0 のユーザーアカウント名は常に
root
ですか?
いいえ。 root
は単なる名前で、/etc/passwd やその他の認証ストアに記載されています。アカウントを admin
と呼ぶこともできますし、OS 自体は気にしませんが、一部のアプリケーションは root
という名前の特権アカウントが存在することを期待しているので、これをあまり好まないかもしれません。nix root
で uid 0 のアカウントを呼び出すことは非常に強い慣習ですが、システムでは要求されていません (システム管理ユーティリティを含む特定のユーザランドのソフトウェアでは要求されるかもしれませんが)
Simon Richter が指摘しているように、BSD 上にはしばしば 2 番目の uid 0 アカウントが存在し、慣習的に toor
(これは「ルート」を逆順に綴ったもので、アルファベット順のリストでは root
の後に字句的に来る) という名前が付けられています。例えば、FreeBSD では、これを使って root ユーザにカスタマイズされたシェル設定を提供し、root ユーザにはシステムの root パーティション上に存在することが保証されたデフォルトのシェルを残しています (リカバリ目的に便利です)
92 user 2013-08-01
1) 管理者は常に uid == 0 です。これを変更するにはカーネル内のコーディングが必要です。これにはあまり意味がないので、これは行われていません。例えば、例えば、同じ NFS を共有している他の Unix では整合性が取れないでしょう
2) uid 0 は必ずしも root にマップされるとは限りません。最良の例は FreeBSD です。root にはシェル /bin/sh というシンプルなシェルがあり、ディスクが故障して fsck /usr が必要なときに便利です
個人的な例ですが、ある仕事では、NIS上でroot equiv (つまり uid=0)のアカウントを持っていました。パスワードは空欄でした。新しいシステム管理者がマシンのルートパスワードを覚えていなかったからです。私は明らかな理由(NISのパスワードは定義上、空白を隠すことができません)のためにこのことを叫びました。私はこのアカウントについて満足していませんでした
そして、それは本当に uid 0 を与えるシステムではありません root、それはあなたです。あなたはpasswdファイル、または他の命名ディレクトリ(NIS、ldap)を使用して、この私を変更しますが、それはコンパイルされていません。しかし、/etc/passwd には少なくとも一つの uid 0 アカウントがあるはずです
つまり、rootは常にuid 0ですが、uid 0は必ずしもrootとは限りません
16 Rich Homolka 2013-08-01
さて、nonStopサーバを使用するシステムでは、ROOT_UIDは0ではなく65535になっています
OSS のユーザーとグループ OSS 環境では、サイト管理者が明示的に作成した場合を除き、一般的な UNIX デフォルトのユーザー名とユーザー ID は提供されません。しかし、同等の OSS ユーザー名とユーザー ID は存在します。例えば、ユーザーSUPER.SUPERとそのエイリアスである65535(スーパーID)のOSSユーザーID(UID)には、UNIXユーザー名rootとユーザーID0に通常関連付けられている権限が存在します
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
2 Nuxwin 2018-01-30
/* POSIX の意味で常に適切な権限を持つユーザ ID
Copyright 2012-2016 Free Software Foundation, Inc
このプログラムはフリーソフトウェアです。あなたは、フリーソフトウェアファウンデーションによって公開されているGNU一般公衆利用許諾書のバージョン3、またはそれ以降のバージョンのいずれかの条項に基づいて、これを再配布したり、変更したりすることができます(あなたの選択で)
このプログラムは有用であることを期待して配布されていますが、商品性や特定の目的への適合性についての暗黙の保証もなく、何の保証もありません。詳細はGNU一般公衆利用許諾書を参照してください
このプログラムと一緒にGNU一般公衆利用許諾契約書のコピーを受け取っているはずです。そうでない場合は、http://www.gnu.org/licenses/ を参照してください
書いたのはポール・エガート。*/
#ifndef ROOT_UID_H_ #define ROOT_UID_H_
/* POSIX的には常に適切な権限を持つユーザID。*/ #ifdef __TANDEM
define ROOT_UID 65535
#else
define ROOT_UID 0
#endif
#endif
-1 Fhirs KANE 2020-06-26