目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / 管理ガイド / 共通のタスク / sudo
適用項目 SUSE Linux Enterprise Server 12 SP5

2 sudo

ファイルの変更やスーパユーザのみが許可されているタスクを実行するために、多くのコマンドとシステムユーティリティは、rootとして実行する必要があります。セキュリティ上の理由のため、および危険なコマンドが偶発的に実行されるのを回避するため、通常はrootとして直接ログインしないことをお勧めします。代わりに、通常の特権のないユーザとして、sudoコマンドを使用し、昇格された特権付きでコマンドを実行することをお勧めします。

SUSE Linux Enterprise Serverでは、sudoは、suと同様に機能するようデフォルトで設定されています。ただし、sudoを使用することで、ユーザは、他のユーザの特権を自由に設定し、それらの特権を使用してコマンドを実行できるようになります。このコマンドを使用して、指定の特権を持つ役割を特定のユーザとグループに割り当てることができます。たとえば、usersグループのメンバーが、wilberの特権でコマンドを実行できるようにすることができます。コマンドへのアクセス権は、コマンドオプションの指定を禁止するなどしてさらに制限できます。suでは、PAMを使用した認証で常にrootパスワードを必要としますが、sudoでは、ユーザの資格情報を使用して認証するように設定できます。これにより、セキュリティがより強化されます。rootパスワードを共有する必要がなくなるからです。たとえば、usersグループのメンバーが、wilberとしてfrobnicateコマンドを実行することを許可できますが、その際に、引数の指定を禁止する制限を付けることができます。このコマンドを使用して、指定の機能を持つ役割を特定のユーザとグループに割り当てることができます。

2.1 sudoの基本的な使用方法

sudoは簡単に使用できて、非常に強力なコマンドです。

2.1.1 単一コマンドの実行

標準ユーザとしてログインしている場合、コマンドの前にsudoを追加することで、任意のコマンドをrootとして実行できます。その際、rootパスワードの入力が要求され、認証に成功すると、コマンドがrootとして実行されます。

tux > id -un1
tux
tux > sudo id -un
root's password:2
root
tux > id -un
tux3
tux > sudo id -un
4
root

1

id -unコマンドは、現在のユーザのログイン名を出力します。

2

入力時には、パスワードは表示されません(クリアテキストとしてだけでなく、黒丸としても表示されません)。

3

sudoで始まるコマンドのみが、昇格された特権で実行されます。sudo接頭辞なしで同じコマンドを実行した場合は、再度現在のユーザの特権で実行されます。

4

限られた時間に、rootパスワードを繰り返し入力する必要がなくなります。

ヒント
ヒント: I/Oリダイレクト

I/Oリダイレクトは、多くのユーザが期待している動作と異なります。

tux > sudo echo s > /proc/sysrq-trigger
bash: /proc/sysrq-trigger: Permission denied
tux > sudo cat < /proc/1/maps
bash: /proc/1/maps: Permission denied

昇格された特権で実行されるのはecho/catバイナリのみで、リダイレクトは、ユーザのシェルでユーザ特権を使用して実行されます。2.1.2項 「シェルの起動」で説明しているようにシェルを起動することも、ddユーティリティを使用することもできます。

echo s | sudo dd of=/proc/sysrq-trigger
sudo dd if=/proc/1/maps | cat

2.1.2 シェルの起動

すべてのコマンドの前にsudoを追加するのは煩わしい場合があります。シェルはsudo bashコマンドとして指定できますが、組み込まれたメカニズムのいずれかを使用してシェルを起動することをお勧めします。

sudo -s (<command>)

SHELL環境変数で指定したシェル、またはターゲットユーザのデフォルトのシェルを起動します。コマンドを指定した場合は、コマンドが(-cオプション付き)でシェルに渡されます。そうでない場合は、シェルが対話モードで実行されます。

tux:~ > sudo -i
root's password:
root:/home/tux # exit
tux:~ > 
sudo -i (<command>)

-sと同様ですが、シェルをログインシェルとして起動します。つまり、シェルの起動ファイル(.profileなど)は処理され、現在の作業ディレクトリはターゲットユーザのホームディレクトリに設定されます。

tux:~ > sudo -i
root's password:
root:~ # exit
tux:~ > 

2.1.3 環境変数

デフォルトでは、sudoは環境変数を伝達しません。

tux > ENVVAR=test env | grep ENVVAR
ENVVAR=test
tux > ENVVAR=test sudo env | grep ENVVAR
root's password:
1
tux > 

1

空白の出力は、sudoで実行したコマンドのコンテキストにENVVAR環境変数が存在しなかったことを示しています。

この動作は、env_resetオプションで変更できます。表2.1「有用なフラグとオプション」を参照してください。

2.2 sudoの設定

sudoは、さまざまな設定が可能な、柔軟なツールです。

注記
注記: sudoからのロックアウト

誤ってsudoからロックアウトした場合は、su -rootパスワードを使用してルートシェルを取得してください。エラーを修正するには、visudoを実行します。

