Linux-「su-」を使用しますが、現在のディレクトリを保持します


13

私が行うとsu -ルートに到達するために、私の現在のディレクトリがrootのホームに設定されています。私は多くのように、中にあったことを、現在のディレクトリを維持するために、とにかくそこにありますsudo -s。それとも、sudoを使用する答えですか?


5
私は失礼に聞こえたくありませんが、なぜこの問題は「man su」で解決されないのですか?
ミルディン2009年

1
@RoryはMyrrdynのコメントを読んでください
c4f4t0r 14年

sudo su -c "zsh"私の場合、を使用するのが好きで、現在のディレクトリに私を保持し、rootユーザーでシェルとしてzshをロードします。ctrl+dその後、現在のユーザーに戻ります。ディレクトリについては、centosで直接動作しますが、渡されたコマンド内に `&& cd $(pwd)`を追加するとうまくいくかもしれません。
GabLeRoux

@Myrrdynのドキュメントは、探しているものがわかっている場合に役立ちます。そうしないと、専門家にいくつかのアドバイスを求めるのが速くなり、より教訓的です。
ロマンビンセント

回答:


18

可能であれば、sudoを使用することをお勧めします。これは、rootのパスワードを知っている(または誰かに知らせる)必要がないためです。ルートパスワードを長くて恐ろしいものに設定し、安全な場所にロックします。

後で誰かのアクセスを拒否する場合は、sudoへのアクセスを削除するだけで、他の全員に新しいルートパスワードを教える必要はありません。

ただし、必要ない場合は「-」パラメータを使用する必要はありません。rootとしてシェルを取得します。ログインシェルではありません(したがって、rootの.profileは実行されません)。


1
私の場合、のようなことをするにはエイリアスが必要でしたasuser git reset --hard。しかしsu - <user> -m -c "git reset --hard"sudo -u <user> git reset --hard私の環境は保存され、gitは現在のユーザーのgit config を読み取ろうとします。そのため、su- <user> -c "cd ; bash" を使用したuser205705のソリューションのpwd方が優れている場合があることを述べたいと思いました。
-ReFruity

16

ほとんどの場合、sudoがより良い答えですが、質問の他の部分に答えることに同意します...

「su-」の「-」は、単にスーパーユーザー権限で実行するのではなく、スーパーユーザーのログインをエミュレートすることを示します。

「su-」ではなくプレーンな「su」を使用すると、同じディレクトリにとどまります。ただし、同じ環境で実行されるため、一部の管理コマンドにアクセスするにはパスを変更する必要がある場合があります。


9

suなしで使用-すると、現在のディレクトリに保持されます。 --lまたは--login suに次のことを伝えます。

ユーザーが直接ログインした場合にユーザーが期待するものと同様の環境を提供します。

または、sudoを使用するだけで、他にも多くの利点があります。またはsshキー。


6

必ずsudoを使用してください。

su -m
-m(-p):環境変数をリセットしません(通常は推奨されません)

これにより、ルートに変更したときにフォルダー内に保持されます。

sudoを使用する利点


1
セキュリティの問題である可能性のあるPATH環境をリセットしない場合を除き、これが単独で「su」とどのように異なるかはわかりません。
デビッドパシュリー

たとえば、@ DavidPashley .bashrcでは、ルートユーザーではなく外部ユーザーから実行されます。
phil294

3

sudo :)を使用します。真剣に、suは必要ありません。「sudo」は特権コマンドにのみ使用し、ミスを避けるのに役立つため、より優れています。また、説明責任も得ます。


3

本当に使用したい場合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"は、若干改善される可能性があります(バックティックをに変更します$())。
カカウエテフリト

2

「su」を使用すると、対話型シェルが実行されます。これは「sudo -s」と同じです。「su-」は、環境をオーバーライドするログインシェルを作成します。「sudo -i」はsudoと同等です。対話型シェルを取得しようとしている場合は、常にsudo -i(またはsu-)フォームを使用する必要があります。そうしないと、ユーザーのホームディレクトリに奇妙なファイルアクセス権が設定される可能性があります。


0

このジョブを実行するには、suのソースを変更する必要があります。環境変数の初期化の手順にchdir呼び出しがあります。その呼び出しに含まれているステートメントをコメントアウトします。これで、「su-」を実行できますが、現在のディレクトリを保持します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.