LinuxでWindowsに似た管理者パスワードプロンプトをシミュレートする方法は?

LinuxでWindowsに似た管理者パスワードプロンプトをシミュレートする方法は?

アプリを定期的に使用しますmint installが、一般ユーザーにアプリに対するフルアクセスを許可すると安全ではないと思います。ルートパスワードを入力するまで、このアプリケーションにアクセスする方法があるかどうかを知りたいです。デフォルトでは、ターミナルに新しいアプリケーションをインストールするときに、Windowsの管理者パスワードプロンプトに似たものを使用できます。私はsuを使ってrootとしてログインできることを知っていますが、これは確かに安全ではないことを知っています。どんなアイデアがありますか?

編集:やはり、一般ユーザーに権限を与えるためにsudoやchmodなどを使用したくありません。

答え1

ルートアクセスが必要なタスクを実行する必要がある場合は、ルートアクセスを取得するためのいくつかの方法を使用する必要があります。これは、ほとんどの最新システムで意味するか、またはsuそれらsudoのいずれかに対するラッパーを意味します。 rootでコマンドを実行すると(または使用するかsuどうかにかかわらずsudo)、システムを損傷する可能性がある方法が増える可能性があります。したがって、コマンドが実際に必要な場合にのみrootとしてコマンドを実行する必要があります。

suの一般的な構成との主な違いは、ログイン時と同じパスワードを入力するのに対し、別のパスワード(ユーザーパスワード)を入力する必要があることsudoです。一般的なシングルユーザーコンピュータでは、両者のセキュリティに大きな違いはありません。パスワードを要求しないように設定することもできます。sudosurootsudo

端末で作業していてrootとしてコマンドを実行するには、次のようにしますsu

su -c 'somecommand an_argument another_argument'

そしてsudo

sudo somecommand an_argument another_argument

どちらにしてもパスワード(ルートパスワードsu、自分のパスワードsudo)を入力するように求められます。 Sudoはあなたのパスワードを覚えており、今後数分間パスワードを再入力するよう求められません。su毎回パスワードを再入力する必要があります。

パスワードの入力を求めるグラフィックプロンプトを表示することもできますが、(gksu、、kdesu...を使用)すでに端末で作業している場合はあまり便利ではありません。

答え2

世界に無料の食事はありませんが、リスクを最小限に抑えることはできます。

rootでスクリプトを実行し、パスワードプロンプトやコマンドexitなしですぐに終了するには、いくつかの妥協が必要です。

次の解決策を使用すると、root現在のユーザーの権限を持つ任意の場所に暗号化された2回(またはそれ以上)パスワードを保存できます。

高レベル:

  1. rootパスワードを2回暗号化base64し、ファイルを任意の場所に配置します(例:1234.txt可能)。

  2. expect引数(上記でデコードされた文字列)を使用してスクリプトを呼び出す

  3. Expect必要なスクリプトを実行して終了します。

  4. きれいなファイルとして/root呼び出し(通常のユーザーの場合)、expectパスワードで暗号化されたファイルと。トレースを削除するには(一般ユーザーの観点から)スクリプトを呼び出します。このスクリプトはユーザーだけがアクセスできます。bash_historyrootbase64root

全体として、一般ユーザーの観点から見ると、このスクリプトは一度も実行されたことはなく、機密パスワードが含まれていないようです。

また、二重base64暗号化は私にとって非常にランダムであるか無害であるように見えます(私はセキュリティの専門家ではなく2xで識別しませんがbase64)。たとえば、

V1c5MVFYSmxWMlZzWTI5dFpRbz0K decrypted to YouAreWelcome 

パスワードを2回エンコードbase64 一度:

$ cat pass.txt | base64 | base64 > innocent_name.txt
$ rm pass.txt

それから:

スクリプトを実行します。

$ ./root_wrap.exp "$(cat innocent_name.txt | base64 -d | base64 -d)"

期待されるスクリプト:

#!/usr/bin/expect -f

set root_user root;
set root_pass [ lindex $argv 0 ];

spawn bash
expect "*$ "
send -- "whoami\r"
expect "*$ "
send -- "su $root_user\r"
expect "*?assword:*"
send -- "$root_pass\r"
expect "*# "
send -- "./whoam.sh\r"
expect "*# "
send -- "/root/rm_trace.sh\r"
expect "*# "
send -- "exit\r"
send -- "whoami\r"
expect "*$ "
expect eof

きれいな記録スクリプト/root/rm_trace.sh

#!/bin/bash

sed -i '/base64/d' /home/<user>/.bash_history
sed -i '/root_wrapp/d' /home/<user>/.bash_history
sed -i '/innocent_name/d' /home/<user>/.bash_history

rootとして実行するためのサンプルbashスクリプト:

 #!/bin/bash

 echo "now running as root"
 whoami

関連情報