私がする時 su -
ルートに移動するには、現在のディレクトリをルートのホームに設定します。とにかく、私がいた現在のディレクトリを保持するために、Sudo -s
。それともsudoを使用する答えですか?
Rootのパスワードを知っている(または誰かに与える)必要がないので、可能であれば常にSudoを使用する方が適切です。 rootパスワードを長くて恐ろしいものに設定し、金庫にロックします。
誰かのアクセスを後で拒否したい場合は、他の人に新しいrootパスワードを教える必要はなく、Sudoへのアクセスを削除するだけです。
ただし、使用しない場合は、「-」パラメーターを使用する必要はありません。あなたはルートとしてシェルを取得しますが、それは ログインシェル ではありません(そのため、ルートの.profileは実行されません。)
Sudoはほとんどの場合より良い答えですが、質問の他の部分には答えることに同意します...
「su-」の「-」は、スーパーユーザー権限で実行するだけでなく、スーパーユーザーログインをエミュレートすることを示します。
「su-」ではなくプレーンな「su」を使用すると、同じディレクトリにとどまります。ただし、同じ環境で実行しているため、一部の管理コマンドにアクセスするにはパスを変更する必要がある場合があります。
-
なしでsu
を使用すると、現在のディレクトリにとどまります。 -
、-l
または--login
suに次のことを伝えます。
ユーザーが直接ログインした場合と同様の環境を提供します。
またはSudoを使用するだけで、他にも多くの利点があります。またはsshキー。
間違いなくSudoを使用する必要があります。
su -m
-m(-p):環境変数をリセットしません(通常は推奨されません)
これにより、ルートに変更したときにフォルダーにとどまります。
本当にsu
を使用したい場合は、同じディレクトリにとどまる方法があります。
su - <user> -c "cd `pwd`; bash"
何が起きてる:
su - <user>
=としてログイン-c
これは、「新しいシェルでコマンドを実行する-c "cd `pwd`"
提供するコマンドは、現在のディレクトリ(pwd
)に切り替えることです。ただし、バックティックを使用しているため、pwd
コマンドは、su
コマンドを実行する前に評価されます古いユーザーとして今いるディレクトリに切り替えます。ここでの唯一の問題は、コマンドを実行した直後に新しいシェルが終了するため、次のように追加します。-c "cd `pwd`; bash"
は、「bash
」コマンドを実行した後に「cd
(新しいシェル)を実行し、ログアウトするまでbashシェルが終了しないことを意味します。Sudoを使用してください:)。真剣に、あなたはsuを必要としません。 'sudo'は、特権コマンドにのみ使用し、ミスを回避できるので、より優れています。アカウンタビリティも得られます。
「su」を使用すると、対話型シェルが実行されます。これは「sudo -s」と同じです。 「su-」は、環境を上書きするログインシェルを作成します。 「sudo -i」は、sudoと同等です。インタラクティブなシェルを取得しようとしている場合は、常にSudo -i(またはsu-)形式を使用する必要があります。そうしないと、ユーザーのホームディレクトリで奇妙なファイルアクセス権が発生する可能性があります。
このジョブを実行するには、suのソースを変更する必要があります。環境変数を初期化する手順にchdir呼び出しがあります。その呼び出しに含まれているステートメントをコメント化します。そして今、あなたは「su-」を行うことができますが、現在のディレクトリを保持します。