「sudo」なしでrootとしてプログラムを実行するには?


10

OS Xに、ルートとしてのみ実行できる特定のバイナリプログラムがあります。

sudo呼び出すたびにプリペンドしてパスワードを入力するのにうんざりしているので、定期的に呼び出すと、パスワードを要求せずに、ルートとして自動的に実行されるようにしたいと思っています。

プログラムの所有者はrootで、そのグループはwheelです。

chmod ug+s実行時にユーザーIDとグループIDをroot / wheelに設定しようとしましたが、sudoを使用せずにプログラムを実行すると、sudoまたはrootとしてのみ実行できるというメッセージがまだ表示されます。


特定の時間または何らかのイベントが発生したときに実行できますか?
user151019 2011年

9
昔のUNIXの達人は、定期的に手動でルートのみの操作を呼び出すと、それが間違っていることになると示唆していました。これは自動化できるものですか?またはデーモンとして実行しますか?さらに詳細にすると、別の種類の解決策が提案される可能性があります。
dmckee ---元モデレーターの子猫

プログラムは実際にrootが所有していますか?Setuid / gidは、ファイルのユーザー/グループを使用します。
ダニエルベック

2
… "詳細"には、このプログラムのバイナリがNFSマウントされたボリューム上にあるかどうか、nosuidマウントオプションを使用するかどうかなども含まれます。加えて、プログラムをスーパーユーザーとして定期的に実行する必要がある理由も含まれます。
JdeBP 2011年

@dmckee多くのMacユーザーが自分のワークステーションでサーバーソフトウェアを実行していて、本当に必要のないものにrootを要求するように設定されていることがよくあります...しかし、rootなしで実行するようにLAMPスタックを再構成することはお尻の苦痛です。一方で、Apacheを1日に20回再起動し、そのたびにsudoと入力するのもお尻の痛みです。これは簡単な解決策です。
Abhi Beckert

回答:


2

実行しようとしているプログラムが実際にはバイナリであり、シェルスクリプトではないことを確認してください。ほとんどのシェルは、suidスクリプトを無視します。なぜなら、安全に実行することが本当に難しいからです。確認する簡単な方法はfile、プログラムでコマンドを使用することです。


17

あなたの問題の半分の解決策:

sudoersファイルに、以下を追加します。

username ALL= NOPASSWD: /path/to/command

次に、コマンドラインから次のように入力します。

sudo command

そして、パスワードを要求せずにコマンドを実行します。このコマンドはrootとして実行されます。

ユーザー名を実際のユーザー名に置き換える必要があることに注意してください。


一番下にある最良の答えを見つけて驚いた。ありがとうございました!
CDR

参考までに、残りの半分(sudoコマンドを入力する必要がない)を解決するには、コマンドにsudoを含むシェルエイリアスを作成します(surm = sudo rm "$ @"など)
Walter

4

何らかの理由でこのデーモンを本当にデーモンとして呼び出すことができない場合(この質問はそのインスタンスに関連します)、このメソッド一緒にハッキングされる可能性がありますが、かなりダーティであり、まったく安全ではありません。

コンセプトは、それをAppleScriptで起動することです。最初に、コマンドラインからプロセスを呼び出す方法を知っておく必要があります(すでにsudoを使用している場合は、すべて設定する必要があります)。do shell scriptコマンドを使用してそのプロセスを起動し、sudoを使用する代わりに、資格情報をAppleScriptに書き込みます。

do shell script "/path/to/your/executable/here" user name "me" password "mypassword" with administrator privileges

これが安全でないという部分を繰り返します。これは、あなたの管理者クレデンスがプレーンテキストで保存されることを意味します。可能であれば、これをLaunchDaemonとしてバックグラウンド化する方法を見つける必要があります。


Macの「Runas」の方法:)ありがとう
Vlueboy

2

OSXでは、使用しているプログラムが/ usr / local / bin / YourProgramNameにあると仮定します...この問題を解決するには、次のコマンドを実行します。ファイル自体ではなく、ファイルをルートとするファイル階層のユーザーID /グループIDを変更するには。

sudo chown -R $(whoami) /usr/local/bin/

...その後、ターミナルでprogramName、$ YourProgramNameを呼び出します


私の問題は、インストールされたプログラムが適切な権限なしでインストールされたことだったので、これらのプログラムのディレクトリでこれを実行したところ、sudoなしで正常に実行されました。ありがとう!
atwixtor 2016年

0

できるよ

sudo tcsh

これにより、ルートシェルに移動します。


0

プログラム自体がID = 0で実行されているかどうかをチェックするように見えます


1
…もちろん、それがset-UIDスーパーユーザーである場合(上記の懸念は別として)です。あなたはおそらく言おうとしているのは、プログラムがためにチェックしているということである本当の UID 0だけではなく、実効 UID 0
JdeBP

-1

できsudo chown YOUR-USERNAME-HERE BINARY-NAME-HEREます。

それでも、私はdmckeeのコメントに完全に同意します。


これはどのように役立ちますか?⁠–
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.