回答:
ユーザー名は一意である必要があるため、Owen Hinesの回答で述べたように、このユーザーを作成することはできません。ただし、ここで重要な点は、スーパーユーザーの権限(すべての可能なアクセス許可)がユーザー名root
ではなく、UIDによって付与されることです。
UID 0のユーザーはスーパーユーザーです。
したがって、UID 0のユーザーが別の名前を持っていて、という名前のユーザーを作成した場合root
、それらのユーザーには特別なステータスはありません。
ルートタグwiki を紹介します!
root
。素晴らしいアイデアではありませんが、可能です。そのため、たとえば、god
uid 0
で呼び出されるスーパーユーザーアカウントを作成root
し、uid 1000
または他の番号で呼び出される通常のユーザーを作成できます。
最初に、他の人が述べているように、UID 0のユーザーを別のユーザーに変更します。次に、ルートの名前と1000を超えるUIDを持つ通常のユーザーを作成できます。これは「正常に」機能します。すべての権限とコアシステム機能は、ユーザー名ではなくUIDを使用します。実際、これはLinuxシステムを強化するための良い第一歩です。(rootを無効にする方がずっと良いですが、sudoの前はこれを使用していました)。
今、何が起こるかについて。
ほとんどの場合、何もありません。許可または認証に関係するすべてのシステムコールは、UID(私が知っている)を使用します。そして、それはしばらくの間そうでした。システムは通常どおり稼働し続けます。システムツールは新しいユーザー名を反映しますが、正常に機能し続けます。言い換えれば、慣例では「ルート」であり、石ではありません。
そうは言っても、不完全に書かれたツールやプログラムがいくつかあると確信しています。$ USER環境変数をチェックするプログラムは、正しく動作しない場合があります。通常、これらはスクリプトと小さなプロジェクトですが、6年前に頭痛の種になっているfdiskで、その1つの悪いコミットを追跡するのに時間をかけることができました。
これは私がいつもやっていたことです。これは簡単なステップであり、「予測不可能なユーザー名」のルールに該当します。しかし、今日と同じ目標を達成するためのはるかに優れた方法があります。
他の人が説明したように、UID = 0はユーザーに「root」というユーザー名ではなく「superpowers」を与えます。したがって、何らかの方法で「ルート」と呼ばれる別のユーザーを作成できた場合(元のユーザーの名前を変更/削除した後)-ユーザーのスーパーステータスは、付与したUIDに依存します。
これはまた別の興味深いアイデアにつながります:複数のユーザーに同じUIDを持たせることは完全に可能です(これにより、ファイルシステムのアクセス許可の観点からは本質的に同じユーザーになりますが、シェルとホームディレクトリなどは異なることができます)。実際、一部のUNIXライクシステムには、toor(root逆方向)と呼ばれる別のスーパーユーザーアカウントがあり、異なる設定の2つのスーパーユーザーアカウントを持つことができます。
はい、理論的には、同じユーザー名または同じIDを持つ2人のユーザーが存在してはなりません。また、標準ユーティリティは万全であり、そのようなユーザーを作成することはありません。ただし、/ etc / passwdはいつでも手動で編集できます。
たとえば、私はやった:
$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'.
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)
ご覧のとおり、私たちは今、ルートです!はい、それは実際のルート(uid = 0ではない)ではありませんが、同じ4文字です。印象的で役に立たない。
また、他の変更を行うこともできます。ユーザー名はそのまま(yournameまたはroot2)のままにしますが、uidは変更します。
$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash
(参照、UIDおよびGIDフィールドはゼロです)これで、通常の(非ルート)ユーザー、ほとんど疑わないユーザー名(またはより良い効果を得るためにユーザー名 'johndoe'を作成)がありますが、実際、このユーザーには超能力があります!
$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda
Command (m for help):
ご覧のとおり、一般ユーザーは/ dev / sdaでfdiskを使用できませんが、root2は何でもできます!
この簡単なトリックは、バックドアを提供するためにシステムがハッキングされた後に使用されることがあります。実際のルートがキー/パスワードを変更しても、ハッカーはuid = 0を持つ他のユーザーを介してシステムを完全に制御できます。
実際、ユーザー名「root」もuid = 0もそれ自体は魔法ではありません。これは単なる慣習です。そして、それは常に真実でさえありません。(この質問を参照してください: ルートアカウントには常にUID / GID 0がありますか?)カーネルコードは魔法です。実際、ユーザー空間のコード自体は-root ができることは何もできません。ルートとして実行されても!ルートパワーはカーネル内にあります。たとえば、 "cat / etc / shadow"(通常はrootのみがこれを行うことができます)を行う場合、/ bin / catプログラムは、まだユーザー空間コードであるlibc open()関数を呼び出し、このopen()関数はカーネルへのシステム呼び出しを実行します。次に、カーネル自体が何をするかを決定します。たとえば、有効なユーザーがid == 0の場合、カーネルは何らかの操作を許可する場合があります。
理論的には、カーネル内の一部のコードを変更し、「www-data」ユーザーを異なる方法で処理する場合、一部の操作は「www-data」ユーザーのみに許可される場合があります(rootにも許可されない)。