質問: すみません、sudoを実行するにはttyが必要です この質問はすでに stack overflow で行っていましたが、ここに投稿するように求められました。同じことをしています。私はこのコマンドをmy java program-sudo -u <username> -s pwd 私はこの出力を得ましたcommand=sudo -u <username> -s pwd exitcode=1 sudo: sorry, you must have a tty to run sudo / etc/sudoersを編集してみましたが、すでに含まれています<username> all=(all) nopasswd: all 次に、/ etc/sudoersにある次のコードをコメント化することで、これを実行できることを学びました# defaults requiretty また、デフォルトでは、sudoを使用して別のユーザーとしてコマンドを実行するときに、独自のパスワードを指定する必要があります。しかし、これは/ etc/sudoers-に次の変更を加えることで変更できますdefaults targetpw 私の質問は、javaで変更を加えることなく、つまりデフォルト設定を使用することで、上記のコマンドを実行することは可能ですか??
回答: 私の質問は、上記のコマンドをjavaで実行することは可能ですか?デフォルトの設定を使用することによって、どこにも変更を加えることなく? sudo -u -s pwd 簡単な答えは「いいえ」です。sudoで現在とは異なる方法で処理を行うには、設定を変更する必要があります。sudoはこのための間違ったツールである可能性があります。 sudoのルールは、システム管理者が悪用して追加/意図しない特権を取得することが難しい昇格特権を取得する方法を構成するのに役立ちます。sudoがあなたのために何をするかを考えれば: 身元を確認するためのパスワードを要求する 特権を昇格させる 次に、オプションで別のユーザーとして特権を取得します sudoがアクセスまたはコマンドの実行に使用するログ javaで任意のコマンドを任意のユーザーとして実行し、それらのユーザーまたは自分のパスワードを提供しない場合は、基本的にsudoを置き換えます。その場合は、独自のルールを作成して、乱用。これを行うには、基本的に2つの方法があります。 昇格した特権でjavaを実行し、必要な特権を慎重に取り戻します(setuid()、seteuid()c関数呼び出しを参照)。 外部プログラムを実行して、必要なときにシステム特権を取得する #1の場合、あなたのjavaプログラムはsudoが行うこと自体を実行しているので、悪用から保護するために独自のルールセットを実装する必要があります。#2を実行するsudo以外のプログラムがあります。 https://code.google.com/archive/p/exec-wrapper/downloads に1つの例があります。この便利なシェルスクリプトは、別のコマンド(通常はスクリプト)を実行するcプログラムを作成します。次に、cプログラムをバイナリにコンパイルし、そのsetuidルートをマークするか、実際には任意のユーザーにsetuidできるようにします。 (モード:4555、所有者:root)それを許可するファイルシステムを使用している限り、バイナリプログラムを実行すると、構成されたコマンドがバイナリプログラム自体を所有するユーザーidとして実行されます。