最近、おかしなことに気づきましたので、そのような振る舞いについて説明をお願いします。
# 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
コマンドで異なるユーザーが表示されるのはなぜですか?
私はこのサーバーの管理者ではなく、彼がサーバーで何をしたのかわかりませんが、この質問は私にとって興味深いものです。
これはOSを壊すことはありません、あなたはnginx(そしてあなたのnginx)をスパイすることができます。これは、OSにとって危険というよりも、人間にとって(したがってあなたの質問)障害です。
UNIX/Linuxカーネルの場合、プロセスとファイルはユーザーIDによって管理されます(簡単にするためにグループを削除します)。
ps
またはls -l
を使用する場合、これらのコマンド(ps
およびls
)は/etc/passwd
を読み取り、IDをユーザー名と照合します。 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
なしで相互に編集できるようになります。欠点として、5つの異なるパスワードがあります。これは、KDEの環境を切り替える適切な方法ではありません。また、シェルを切り替える必要がある場合は、chsh
コマンドがあります。
上記の構成は、sysadminによって眉をひそめられ、異なる$HOME
値は、異なるPATH=$HOME/bin:..
(探しているもの)を生成しますが、それでも$PATH
に共通の部分が必要であり、最終的にはそうではありません。設定が最も簡単です。
自動ソフトウェアテストを実行していて、テストユーザーの一意のIDを使用して、個別のディレクトリ(この場合はホームディレクトリ)を保持することもできます。
pwck
(パスワードチェック)は警告を発します