2 sudoの基本 #
  特定のコマンドを実行するには、root特権が必要です。ただし、セキュリティ上の理由のため、また間違いを避けるため、rootとしてログインすることは推奨されません。より安全な方法は、通常のユーザとしてログインしてから、sudoを使用して昇格された特権でコマンドを実行することです。
 
SUSE Linux Enterprise Serverでは、sudoはsuと同様に機能するように設定されています。ただし、sudoには、ユーザが他のユーザの特権でコマンドを実行できるようにする柔軟なメカニズムがあります。このコマンドを使用して、指定の特権を持つ役割を特定のユーザとグループに割り当てることができます。たとえば、usersグループのメンバーが、wilberユーザの特権でコマンドを実行できるようにすることができます。コマンドへのアクセスは、コマンドオプションを禁止することにより、さらに制限できます。suでは、PAMを使用した認証で常にrootパスワードを必要としますが、sudoでは、ユーザの資格情報を使用して認証するように設定できます。すなわち、ユーザはrootパスワードを共有する必要がなく、セキュリティが向上します。
 
2.1 sudoの基本的な使用方法 #
   次の章では、sudoの基本的な使用方法の概要について説明します。
  
2.1.1 単一コマンドの実行 #
    標準ユーザは、コマンドの前にsudoを追加することで、任意のコマンドをrootとして実行できます。これにより、rootパスワードを入力するように求められます。正常に認証されたら、rootとしてコマンドが実行されます。
   
>id -un1 tux>sudoid -unroot's password:2 root>id -untux3>sudoid -un4 root
| 
 | |
| 入力時には、パスワードは表示されません(クリアテキストとしてだけでなく、マスク文字としても表示されません)。 | |
| 
 | |
| 
      昇格された特権は特定の期間保持されるため、再び | 
sudoの使用時に、I/Oリダイレクトは機能しません。
    
>sudoecho s > /proc/sysrq-trigger bash: /proc/sysrq-trigger: Permission denied>sudocat < /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 -s root's password:- root:/home/tux #exit- tux:~ >
- sudo -i (<command>)
- -sと同様ですが、シェルはログインシェルとして起動します。つまり、シェルの起動ファイル(- .profileなど)は処理され、現在の作業ディレクトリはターゲットユーザのホームディレクトリに設定されます。- tux:~ >sudo -i root's password:- root:~ #exit- tux:~ >
2.2 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の#includedirディレクティブは、~ (チルダ)で終わるファイル、または. (ドット)を含むファイルを無視します。
    
visudoコマンドの詳細については、man 8 visudoを実行してください。
   
2.2.2 基本的なsudoersの設定構文 #
sudoersの設定ファイルには、2種類のオプション(文字列とフラグ)があります。文字列には任意の値を含めることができますが、フラグはONかOFFのいずれかのみです。sudoersの設定ファイルの最も重要な構文構造は次のとおりです。
# Everything on a line after # is 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
| 
      例外が2つあります。 | |
| 
      指定のフラグをONに設定するには、 | |
| 2.2.3項 「基本的なsudoersのルール」を参照してください。 | 
- 
targetpw
- このフラグは、呼び出し元のユーザが、ターゲットユーザのパスワード(ON)( - rootなど)と、呼び出し元のユーザのパスワード(OFF)のいずれを要求されるかを決定します。- Defaults targetpw # Turn targetpw flag ON 
- 
rootpw
- 設定すると、 - sudoは、- rootパスワードを要求します。デフォルトは[オフ]です。- Defaults !rootpw # Turn rootpw flag OFF 
- 
env_reset
- 設定すると、 - sudoが、- TERM、- PATH、- HOME、- MAIL、- SHELL、- LOGNAME、- USER、- USERNAME、および- 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のルール #
    各ルールは、次のスキームに従います([]はオプション部分を示しています)。
   
