Linuxのsudoコマンドとは?基本的な使い方と設定ファイル(/etc/sudoers)の編集方法を解説
はじめに:sudoコマンドとは
このガイドでは、sudoコマンドの概要、Linuxでの具体的な使い方、そして設定ファイルの編集方法について詳しく解説します。
Ubuntu Linuxのユーザーなら、「sudo」コマンドを目にしたことがあるのではないでしょうか。sudoは、Linuxマシンの管理者が特定のユーザーやユーザーグループに対して「root」権限を付与できる、非常に便利な機能です。さらに、この権限を1つまたは複数のコマンドだけに限定するよう設定することも可能です。
たとえばUbuntuチームは、デフォルトでrootユーザーによる直接ログインを禁止し、代わりにsudoを使って管理作業を行う方針を採用しています。つまり、Ubuntu Linuxを使用している場合、sudo権限はすでに設定済みで、管理者は完全な「root」権限を持っていることになります。
作業前の注意点
ここからは、自分のマシンにおけるsudo権限の設定方法を詳しく見ていきます。作業を始める前に、重要な注意点があります。本番稼働中のサーバーでは、以下の操作を絶対に試さないでください。まずはテスト環境でこのチュートリアルの例を試し、sudoの挙動に慣れてから本番サーバーへ適用しましょう。sudoは非常に強力なツールであるため、細心の注意を払って扱う必要があります。
sudo設定ファイル(/etc/sudoers)を編集する
「sudo」パッケージはすべての主要なLinuxディストリビューションに標準で同梱されています。そのため、インストール手順は省略し、すぐに設定作業へ進みます。このチュートリアルではRed Hat Linuxマシンを使用します。
まず、rootとしてLinuxマシンにログインし、コマンドラインで以下のコマンドを実行してください:
# visudo
このコマンドを実行すると、マシンのデフォルトエディタ(筆者の環境ではVim)で、/etc/sudoersにあるsudoの設定ファイルが開きます。以下のような記述が見つかる箇所までスクロールしてください:
root ALL=(ALL) ALL
sudo設定の構文の読み方
このsudo設定の構文は、次のように分解して理解できます。
- ユーザー名:sudo権限を設定したい対象のユーザー
- ホスト名:コマンドの実行を許可するホスト。特定のホスト名か、上記の例のように「ALL」(すべてのホスト)を指定
- コマンド:対象ユーザーに管理権限を与えたいコマンド
ユーザーにsudo権限を付与する
それでは実際に設定していきましょう。Vimで先ほどの行までスクロールし、キーボードの「o」キーを押して新しい行を追加します。続いて、以下のテキストを入力してください。「calvin」の部分はご自身のユーザー名に置き換えてください:
calvin ALL=(ALL) ALL
以下のキーの組み合わせで、ファイルを保存して終了します:
ESC :wq
Enterキーを押せば設定が反映されます。これで、ユーザー「calvin」はsudo経由ですべての管理権限を持つことになりました。
設定の動作確認
新しいターミナルウィンドウを開き、sudo権限を付与したユーザーとしてログインします。ユーザー「calvin」としてApacheウェブサーバーを再起動し、権限が正しく設定されているか確認してみましょう:
# sudo /etc/init.d/httpd restart
Password:
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
システムがパスワードの入力を求めてくるので、ご自身のユーザーパスワードを入力してください。これでApacheウェブサーバーが再起動するはずです。同じ要領で、他の管理作業にもsudoを活用できます。
許可するコマンドを限定する
ユーザーに完全な権限を与えることが、必ずしも最善の選択とは限りません。sudoでは、特定のコマンドにのみ管理権限を制限することもできます。
たとえば、ユーザー「calvin」にApacheウェブサーバーの再起動だけを許可したい場合は、visudoコマンドでsudo設定ファイルを開き、先ほど追加した行を以下のように編集します:
calvin ALL=(ALL) /etc/init.d/httpd restart
ファイルを保存して終了し、ユーザー「calvin」としてターミナルにログインします。sudoでApacheを再起動してみてください:
# sudo /etc/init.d/httpd restart
Password:
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
問題なく実行できましたね。次に、ウェブサーバーの停止を試みてみましょう:
# sudo /etc/init.d/httpd stop
Password:
Sorry, user calvin is not allowed to execute '/etc/init.d/httpd stop' as root on commons.
このように、ユーザー「calvin」は許可された操作しか実行できません。sudoersファイルには、カンマ区切りで複数のコマンドを登録できます。たとえば「calvin」にウェブサーバーの停止と再起動の両方を許可したい場合は、設定を以下のようにします:
calvin ALL=(ALL) /etc/init.d/httpd restart,/etc/init.d/httpd stop
改めてウェブサーバーの停止を試みると、今度は正常に実行できるはずです:
# sudo /etc/init.d/httpd stop
Password:
Stopping httpd: [ OK ]
パスワード入力を不要にする(NOPASSWD)
sudoには、パスワードの入力を求められないようにsudo権限を設定できる機能もあります。これは、シェルスクリプトで管理作業を自動化したい場合などに特に便利です。
ただし注意が必要です。共有アカウントで本番マシンにこの設定を行うのは避けましょう。パスワードが第三者の手に渡れば、深刻なトラブルにつながる恐れがあります。この機能は必ず慎重に使用してください。
sudoersファイルを開き、先ほどの行を以下のように編集します:
calvin ALL=(ALL) /etc/init.d/httpd restart NOPASSWD: ALL
設定の末尾にある「NOPASSWD: ALL」は、パスワードの入力を求めずに、割り当てられたコマンドを管理権限で実行することをsudoに指示します。ファイルを保存してエディタを終了し、Apacheを再起動してみてください:
# sudo /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
パスワードを尋ねられることなく、コマンドが実行されました。
まとめ
sudo設定ファイルには、今回紹介した以外にもさまざまなカスタマイズ項目があります。ここで取り上げたのはそのごく一部ですが、sudoを使い始めるための基礎としては十分でしょう。sudoは強力なツールである分、誤った設定はシステム全体に影響を及ぼしかねません。繰り返しになりますが、設定変更の際は十分な注意を払ってください。
-
【findコマンド徹底解説】Linuxでファイルやディレクトリを柔軟に検索する方法
Linuxのfindコマンドは、Linuxシステムにおいて最も重要かつ便利なコマンドの一つです。その名の通り、自分で設定したさまざまな条件や変数に基づいて、Linuxマシン上のファイルを検索できます。パーミッション、ユーザー、グループ、ファイルタイプ、日付、サイズなど、多彩な条件を組み合わせて目的のファイルを見つけられるのが特徴です。この記事では、findコマンドを使ってLinux上でファイルを検索する方法を詳しく解説します。 findコマンドはほとんどのLinuxディストリビューションにデフォルトで搭載されているため、追加でパッケージをインストールする必要はありません。 カレントディレクト
-
HTMLとCSSの初心者向けガイド
今日、私たちのサイトを支えているさまざまなテクノロジーを見つけることができますが、インターネット全体で最も重要な2つのファイルはHTMLとCSSです。はい、複雑なものが必要な場合は、それに対応するためのテクノロジーもさらに必要になります。ただし、単純な個人用Webページを作成するだけの場合は、HTMLとCSSだけで十分です。 基本の紹介 これは、HTMLとCSSの初心者向けガイドであり、簡単なサイトをできるだけ早く作成する方法を示しています。結果は必ずしも「標準に準拠」しているとは限りません。さらに微調整して拡張したい場合は、自分で読む必要があります。ただし、これはサイトであり、ほとんどのブ