web-dev-qa-db-ja.com

実際にrootユーザーに変更せずにopenSUSEでSudoを使用する(つまり、Ubuntuのように)

私は最近、Ubuntuを数年間使用した後、openSUSE12.3を試し始めました。私はまだopenSUSEのsu(およびSudo)の扱いとUbuntuのSudoの使い方に慣れています。 openSUSEのマニュアルを読んでいますが、関連する2つの質問に対する回答がわかりません。

1)前の質問で https://askubuntu.com/questions/236859/are-there-adverse-effects-from-or-a-better-way-than-writing-to-run-or -dev-sh 、復号化されたファイルがハードディスクに触れないように、復号化されたgpgファイルを/runフラグを使用して一時的にgpg --outputに書き込むことについて質問しました。ただし、/runに書き込むには、UbuntuでSudoを使用する必要がありました(つまり、Sudo gpg --output '/run/temporary_file_name' etc.)。

OpenSUSEで同じことを実行しようとすると(Sudoまたはsuのいずれかを使用)、おそらくrootユーザーが自分のユーザーを見ることができないためにgpgからエラーメッセージが表示されます。アカウントのgpgキー。 `` Sudofrom Ubuntu, in whichSudoseems to use the same preferences / gpg keys as the regular user, be replicated in openSUSE? I could usegpgなどを使用できますか| teeなど `と思いますが、Ubuntuのやり方に比べると扱いにくいようです。

2)すべてではありませんが一部の行にroot権限を必要とするUbuntuのbashスクリプトがいくつかあります(たとえば、rootが所有したくないファイルをコピーした後、root権限が必要な新しいソフトウェアをインストールします)。 Ubuntuでは、いくつかの行をSudoで始めることができます。ただし、Sudo some_commandはopenSUSEで常に機能するとは限りません。これらのスクリプトをopenSUSEに適合させて、スクリプトのこれらの行でsu -c 'command'を使用するための最良の方法はありますか?スクリプトでsuを単独で使用すると、rootパスワードを入力した後、スクリプトが機能しなくなります。

特にopenSUSEについて質問している間、この質問はおそらくUbuntu以外の多くのディストリビューションに当てはまることに注意してください。

2
J L

SudoがHOME環境変数を保持するか、ターゲットユーザーのホームディレクトリに設定するかは、その構成によって異なります(詳細については、マニュアルを参照してください)。 Ubuntuが正しく実行し、SuSEが正しく実行しない、またはその逆ではありません。両方の選択には長所と短所があります。両方のケースに対処するのは、スクリプトライターとしてのあなたの仕事です。 (1)の解決策は、Sudo -Hを実行するか、--homedirをgpgに渡すことです。

ただし、ルートとしてgpgを実行することは、間違いなく間違ったアプローチです。これにより、gpgに多くの特権が与えられ、そこから~/.gnupgにアクセスする特権が与えられる可能性があります(たとえば、ユーザーのホームディレクトリがNFS上にある場合)。キーを所有するユーザーとしてgpgを実行し、データを標準出力に出力するようにします。 teeにパイプする は、書き込むために特別な特権が必要なファイルに出力する標準的な方法です(なぜそれを「扱いにくい」と考えるのかわかりません):

gpg -d foo.gpg | Sudo tee /run/foo

RootになるためにsuまたはSudoが必要かどうかは、システム管理者の選択によって異なります。同じマシン上の異なるユーザーがどちらかを使用する場合があります。スクリプトを実行するすべてのマシンの構成を制御しない限り、両方の可能性を考慮してください(たとえば、スクリプトにオプションを渡す)。

スクリプトがSudoを使用してUbuntuで動作するが、他のディストリビューションまたはsuで失敗する場合は、環境が(ほぼ)完全にリセットされていることに依存している可能性があります。これはUbuntuのデフォルトのSudo構成ですが、他のシステムでは動作が異なる場合があります。リセットする環境に依存しないようにスクリプトを修正してください。

これは主に質問1の回答です。これは、もう1つは別の質問であり、現時点では対処する時間がないためです。

Ubuntuは、完全な特権分離の複雑さを追加したくない、または必要としない一般的なデスクトップユーザーにアピールするために、セキュリティに関するいくつかのショートカットを採用しています。ただし、機密性が高くディスクに書きたくないデータを処理している場合は、そのようなユーザーではないため、UbuntuスタイルのSudoルールを実装して標準のセキュリティアーキテクチャをバイパスしないでください。 。

警告:RAMに何かを入れたからといって、他の誰もそれにアクセスできないという意味ではありません。明らかな原因はディスク上のスワップであり、これはRAM無期限に)にあったものの内容を保存することになる可能性があります。 ただし、他の妥協も可能です。

したがって、スワップパーティションを無効にして、それで十分だと考えている場合:

/ runに書き込むよりも優れたオプションは、おそらく、それを使用するユーザーが所有する独自のtmpfsマウントを作成することです。たとえば、ユーザーIDとグループIDが両方とも500の場合:

mount -t tmpfs tmpfs /home/jl/realtmp -ouid=500,gid=500

このコマンドはrootとして実行する必要がありますが、この設定を完了したら、それをfstabに追加して、永続的にすることができます。

tmpfs   /home/jl/realtmp    tmpfs   uid=500,gid=500 0   0
1
depquid