最近奇妙なことを見つけて、この動作について説明してもらいました。
# 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
安全ですか?
これはオペレーティングシステムを損なうことなくnginxを監視することができます(そしてnginxはあなたを監視します)。オペレーティングシステムのリスクよりも人間(したがってあなたの質問)に対する妨害が大きいです。
Unix / Linuxカーネルの場合、プロセスとファイルはユーザーIDによって制御されます(単純化のためにグループを削除します)。
ps
またはと一緒に使用すると、ls -l
これらのコマンド(ps
および)はIDとユーザー名が一致するようにls
読み取られます。/etc/passwd
IDが複数回言及されている場合は、最初の発生で停止するのがルールです。
どのように2人のユーザーが同じIDを持つことができますか?
ただし、既定のオプションを使用すると、useradd
これらの競合の問題を回避できます。
useradd
既存のIDを強制的に使用できます(-o
、--non-unique
オプション)。/etc/passwd
手動で編集したり、スクリプトに複数のユーザーを含めることができます。
あなたの場合、管理者は意図的にこれを行っていない可能性があります。管理するホストが多いシェルだけがあり、競合する問題があるかどうかを確認していません。
nginx
ホストの作成時にインストールできるため(インストールプロセスでユーザーが作成されますnginx
)
nginx:x:498:498::/var/www:/bin/false
到着/etc/passwd
/etc/passwd
次に、後で編集とmkdir
+の組み合わせでユーザーを追加し、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
。chsh
コマンドです。
上記の構成は、システム管理者が目を痛めるようになります。他の$HOME
値は異なる結果を生成しますPATH=$HOME/bin:..
(あなたが探しているものです)。しかし、まだ共通の部分が必要であり、最終的に$PATH
構成が最も適していません。最も簡単です。
自動化されたソフトウェアテストを実行し、別のディレクトリ(この場合はホームディレクトリ)を維持し、テストユーザーに一意のIDを提供することもできます。
しかし、私の言葉は...
pwck
(パスワード確認)警告が発生します。