web-dev-qa-db-ja.com

idコマンドとwhoamiコマンドは異なるユーザーを表示します

最近、おかしなことに気づきましたので、そのような振る舞いについて説明をお願いします。

# Ok, I logged in as root

# Am I root? Sure.
╭─root@s1 ~
╰─# whoami && id
root
uid=0(root) gid=0(root) groups=0(root)


# Now i want to log in as user1
╭─root@s1 ~
╰─# su - user1


# What? nginx instead of user1?
╭─nginx@s1 ~
╰─$ whoami && id
nginx
uid=498(nginx) gid=500(user1) groups=500(user1)


# So, what is my home dir?
╭─nginx@s1 ~
╰─$ echo $HOME
/home/user1

したがって、問題は、whoamiコマンドとidコマンドで異なるユーザーが表示されるのはなぜですか?

私はこのサーバーの管理者ではなく、彼がサーバーで何をしたのかわかりませんが、この質問は私にとって興味深いものです。

1
Sergey Chizhik

安全ですか?

これはOSを壊すことはありません、あなたはnginx(そしてあなたのnginx)をスパイすることができます。これは、OSにとって危険というよりも、人間にとって(したがってあなたの質問)障害です。

UNIX/Linuxカーネルの場合、プロセスとファイルはユーザーIDによって管理されます(簡単にするためにグループを削除します)。

psまたはls -lを使用する場合、これらのコマンド(psおよびls)は/etc/passwdを読み取り、IDをユーザー名と照合します。 IDが複数回言及されている場合のルールは、最初の発生で停止することです。

2人のユーザーが同じIDを持つにはどうすればよいですか?

useraddのデフォルトオプションは、これらの競合する問題を防ぎますが、

  1. useraddに既存のIDを使用させることができます(-o--non-uniqueオプション)
  2. /etc/passwdを手動で編集するか、スクリプトに多数のユーザーを含めることができます

あなたの場合、管理者はこれを意図的に行わなかった可能性があります。彼らは単にシェルを持ち、管理するホストがたくさんあり、競合する問題をわざわざチェックしませんでした。

nginxは、ホストの作成時にインストールされる可能性があります(インストールプロセスにより、ユーザーnginxが作成されます)。

nginx:x:498:498::/var/www:/bin/false

/etc/passwd

その後、/etc/passwdmkdir + chownの編集を組み合わせてユーザーを追加し、順番に追加します。

user1:x:498:500::/home/user1:/bin/zsh
user2:x:499:500::/home/user2:/bin/zsh

/etc/passwd

なぜ故意にそれをするのでしょうか?

複数のログインシェル(bash、csh、fish、kdeなど)が必要な場合があります。この場合、次のような複数のエントリを使用できます。

archemar:x:101:101:Archemar:/home/archemar/bash:/bin/bash
arcsh:x:101:101:Archemar:/home/archemar/csh:/bin/csh
arfish:x:101:101:Archemar:/home/archemar/fish:/bin/fish
arkde1:x:101:101:Archemar:/home/archemar/kde1:/bin/bash
arkde2:x:101:101:Archemar:/home/archemar/kde2:/bin/bash

これにより、異なるログインを使用し、特定の構成ファイルを保持し、Sudoなしで相互に編集できるようになります。欠点として、5つの異なるパスワードがあります。これは、KDEの環境を切り替える適切な方法ではありません。また、シェルを切り替える必要がある場合は、chshコマンドがあります。

上記の構成は、sysadminによって眉をひそめられ、異なる$HOME値は、異なるPATH=$HOME/bin:..(探しているもの)を生成しますが、それでも$PATHに共通の部分が必要であり、最終的にはそうではありません。設定が最も簡単です。

自動ソフトウェアテストを実行していて、テストユーザーの一意のIDを使用して、個別のディレクトリ(この場合はホームディレクトリ)を保持することもできます。

しかし、私は意味します...

pwck(パスワードチェック)は警告を発します

1
Archemar