2.2.1 設定ファイルの編集

sudo向けの主なポリシー設定ファイルは、/etc/sudoersです。ポリシー設定ファイル内のエラーが原因で、システムからロックアウトされてしまう可能性があるため、編集にvisudoを使用することを強くお勧めします。このコマンドは、開いているファイルが同時に変更されるのを防ぎ、構文エラーがないかどうかも変更の保存前に確認します。

その名前が示唆するのとは異なり、EDITOR環境変数を次のように設定して、vi以外のエディタを使用することもできます。

sudo EDITOR=/usr/bin/nano visudo

ただし、/etc/sudoersファイル自体はシステムパッケージで提供されるため、アップデート時に変更内容が失われてしまう可能性があります。そのため、カスタム設定は、/etc/sudoers.d/ディレクトリ内のファイルに対して行うことをお勧めします。そこにあるファイルは自動的にインクルードされるからです。対象のサブディレクトリでファイルを作成または編集するには、次のコマンドを実行します。

sudo visudo -f /etc/sudoers.d/NAME

または、別のエディタ(nanoなど)を使用します。

sudo EDITOR=/usr/bin/nano visudo -f /etc/sudoers.d/NAME
注記
注記: /etc/sudoers.d内の無視されるファイル

/etc/sudoers.dをインクルードするために使用される/etc/sudoers#includedirコマンドでは、~(チルダ)で終わるファイルや.(ドット)を含むファイルが無視されます。

visudoコマンドの詳細については、man 8 visudoを実行してください。

2.2.2 基本的なsudoersの設定構文

sudoersの設定ファイルには、2種類のオプション(文字列とフラグ)があります。文字列には任意の値を含めることができますが、フラグはONかOFFのいずれかのみです。sudoersの設定ファイルの最も重要な構文構造を次に示します。

# Everything on a line after a # gets ignored 1
Defaults !insults # Disable the insults flag 2
Defaults env_keep += "DISPLAY HOME" # Add DISPLAY and HOME to env_keep
tux ALL = NOPASSWD: /usr/bin/frobnicate, PASSWD: /usr/bin/journalctl 3

1

例外が2つあります。#include#includedirは通常のコマンドです。数値を続けた場合は、UIDを指定します。

2

指定のフラグをONに設定するには、!を削除します。

3

詳細については、2.2.3項 「sudoersのルール」を参照してください。

表 2.1: 有用なフラグとオプション

オプション名

説明

targetpw

このフラグは、呼び出し元のユーザが、ターゲットユーザのパスワード(ON)(rootなど)と、呼び出し元のユーザのパスワード(OFF)のいずれを要求されるかを決定します。

Defaults targetpw # Turn targetpw flag ON
rootpw

設定すると、sudoがターゲットユーザの代わりにrootパスワードか、コマンドを呼び出したユーザのパスワードを要求します。デフォルトは[オフ]です。

Defaults !rootpw # Turn rootpw flag OFF
env_reset

設定すると、sudoが、TERMPATHHOMEMAILSHELLLOGNAMEUSERUSERNAME、 およびSUDO_*が指定された最小限の環境を作成します。また、env_keepに列挙されている変数は、呼び出し元の環境からインポートされます。デフォルトは[ON]です。

Defaults env_reset # Turn env_reset flag ON
env_keep

env_resetフラグがONの場合に保持する環境変数の一覧。

# Set env_keep to contain EDITOR and PROMPT
Defaults env_keep = "EDITOR PROMPT"
Defaults env_keep += "JRE_HOME" # Add JRE_HOME
Defaults env_keep -= "JRE_HOME" # Remove JRE_HOME
env_delete

env_resetフラグがOFFの場合に削除する環境変数の一覧。

# Set env_delete to contain EDITOR and PROMPT
Defaults env_delete = "EDITOR PROMPT"
Defaults env_delete += "JRE_HOME" # Add JRE_HOME
Defaults env_delete -= "JRE_HOME" # Remove JRE_HOME

Defaultsトークンを使用することで、ユーザ、ホスト、およびコマンドのコレクションのエイリアスを作成することもできます。さらに、一連のユーザのみを対象としてオプションを適用することができます。

/etc/sudoers設定ファイルの詳細については、man 5 sudoersを参照してください。

2.2.3 sudoersのルール

sudoersの設定のルールは非常に複雑な場合があるため、このセクションでは、基本的なルールのみを説明します。各ルールは、基本的なスキームに従います([]はオプション部分を示しています)。

#Who      Where         As whom      Tag                What
User_List Host_List = [(User_List)] [NOPASSWD:|PASSWD:] Cmnd_List
sudoersのルールの構文
User_List

1つ以上の(,で区切られた)識別子。ユーザ名、%GROUPNAME形式のグループ、#UID形式のユーザIDを指定します。否定は、!接頭辞で示せます。

Host_List

