web-dev-qa-db-ja.com

SudoがUbuntu 12.04でルートのPATHを追加しないのはなぜですか?

最近、サーバーをUbuntu Server 12.04にアップグレードしました。以前は、11.04を実行していました。

それ以来、私はSudoを介してrootユーザーコマンドを実行するのに苦労しています。この例は次のとおりです。

> Sudo ufw status
Sudo: ufw: command not found
> Sudo su - root
> ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    LIMIT       Anywhere

Ubuntu 11.04では、プレーンSudo ufw statusは正常に機能しましたが、Ubuntu 12.04ではコマンドが見つかりません。

これは、PATHが設定されていないという問題のようです(ufw/usr/sbin/ufwにあります)。

私が理解しようとしているのは、Sudo <sbin command>だけでルートのPATHが正しく設定されるように戻す必要があることです。

4
Philip Couling

セキュリティ上の理由( Anders参照 である)に加えて、元のユーザーのPATHを保持することも Least Astonishmentの原則 に準拠しています。

fooというプログラムを実行するとしますが、rootとして実行する必要があることがわかります。したがって、Sudo fooを実行します。 Sudo fooで実行されるプログラムがfooで実行されるプログラムと異なる場合は、foorootに異なるPATHがある場合に発生します。 。これは、Sudoを除き、rootがその後に置くものと同じことを行うという一般的な仮定と期待に根本的に違反します。

Sudoprepended rootPATHPATHに保留すると、それが起こります。しかし、Sudoappended rootからPATHへのパスを想定します。これがSudoの動作である場合、最初のbarログインシェル(Sudo -i)をシミュレートするときにプログラムを実行できる場合(rootと呼ぶ) 、Sudo barで実行することもできます。しかし、あなた自身の(つまりbar 'sではない)パスに異なるrootが存在する可能性があるため、この仮定は間違っています。

UbuntuのリリースごとにSudoの動作が変化するのではなく、おそらくPATHが変更された可能性があります。 /sbin/usr/sbin、および/usr/local/sbinPATHに追加すると、問題は解決します。 sbinとしてプログラムを実行するときに、PATHにrootのみが必要な場合を除きます。その場合は、それについて別の質問を投稿することをお勧めします(ただし、これを達成するための1つの手法は Andersの答え で示唆されています)。

4
Eliah Kagan

Sudoのmanページ を調べましたか? セクションセキュリティに関する注意事項 では、SudoPATH変数をどのように使用するかについて説明しています。

PATH/etc/sudoersそこで変更されます になるため、 secure_path を調べることもできます。設定は、ディレクトリ/etc/sudoers.d/内のファイルでも実行できます。

Sudoを新しいバージョンにアップグレードするときに発生する可能性のある/etc/sudoers.d/への変更とは無関係になるため、/etc/sudoersにファイルを作成してSudo構成に変更を加えることをお勧めします。 visudo コマンドを使用して、/etc/sudoers.d/でファイルを作成および編集する必要があります。

5
Anders