ユーザーが通常のsudoを使用してグラフィカルアプリケーションを起動しないのはなぜですか?


114

私はコミュニティの「RootSudo」ドキュメントを読みましたがこの行に興味があります。

通常のsudoを使用してグラフィカルアプリケーションをルートとして起動しないでください。

どうして?違いはなんですか?私は普通のデスクトップユーザーなので、簡単な説明を入力してください。



実際、最近、MATLABを/ usr / localにインストールするのに苦労しました。これには/ usr / localに書き込むためにroot権限が必要でしたが、gksuを使用してインストーラーを実行すると、インストールされたプログラムを非rootとして実行できなくなりました。sudoを使用してインストーラーを実行すると、すべてが正常に機能しました。
よだれかけが失われた

回答:


129

グラフィカルアプリケーションは、多くの場合、ユーザーのホームフォルダー内に書き込まれた構成ファイルに設定やユーザー固有のデータを保存します。ユーザーのホームフォルダーがHOME 環境変数であるため、アプリケーションが使用するものを決定するためにアプリケーションが使用する主なメカニズム。(を使用して自分で検査できますecho $HOME)。

geditとして実行しているとします(グラフィカルテキストエディター)root。を実行するsudo geditと、プログラムがとして実行さている場合でも、ホームディレクトリHOMEを指し続けます。そのため、設定ファイルを書きます自分のホームディレクトリにコピーします。これにより、構成ファイルが所有されアクセスできなくなります(後でプログラムをとしてではなく、自分で実行する場合)。これは主に、アプリケーションが新しい構成ファイルを作成する必要がある場合に発生します。新しく作成されたファイルは、デフォルトでは、それらを作成したユーザー(この場合はあなたではなく)が所有します。rootgeditrootrootrootroot

それsudoが、ストレートではなくグラフィカルなフロントエンドでグラフィカルなアプリケーションを実行する主な理由ですsudo。Ubuntuおよびその派生物のほとんど(XubuntuおよびLubuntuを含む)では、標準のグラフィカルフロントエンドはgksu/gksudoです。Kubuntuではそうですkdesudo。(使用されているデスクトップ環境によって異なります。)

あなたがいる場合したい使用するsudoグラフィカルアプリケーションなどを実行するために、直接gedit、次のコマンドを実行します。

sudo -H gedit

この-Hフラグは、のホームフォルダー()を指すようにsudo設定HOMErootます/root

それでも.Xauthority、一時フォルダにコピーして所有権を自動的に処理することはできません(これは、グラフィカルsudoフロントエンドが面倒を見るもう1つのことです)。しかし、.Xauthorityアクセスできないまれなイベントでは、エラーがあることを示すエラーが表示されます。その後sudo rm ~/.Xauthority、自動的に再生成されるため、問題を削除()することで修正できます。したがって、.Xauthorityの所有権と許可を保護することは、構成ファイルの所有権と許可を保護することほど重要ではありません。

root-owned とは対照的に、.Xauthority構成ファイルがとして所有されるようになるとroot、問題が何であるかが必ずしも明確ではありません(グラフィカルプログラムが頻繁に実行されますが、うまく機能せず、有用なエラーをコンソールに出力するため)。また、特にホームディレクトリ内の1つ以上のファイルを自分以外の誰かが所有する状況にある場合は、修正するのがさらに面倒ですchownすべてのファイルを再帰的に実行するだけでは修正できないため)自分に戻ります)。

したがって、アプリの内部動作に精通しており、設定ファイルを書き込もうとしないことが確実である場合除き、グラフィカルアプリケーションの実行にsudo(少なくともなしで-H)使用しないでください。


これらのファイルがルートによって所有されている場合、ホームディレクトリ上のすべての構成ファイル(または任意のファイル)の所有者になることはできますか?
Nur

@Nur ホームディレクトリに、他のユーザーが所有したいファイルや、他のグループメンバーシップ(共有用)が必要なファイルがないと仮定すると、実行できます:残念ながら、これらの基準は必ずしも適用されません。グループ所有者を保持する必要があるファイルがある場合は、を実行できます。通常、これで十分です。(ホームディレクトリで別のユーザーがファイルを所有する必要がある場合でも、それは問題になります。)sudo chmod -R $USER:$USER ~sudo chmod -R $USER ~
エリアカガン

1
@EliahKagan chmod実際にそれをしますか?私はいつもそれがchownそれだと思っていました。chmod私のためにやったことはありません。
Wyatt8740

2
@ Wyatt8740 上記のコメントchownchmodはなく、間違いなく書くべきでした。ごめんなさい-これを指摘してくれてありがとう!
エリアケイガン

2
@TheQuarkでsudo -H echo $HOME、あなたのシェルが-ないルートとして、あなたのように実行している-実行パラメータ展開上を$HOME、のパス取得あなたのホームディレクトリを、そして通過するにsudo順番に既に展開された値に渡され、echoそれを印刷し、。sudo -H printenv HOMEsudo -H bash -c 'echo $HOME'、およびsudo -H sh -c 'echo $HOME'すべての印刷/root。これは概念的には似ていますが、メカニズムは異なりますが、どのようにx=a echo "$x"印刷しないかax既に値が設定されていない場合a)です。
エリアケイガン

25

簡単に言えば:

これにより、ホームディレクトリ内のファイルがルートによって所有されるのを防ぎます。

ここで読んでください。また、「gksudo nautilus」と「sudo nautilus」の違い何ですか?


gksudoは、UbuntuおよびDebianのインストールに含まれなくなりました。詳細については、itsfoss.com / gksu-replacement-ubuntuを参照してください。askubuntu.com/a/1047413/197910は現在、優れたソリューションです。
K7AAY

5

代替gksu nautilusとは、gksu gedit使用することですnautilus-adminアドオン。Nautilusを使用してファイルとディレクトリを参照し、それらをルート(管理者)として開くことができます。

インストールは簡単です。

sudo apt install nautilus-admin

これで、nautilusを使用しているときに、管理者として編集するための追加オプションがあります。

nautilus admin.gif


gedit rootが設定を許可しないため

geditrootとして実行する場合、タブストップの通常ユーザーとして設定した設定を使用したり、タブをスペース、フォント名、フォントサイズ、行の折り返しなどに変換することはできません。

これを解決するために、sgeditユーザー設定を継承してルートに適用するスクリプトを作成しました。ルートgeditをユーザーgeditの設定と同期するにはどうすればよいですか?

  • を使用して呼び出します sgedit filename1 filename2 ...
  • タブストップ、フォント、改行などのユーザーのgedit設定を取得します。
  • sudo -Hルート権限を取得しながら、ファイルの所有権を保持するために昇格します。
  • 最後sudoがタイムアウトした場合にパスワードを要求します。
  • sudoのgedit設定を取得します
  • ユーザー設定とsudo gedit設定の違いを比較します
  • 差分のみに設定されたgsettingsを実行します(174個のsetコマンドを1ダース以下に減らします。次回はおそらく1つまたは2つの変更のみを実行しますが、多くの場合、変更はありません。
  • gedit端末プロンプトがすぐに再表示されるように、バックグラウンドタスクとして呼び出します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.