Ubuntuでroot
というユーザーアカウントを作成した場合、自動的にルート権限が付与されますか?システムを破壊しますか?マトリックスにグリッチが発生しますか?どうなるの?
ユーザー名は一意である必要があるため、 Owen Hinesの回答 で述べたように、このユーザーを作成することはできません。ただし、ここで重要なのは、ユーザー名root
ではなく、スーパーユーザー(すべての許可)がUIDによって付与されることです。
UID 0のユーザーはスーパーユーザーです。
したがって、UID 0のユーザーが別の名前を持っていて、root
というユーザーを作成した場合、それらのユーザーには特別なステータスはありません。
root タグwikiを紹介します!
既にroot
ユーザーが存在するため、許可されません。
しかし、 Florian Diesch がコメントで述べたように:
一部のツールは文句を言いますが、
/etc/passwd
とetc/shadow
をいつでも手動で編集して、root
という名前の2番目のユーザーを作成できます。
最初に、他の人が述べているように、UID 0のユーザーを別のユーザーに変更します。その後、ルートの名前と1000より大きいUIDを持つ通常のユーザーを作成できます。これは「正常に」機能します。すべての権限とコアシステム機能は、ユーザー名ではなくUIDを使用します。実際、これはLinuxシステムを強化するための良い第一歩です。 (rootを無効にする方がずっと良いですが、Sudoの前はこれを使用していました)。
今、何が起こるかについて。
ほとんどの場合、何もありません。許可または認証に関係するすべてのシステムコールは、UID(私が知っている)を使用します。そして、それはしばらくの間そうでした。システムは通常どおり稼働し続けます。システムツールは新しいユーザー名を反映しますが、正常に機能し続けます。言い換えれば、慣例では「ルート」であり、石ではありません。
そうは言っても、不完全に書かれたツールやプログラムがいくつかあると確信しています。 $ USER環境変数をチェックするプログラムは、正しく動作しない場合があります。通常、これらはスクリプトと小さなプロジェクトですが、6年前に頭痛の種になるfdiskで、その1つの悪いコミットを追跡するのに少し時間を費やすことができました。
これは私がいつもやっていたことです。これは簡単なステップであり、「予測不可能なユーザー名」のルールに該当します。しかし、今日と同じ目標を達成するためのはるかに優れた方法があります。
はい、理論的には、同じユーザー名または同じ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がありますか? )カーネルコードは魔法です。実際、ユーザースペースコードitself-rootができることは何もできません。ルートとして実行されても!ルートパワーはカーネル内にあります。例えば"cat/etc/shadow"(通常はrootのみがこれを行うことができます)を行うと、/ bin/catプログラムはまだユーザー空間コードであるlibc open()関数を呼び出し、このopen()関数はカーネルへのシステムコールを実行します。次に、カーネル自体が何をするかを決定します。たとえば、有効なユーザーがid == 0の場合、カーネルは何らかの操作を許可する場合があります。
理論的には、カーネル内の一部のコードを変更し、「www-data」ユーザーを異なる方法で処理する場合、一部の操作は「www-data」ユーザーのみに許可される場合があります(rootにも許可されない)。
他の人が説明したように、UID = 0はユーザーに「root」であるユーザー名ではなく、「superpowers」を与えます。したがって、どうにかして「ルート」と呼ばれる別のユーザーを作成した場合(元のユーザーの名前を変更/削除した後)-ユーザーのスーパーステータスは、与えたUIDに依存します。
これはまた別の興味深いアイデアにつながります:複数のユーザーに同じUIDを持たせることは完全に可能です(これにより、ファイルシステムのアクセス許可の点では本質的に同じユーザーになりますが、異なるシェル、ホームディレクトリなどを持つことができます)。実際、一部のUNIXライクシステムには、 toor (root roots)と呼ばれる別のスーパーユーザーアカウントがあり、異なる設定の2つのスーパーユーザーアカウントを持つことができます。
ほとんどの「ユーザーフレンドリー」ツールはこれをチェックし、すでに使用されているユーザー名でアカウントを作成することはできません。
これをバイパスし、2つ目のルートアカウントを/ etc/passwdと/ etc/shadowに手動で追加してから、どちらを使用するかは、元のアカウントの前に置くか後に置くかによって異なります。 UNIXシステム上のすべてのユーザーアカウントと同様に、名前に関係なく、UIDがゼロの場合にのみスーパーユーザーアクセスも許可されます。