シェルスクリプトでパスワードを要求せずにrootになります。

シェルスクリプトでパスワードを要求せずにrootになります。

ユーザーからパスワードを取得せずにrootとして「chrome」を実行するスクリプトを作成したいと思います。ユーザーは、スクリプトを開くときにパスワードを知ったり表示したりすることはできません。 (ルートパスワードをスクリプトに書き込む必要がある場合は、暗号化する必要があります。)どのように可能ですか?私は支払ったこれ一つだが役に立たない

#!/usr/bin/expect -f 
"right here i need to be root"
chrome -P http://www.google.com.tr & sleep 4 

答え1

sudoを使用してください。ユーザーがrootとして特定のコマンドまたはスクリプトを実行できるように、sudoersファイルにルールを追加します。

sudo の使用をユーザーに抽象化するには、通常のスクリプトを使用してユーザーの代わりに sudo を呼び出します。

しかし、気になるのは、クロムをルートとして使用することです。理由を尋ねる必要はありませんが、これがセキュリティ上危険であることを覚えておいてください。何をしても、権限のない専用ユーザーの使用を検討する必要があります。ルートの一部の機能が必要な場合は、Linux機能(man 7 capabilities)を参照して、Chromeユーザーに必要なスーパーユーザー権限のみを付与してください。

答え2

スクリプトがグラフィックアプリケーションを起動する場合は使用しないでくださいsudo。例をご覧ください。

グラフィックアプリケーションを起動するためにsudoを使用しないのはなぜですか?

GUIアプリケーションでsudoを使用する

私はroot(!)でchromeを実行することをお勧めしませんが、原則としてrootとしてログインせずにrootとしてグラフィカルアプリケーションを起動するには、で説明されているように使用する必要がありますpkexecこの回答コマンドで必要な環境変数を設定すれば十分です。

 pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY ./your-script

ユーザーにパスワードを入力するように求められます。ただし、厳密には(または失敗した場合)ポリシーファイルを作成する必要があります。バラよりman pkexecそしてもっと詳しくここ特に台本についてここ

答え3

実際、これはスクリプトで構文を明確に設定する必要があるため、非常に悪い考えです。

これはセキュリティの面では良いことではありませんが、次のようにできます。

#!/bin/bash

set pass "YOUR_PASSWORD"

sudo your_command

expect "Password"
send "$pass\r"

ところでchmod u+sはなぜダメなのでしょうか?

答え4

あなたが本当に欲しいのは、特定のユーザーでプロセスを実行するのではなく、実行プロセスのUIDを設定するようです。

おそらくあなたが望むのは、プログラムのSUIDを次のように正しく設定することです。ここで説明

簡単な例:

プログラムがrunルート(ユーザーとグループ)を所有しているとします。

$ chmod u+s run
$ ls -l run
-rwsrwxr-x. 1 root root 0 Aug  5 15:08 run*

ユーザーブロックの実行ビットの「s」を参照してください。他の人が実行すると、プロセスはファイルが属するユーザー(たとえばroot)として実行されます。

メモ:Doug O'Nealが正しく指摘したように、これはLinuxの解釈言語には当てはまりません!(詳細はここ)たとえば、Cで小さなラッパープログラムを作成してコンパイルする必要があります。

関連情報