2017-09-08 5 views
-1

私はNSTextFieldがあるココアスウィフトアプリケーションを作っています。テキストフィールドはパスワードを返します。パスワードはProcess()にロードされ、bashコマンドスクリプトに渡されます。 コマンドは次のとおりです。Echo $ {1} | sudo -S echo works 私はパスワードの引数を渡すので、$ {1}の代わりになります。このコマンドを実行すると、コンソールにusr/bin/sudo:操作が許可されていないと表示されます。 bashスクリプトでsudoを使用できる方法はありますか? ヘルプは本当に感謝します。ありがとう。スウィフトココア - プロセス()はsudoを許可していません

答えて

3

これはOS Xの特権をエスカレートする正しい方法ではありません。特に恐ろしいセキュリティだからです。このようなクリアテキストでのパスワードの回り込みは、一般的に悪いことです。

これがなぜ問題なのか説明してください。私はこのbashスクリプトがあるとします。

#!/bin/bash 

sleep 10 

echo ${1} 

その後、私はProcessを使用して、私のスクリプトを実行します。

import Foundation 

let process = Process() 

process.launchPath = "/bin/bash" 
process.arguments = ["/path/to/foo.sh", "This is a parameter"] 

process.launch() 
process.waitUntilExit() 

スクリプトを実行し、それは「このパラメータがある」を出力し、すべてがうまくようです。スクリプトが実行されている間しかし、別のターミナルウィンドウで、私は、このコマンドを実行します。

$ ps -ajxww | grep foo.sh 

、出力を得る:

username   85281 85276 85281  0 1 S s006 0:00.00 /bin/bash /path/to/foo.sh This is a parameter 

あなたが見ることができるように、パラメータがではっきり見えますプロセスリスト。そのスクリプトのパラメータが私の管理者パスワードだったならば、私はそのパスワードをシステム上のすべての関心のあるプロセスにブロードキャストしただけです。

とにかく、このようなことをするのではなく、特権launchdヘルパーツールを作成する必要があります。このツールはSMJobBless()を使用して祝福することができます。 OSは安全な方法でパスワードの入力を求め、安全な場所にヘルパーツールをインストールします。 XPCを使用してツールと通信することで、ルートとして機能させることができます。これを行う方法のアイデアについてはAppleのEvenBetterAuthorizationSampleを参照してください。

+0

本当にありがとうございます。私はココアを初めて知っているので、EvenBetterAuthorizationSampleの使い方を説明する場所を見つけることができません。あなたは私にそれを使用する方法を理解させる何かをリンクしていただけますか?ありがとう。 –

関連する問題