私が行うとsu -
ルートに到達するために、私の現在のディレクトリがrootのホームに設定されています。私は多くのように、中にあったことを、現在のディレクトリを維持するために、とにかくそこにありますsudo -s
。それとも、sudoを使用する答えですか?
私が行うとsu -
ルートに到達するために、私の現在のディレクトリがrootのホームに設定されています。私は多くのように、中にあったことを、現在のディレクトリを維持するために、とにかくそこにありますsudo -s
。それとも、sudoを使用する答えですか?
回答:
可能であれば、sudoを使用することをお勧めします。これは、rootのパスワードを知っている(または誰かに知らせる)必要がないためです。ルートパスワードを長くて恐ろしいものに設定し、安全な場所にロックします。
後で誰かのアクセスを拒否する場合は、sudoへのアクセスを削除するだけで、他の全員に新しいルートパスワードを教える必要はありません。
ただし、必要ない場合は「-」パラメータを使用する必要はありません。rootとしてシェルを取得します。ログインシェルではありません(したがって、rootの.profileは実行されません)。
ほとんどの場合、sudoがより良い答えですが、質問の他の部分に答えることに同意します...
「su-」の「-」は、単にスーパーユーザー権限で実行するのではなく、スーパーユーザーのログインをエミュレートすることを示します。
「su-」ではなくプレーンな「su」を使用すると、同じディレクトリにとどまります。ただし、同じ環境で実行されるため、一部の管理コマンドにアクセスするにはパスを変更する必要がある場合があります。
本当に使用したい場合su
は、同じディレクトリにとどまる方法があります。
su - <user> -c "cd `pwd`; bash"
何が起きてる:
su - <user>
=としてログイン -c
つまり、「newのシェルでコマンドを実行します-c "cd `pwd`"
私たちが与えるコマンドは現在のディレクトリ(pwd
)に切り替えることです-しかし、バックティックを使用しているため、pwd
コマンドを実行する前にコマンドが評価さsu
れ、実際に現在の古いユーザーとしているディレクトリに切り替えます。ここでの唯一の問題は、コマンドを実行した直後に新しいシェルが終了するため、次を追加します。-c "cd `pwd`; bash"
これは、「コマンドをbash
実行した後に(新しいシェル)を実行し、cd
ログアウトするまでbashシェルが終了しない」という意味です。su - [user] -c "cd $(pwd); bash"
は、若干改善される可能性があります(バックティックをに変更します$()
)。
「su」を使用すると、対話型シェルが実行されます。これは「sudo -s」と同じです。「su-」は、環境をオーバーライドするログインシェルを作成します。「sudo -i」はsudoと同等です。対話型シェルを取得しようとしている場合は、常にsudo -i(またはsu-)フォームを使用する必要があります。そうしないと、ユーザーのホームディレクトリに奇妙なファイルアクセス権が設定される可能性があります。
このジョブを実行するには、suのソースを変更する必要があります。環境変数の初期化の手順にchdir呼び出しがあります。その呼び出しに含まれているステートメントをコメントアウトします。これで、「su-」を実行できますが、現在のディレクトリを保持します。