誰もがLinuxでプロセス権限をrootに変更する方法を提案できますか?
あるユーザーが通常のプロセスを実行しているとしましょう。私を考えてみてください。これで、私のスクリプトは "useradd"コマンドを使用していくつかのユーザーを作成し、数時間後にユーザーアカウントを無効にしようとしています。 5時間を時間にしよう。 5時間ごとにアカウントが有効になり、5時間後にアカウントが無効になります。
今問題はスクリプトにあります。 「su」コマンドのみを入力してrootアクセス権を取得しようとすると、プロンプトが表示されます。まあ、私の意図は、リモートクライアント(おそらく.netまたはJavaのWebサービス経由)からこのスクリプトを呼び出すことです。
もしそうなら、プロンプトを表示せずにルートモードに変更し、Linuxでアカウントを作成/アクティブ化/無効にする方法はありますか(誰かの入力を待つ必要があります)。ルートパスワードがあるとしましょう。
次のパイプコマンドを試しました。
echo "password" | su
でもなぜかそのメッセージが思い出しましたね。メッセージを表示せずにスクリプトを正常に実行すると、Webサービスを介して同じ操作を続行できます。
答え1
おそらくあなたはそれに精通しているでしょうsudo command
。/etc/suoders file
もしあなたが同じことを書くのなら、あなたはそのコードを読むことができます。
答え2
〜のようにMSVコメントで述べたように、全体の前提は次のとおりです。XYの問題これはセキュリティ上の悪夢ですが、パスワードなしでrootアクセス権を取得する問題を解決しようとします。
まず、からパスワードを読み取らずに読み取るために直接開いてecho "password" | su
動作しません。ツールがあります(例:su
stdin
/dev/tty
予想される)を使用してインタラクティブプログラムを自動化することはできますが、セキュリティの観点から、ルートが特定のコマンドを呼び出すためにルートシェルを自動的に取得するのは違反しているため、これはお勧めできません。最小権限の原則。
つまり、su
次の方法を使用して認証を自動化できます。expect
#!/usr/bin/expect -f
spawn su
expect "Password:"
send "password\n";
interact
ルート資格情報なしで特定のコマンドをルートとして呼び出すことを目的としている場合は、タスクに適したツールは次のとおりです。sudo
。たとえば、wheel
グループのユーザーがパスワードを入力せずに実行できるようにするには、コマンドに次のスタンザを追加しuseradd
ます/etc/sudoers
。sudoedit
%wheel ALL = NOPASSWD: /usr/sbin/useradd
これらの権限を設定するときは、少なくともその機能を特定のユーザーまたは排他グループに制限することをお勧めします。
CGIスクリプトまたは同様の方法でユーザーを追加するためにこの方法を使用する場合は、通常、Web接続ソフトウェアにこれらの権限を直接付与するのではなく、2つの間にある程度の権限分離を追加することをお勧めします。実際の権限は、Webアプリケーションが(IPC経由で)代わりに特権タスクを実行するように要求するデーモンなどの別々のソフトウェアコンポーネントに付与できます。これにより、特権プロセスとWebアプリケーションの両方が入力検証を完了して、Webアプリケーションで悪用可能な欠陥のリスクを最小限に抑え、特権アクションを任意のパラメータuseradd
(この場合)で呼び出すことができます。またはさらに悪いことは、例えば次のようなものです。高い権限でランダムなコードを実行します。
答え3
私はこの状況のために設計された2つのツール、Expect(期待)と空(Empty)を知っています。それらはすべてプログラムが標準入力を聞き、所定の値を提供するのを待ちます。 ExpectはTCLに基づいており、比較的大きなユーザーベースを持っています。空白は依存性が少なくてもサポートレベルが低い場合があります。この簡単な問題を解決するには、すべてのページに十分な文書が必要です。