1つ以上の(,で区切られた)識別子。(完全修飾された)ホスト名またはIPアドレスのいずれかを指定します。否定は、!接頭辞で示せます。通常、Host_ListにはALLを選択します。

NOPASSWD:|PASSWD:

NOPASSWD:の後に、CMDSPECと一致するコマンドを実行すると、パスワードは要求されません。

デフォルトは、PASSWDです。NOPASSWDとPASSWDの両方が同じ行に存在する場合にのみPASSWDを明示的に指定する必要があります。

tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_List

1つ以上の(,で区切られた)指定子。実行ファイルへのパスの後に、使用可能な引数を指定するか、何も指定しません。

/usr/bin/foo     # Anything allowed
/usr/bin/foo bar # Only "/usr/bin/foo bar" allowed
/usr/bin/foo ""  # No arguments allowed

ALLは、User_ListHost_List、およびCmnd_Listとしても使用できます。

パスワードを入力しなくても、tuxがすべてのコマンドをrootとして実行できるようにするルールは次のとおりです。

tux ALL = NOPASSWD: ALL

tuxsystemctl restart apache2を実行できるようにするルールは次のとおりです。

tux ALL = /usr/bin/systemctl restart apache2

tuxwalladminとして引数なしで実行できるようにするルールは次のとおりです。

tux ALL = (admin) /usr/bin/wall ""
警告
警告: 危険な構造

次のような構造は、

ALL ALL = ALL

Defaults targetpwなしでは使用できません。そうしないと、だれでもrootとしてコマンドを実行できるようになってしまいます。

2.3 一般的な用途

簡単なセットアップやデスクトップ環境では、たいていの場合はデフォルトの設定でも十分ですが、カスタム設定を使用すると便利な場合もあります。

2.3.1 rootパスワードなしのsudoの使用

これは、特殊な制限(ユーザXは、rootとしてのみコマンドYを実行できる)がある場合は不可能なことです。それ以外の場合も、コマンドの実行権限にある程度の区別を付けることが推奨されます。慣例では、wheelグループのメンバーは、すべてのコマンドをrootとしてsudoで実行できます。

  1. wheelグループに自分自身を追加します。

    自分のユーザアカウントがまだwheelグループのメンバーでない場合は、sudo usermod -a -G wheel USERNAMEを実行してログアウトした後、再度ログインして追加します。groups USERNAMEを実行して、変更が成功したことを確認します。

  2. 呼び出し元のユーザのパスワード(デフォルト)を使用して認証します。

    visudo(2.2.1項 「設定ファイルの編集」を参照)を使用して/etc/sudoers.d/userpwファイルを作成し、次の文を追加します。

    Defaults !targetpw
  3. 新しいデフォルトのルールを選択します。

    ユーザにパスワードの再入力を求めるかどうかによって、/etc/sudoersの特定行のコメントを解除し、デフォルトのルールをコメントアウトします。

    ## Uncomment to allow members of group wheel to execute any command
    # %wheel ALL=(ALL) ALL
    
    ## Same thing without a password
    # %wheel ALL=(ALL) NOPASSWD: ALL
  4. デフォルトのルールにより厳しい制約を設けます。

    /etc/sudoersの、すべてを許可するルールをコメントアウトするか、削除します。

    ALL     ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!
    警告
    警告: sudoersの危険なルール

    このステップは忘れないでください。忘れると、「すべての」ユーザが「すべての」コマンドをrootとして実行できるようになってしまいます。

  5. 設定をテストします。

    sudoを、wheelのメンバーとして、またはメンバー以外として実行してみてください。

    tux:~ > groups
    users wheel
    tux:~ > sudo id -un
    tux's password:
    root
    wilber:~ > groups
    users
    wilber:~ > sudo id -un
    wilber is not in the sudoers file.  This incident will be reported.

2.3.2 X.Orgアプリケーションでのsudoの使用

グラフィカルアプリケーションをsudoで起動すると、次のエラーが発生します。

tux > sudo xterm
xterm: Xt error: Can't open display: %s
xterm: DISPLAY is not set

YaSTによって、グラフィカルインタフェースの代わりにncursesインタフェースが選択されます。

sudoで開始したアプリケーションでX.Orgを使用するには、DISPLAY環境変数およびXAUTHORITY環境変数を伝達する必要があります。これらの環境変数を設定するには、/etc/sudoers.d/xorgファイル(2.2.1項 「設定ファイルの編集」を参照)を作成して、次の行を追加します。

Defaults env_keep += "DISPLAY XAUTHORITY"

まだ設定されていない場合は、XAUTHORITY変数を次のように設定します。

export XAUTHORITY=~/.Xauthority

これで、X.Orgアプリケーションを通常どおり実行できます。

sudo yast2

2.4 詳細情報

使用可能なコマンドラインスイッチに関する簡単な概要は、sudo --helpを実行して参照できます。解説およびその他の重要な情報はman 8 sudoマニュアルページ、設定に関する説明はman 5 sudoersマニュアルページで参照できます。