web-dev-qa-db-ja.com

sudoによってパスワードの入力を求められるのを避ける方法は?

suコマンドを介してroot(スーパーユーザー)になることができることは知っていますが、コマンドを入力した後にそれを認証する必要があります。 rootになり、1行で(パスワードを使用して)認証する方法はありますか

79
Vader

まあ、私が考えることができる唯一のものは

echo 'password' | Sudo -S command

-Sフラグは、Sudoに標準入力からパスワードを読み取らせます。 man Sudoで説明されているように:

-S、-stdin

ターミナルデバイスを使用する代わりに、プロンプトを標準エラーに書き込み、標準入力からパスワードを読み取ります。パスワードの後に​​は改行文字が必要です。

したがって、ls特権でSudoを実行するには、次のようにします。

echo 'password' | Sudo -S ls

Sudoアクセストークンがアクティブな場合、パスワードを入力する必要がない場合は、すでに最近実行しているため、これによりエラーが生成されることに注意してください。これを回避するには、-kを使用してアクセストークンをリセットします。

echo 'password' | Sudo -kS ls

実際のルートシェル(suSudo -iなど)にアクセスする方法は知りません。ただし、これで十分です。

79
terdon

ターミナルで visudo コマンドを実行して、sudoersファイルを編集します。

Sudo visudo

sudoersリストに次の行を追加します

username ALL = NOPASSWD : ALL

注:上記の行のusernameを実際のUserNameに置き換えます。

83
Din

echo 'password' | Sudo -kS lsソリューションは機能しますが、いくつかのセキュリティ上の欠点があります。そのほとんどは、terdonの回答へのコメントで既に言及されています。したがって、別のアプローチを提案したいと思います。

頻繁に実行する必要があるコマンドが1つだけの場合、たとえばapt-get upgradeは、Sudo someCommandnotを要求するようにシステムを構成できます。

これを行うには、visudoを実行し、次のようなものを入力します。

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

コマンドを入力する場合without引数(この例ではupgradeなし)を入力すると、ユーザーはany引数を指定して実行できることに注意してください。注意して使用してください。

25
Heinzi

これもできます:

Sudo -S <<< "password" command
13
Jahid

パスワードを完全に削除する代わりに、タイムアウトを増やして、1日に数回入力するだけで済みます。ターミナルで、次を実行します:

Sudo visudo

ファイルの最後に、次の行を追加してタイムアウトを30分に設定します(jsmithをユーザー名に置き換えます)。

Defaults:jsmith timestamp_timeout=30

任意の番号を使用できます。 -1はタイムアウトなし(最初のみプロンプトが表示される)を意味し、0はインスタントタイムアウト(Sudoが表示されるたびにプロンプ​​トが表示される)を意味します。デフォルトのタイムアウトは5分です。

8
Shital Shah

Vader、元の質問に対するコメントから、スーパーユーザーのアクセス許可で実行されている対話型のシェルに切り替えたいですか?

Sudoには、シェルを要求する特定の引数があります。

-s [command]
The -s (Shell) option runs the Shell specified by the Shell environment variable if
it is set or the Shell as specified in the password database. If a command is
specified, it is passed to the Shell for execution via the Shell's -c option. If no 
command is specified, an interactive Shell is executed.

これにより、前述のセキュリティ上の欠点が回避され、次のコマンドを使用して「ルートに移動」できます。

Sudo -s

IF本当にルートシェルを実行する必要があります(ほとんどの場合、実行しません)。 (「ルート」として実行することを反映するため)それに応じて設定されるシェルの変数は、「-H」フラグを使用して実行できます。したがって、完全なコマンドは

Sudo -s -H

詳細は Sudoのマンページ で確認できます。

1
he1ix