web-dev-qa-db-ja.com

SUをSudoできません。「ttyが存在せず、askpassプログラムが指定されていません」

ユーザーrootを介したログインを無効にし、sudoerリストにある別のユーザーを作成したルートサーバーがあります。したがって、サーバーで作業したいときは、次のようにします。

ssh myusername@IP_ADDRESS

サーバー上:

Sudo su

root権限を取得するには、パスワードを入力してください。これで6か月間問題なく動作しました。今日私はSudo su:

Sudo: no tty present and no askpass program specified

何がハッキングされていますか?このエラーは何を意味し、なぜそれを得るのですか? root権限がないと、サーバーでそれほど多くのことはできません。これを修正する方法はありますか?

7
Upvote

Sudoは、読み書きのために/dev/ttyを開こうとし、失敗するとそのエラーを出力します。コメントに/ dev/ttyがシステムにないことが示されています。

Sudoには、/ dev/ttyの代わりに標準入力からパスワードを読み取るオプション-Sがあります。 rootになるには、Sudo -Sを実行できる必要があります。

/ dev/ttyの回復方法については、サーバーを再起動するだけで十分な場合があります。システムは、起動時に/ dev内のすべてのデバイスを再作成する場合があります。または、デバイスを作成するには、mknodコマンドを使用しますが、ttyデバイスの正しいメジャー番号とマイナー番号を知る必要があります。私が利用できるUbuntuシステムでは、/ devに次のエントリが表示されます。

crw------- 1 root root      5,   1 Apr 16 18:36 console
crw-rw-rw- 1 root tty       5,   2 Sep 24 15:35 ptmx
crw-rw-rw- 1 root tty       5,   0 Sep 24 14:25 tty

この場合、メジャー番号は5、マイナー番号は0です。/dev/consoleと/ dev/ptmxのメジャー番号は同じです。したがって、/ dev/consoleまたは/ dev/ptmxを調べて正しいメジャー番号を見つけ、次のコマンドを実行します。

mknod /dev/tty c major 0

ここで、「major」は正しいメジャー番号です。

/ dev/ttyを再作成した後、権限が正しいことを確認してください:

chmod 666 /dev/tty
18
Kenster

Sudoがrootパスワードのプロンプトを表示しようとしているため、疑似ttyが割り当てられていないため、失敗します。

Rootとしてログインするか、_/etc/sudoers_(または_Sudo visudo_)に次のルールを設定する必要があります。

_# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL
_

次に、ユーザーがadminグループ(またはwheel)に属していることを確認します。

理想的には(より安全)%admin ALL=(ALL) NOPASSWD:/path/to/programとして指定できる特定のコマンドのみにroot権限を制限することです

6
kenorb

チェックすべきことの1つは、OSがさまざまなプロセスに「問題がある」と見なしているかどうかです。それでも問題が解決しない場合は、sshを実行するシェルとSudoを実行するシェルの両方でこれを実行する価値があります。確認する簡単な方法は、コマンド「tty」です。「not tty」が返された場合、シェルには「制御tty」がなく、ファイルシステムに/ dev/ttyが存在していても開くことができません。

さまざまな状況により、制御ttyを使用してシェルが実行されなかった可能性があり、それらのいくつかは目に見える警告を提供しません。たとえば、最近Emacs ShellウィンドウでHigh Sierraに問題が発生しました( Mac OS High Sierraではptyを開けません )-High Sierraは、以前のMac OS Xリリースとは異なるメカニズムを使用してptyを割り当てます、そのため、コードを再構成しないと、ptyの割り当てに失敗します。

0
user2864482