#Who Where As whom Tag What User_List Host_List = [(User_List)] [NOPASSWD:|PASSWD:] Cmnd_List
- User_List
- 1つ以上の(,コンマで区切られた)識別子。ユーザ名、 - %GROUPNAME形式のグループ、- #UID形式のユーザIDを指定します。否定は- !prefix.
- Host_List
- 1つ以上の(コンマで区切られた)識別子。(完全修飾された)ホスト名またはIPアドレスのいずれかを指定します。否定は - !prefix.通常、- Host_Listには- ALLを選択します。
- NOPASSWD:|PASSWD:
- NOPASSWD:の後に、- Cmd_Listと一致するコマンドを実行すると、パスワードは要求されません。- PASSWDはデフォルトです。- PASSWDと- NOPASSWDの両方が同じ行に存在する場合にのみ指定する必要があります。- 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_List、Host_List、およびCmnd_Listとしても使用できます。
   
    パスワードを入力しなくても、tuxがすべてのコマンドをrootとして実行できるようにするルールは次のとおりです。
   
tux ALL = NOPASSWD: ALL
tuxがsystemctl restart apache2を実行できるようにするルールは次のとおりです。
   
tux ALL = /usr/bin/systemctl restart apache2
tuxがwallをadminとして引数なしで実行できるようにするルールは次のとおりです。
   
tux ALL = (admin) /usr/bin/wall ""
Defaults targetpwなしで、ALL ALL = ALLのようなルールを使用「しないでください」。そうしないと、だれでもrootとしてコマンドを実行できるようになります。
    
sudoersファイルでグループ名を指定する場合は、レルムの代わりにNetBIOSドメイン名を使用するようにしてください。次に例を示します。
   
%DOMAIN\\GROUP_NAME ALL = (ALL) ALL
   winbinddを使用する場合、この形式は、smb.confファイルのwinbind separatorオプションによっても異なることに注意してください。デフォルトでは、\です。たとえば、+に変更された場合、sudoersファイルのアカウント形式はDOMAIN+GROUP_NAMEである必要があります。
   
2.3 sudoの使用例 #
デフォルト設定は標準的な使用シナリオで機能しますが、特定のニーズに合わせてデフォルト設定をカスタマイズできます。
2.3.1 rootパスワードなしのsudoの使用 #
    設計では、wheelグループのメンバーは、すべてのコマンドをrootとしてsudoで実行できます。次の手順では、wheelグループにユーザアカウントを追加する方法について説明します。
   
- ユーザアカウントを - wheelグループに追加します。- ユーザアカウントがまだ - wheelグループのメンバーではない場合、- sudo usermod -a -G wheel USERNAMEコマンドを使用して追加します。ログアウトしてからもう一度ログインして、変更を有効にします。- groups USERNAMEコマンドを実行して、変更が成功したことを確認します。
- ユーザアカウントの通常のパスワードで認証します。 - visudoコマンド(2.2.1項 「設定ファイルの編集」を参照)を使用して、- /etc/sudoers.d/userpwファイルを作成し、次を追加します。- Defaults !targetpw 
- 新しいデフォルトのルールを選択します。 - ユーザにパスワードの再入力を求めるかどうかによって、 - /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 
- デフォルトのルールにより厳しい制約を設けます。 - /etc/sudoersの、すべてを許可するルールをコメントアウトするか、削除します。- ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'! 警告: sudoersの危険なルール- このステップはスキップしないでください。そうしないと、「すべての」ユーザが「すべての」コマンドを - rootとして実行できるようになってしまいます。
- 設定をテストします。 - 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で起動すると、通常、次のエラーが発生します。
   
>sudoxterm xterm: Xt error: Can't open display: %s xterm: DISPLAY is not set
簡単な回避策は、xhostを使用して、ルートユーザがローカルユーザのXセッションに一時的にアクセスできるようにすることです。これは、次のコマンドを使用して実行されます。
xhost si:localuser:root
次のコマンドは許可されたアクセスを削除します。
xhost -si:localuser:root
ルート特権でグラフィカルアプリケーションを実行すると、セキュリティに影響を与えます。例外としてのみグラフィカルアプリケーションのルートアクセスを有効にすることをお勧めします。グラフィカルアプリケーションが閉じられたらすぐに、許可されたルートアクセスを取り消すことも推奨されます。
2.4 詳細情報 #
sudo --helpコマンドは、使用可能なコマンドラインオプションの簡単な概要を提供し、man sudoersコマンドは、sudoersとその設定に関する詳細情報を提供します。