申し訳ありませんが、sudoを実行するにはttyが必要です


13

私はすでにStack Overflowでこの質問をしていましたが、ここに投稿するように頼まれました。同じことをします。

Javaプログラムを使用してこのコマンドを実行しました。

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で実行することは可能ですか?


1
これが、あなたがsudoのためにかなり不自然な選択肢を求めていた理由ですか?
slhck

6
requirettyデフォルトで有効になっている場合、ディストリビューション固有のようです。sudo独自のドキュメントによると、「デフォルトでオフ」になっています。
mpy

回答:


3

Javaでシェルコマンドを実行する方法がわかりませんが、sshコマンドの-tオプションを見てください

-t force pseudo-tty allocation.

これは、sshでrootとしてコマンドを実行する必要がある場合に行うことです(直接ルートログインを無効にし、sudoでttyが必要です)


1
このアプローチは一目で問題を解決する可能性がありますが、それが質問にどのように関連しているかはまったく明確ではありません。もっと詳しく説明していただけますか?
パブーク

1
既定の設定を変更せずに問題を解決するために+1。
ルーク14年

1

私の質問は、どこでも変更を加えることなく、つまりデフォルト設定を使用することで、Javaで上記のコマンドを実行することは可能ですか?

sudo -u -S pwd

簡単な答えはノーです。sudoに現在とは異なる動作をさせるために設定を変更する必要があります。

sudoはこのための間違ったツールかもしれません。Sudoのルールは、システム管理者が、追加/意図しない特権を取得するために悪用するのが困難な特権を昇格する方法を構成するのに役立ちます。

sudoが何をするのかを検討する場合:

  1. IDを確認するためのパスワードのプロンプト
  2. 特権を昇格する
  3. 次に、オプションで別のユーザーとして特権を取得します
  4. アクセスを取得またはコマンドを実行するためのsudoの使用を記録します

Javaで任意のユーザーまたは自分のパスワードを指定せずに任意のユーザーとして任意のコマンドを実行する場合は、基本的にsudoを置き換えます。その場合、悪用を防ぐ方法について独自のルールを作成する必要があります。

これを行うには、基本的に2つの方法があります。

  1. 昇格された特権でjavaを実行し、必要な特権を慎重に取得して返します(setuid()seteuid()C関数呼び出しを参照)。
  2. 外部プログラムを実行して、必要なときに昇格した権限を取得する

#1の場合、Javaプログラムはsudoの機能を実行しているので、乱用から保護するために独自のルールセットを実装する必要があります。

#2を行うsudo以外のプログラムがあります。1つの例はhttps://code.google.com/archive/p/exec-wrapper/downloadsにあります

この便利なシェルスクリプトは、別のコマンド(通常はスクリプト)を実行するCプログラムを作成します。次に、Cプログラムをバイナリにコンパイルし、そのsetuidルートをマークするか、実際にはすべてのユーザーがsetuidできるようにします。(モード:4555および所有者:ルート)

あなたがそれを許可するファイルシステム上にいる限り、バイナリプログラムを実行すると、バイナリプログラム自体を所有するユーザーIDとして設定されたコマンドが実行されます。

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