Linuxのsudoコマンドとは?基本の使い方とsuとの違いを徹底解説
人気Webコミック「XKCD」のある作品に、こんなエピソードがあります。椅子にもたれる怠け者が友人にサンドイッチを作るよう頼みますが、相手には従う義務がありません。ところが、強力なsudoコマンドを使った瞬間、状況は一変。「いずれにせよサンドイッチは作られる」ことになるのです。
現実の人間に対してsudoを実行しても効果はありませんが、Linuxの世界では、このコマンドこそがあらゆる障壁を突破する魔法のコマンドです。そもそもsudoとは何なのでしょうか?なぜ存在するのでしょうか?その答えは、Linuxがパーミッション(権限)を扱う仕組みにあります。
Linuxのユーザー権限を理解する
LinuxがセキュアなOSとされるのは、権限の扱い方に理由があります。macOS(Linuxと共通の祖先を持つ)やWindowsも現在ではLinuxに近い方式を採用していますが、オープンソースOSであるLinuxのアプローチは今なお独特です。
Linuxの権限管理の仕組みを理解すれば、sudoコマンドの役割もぐっと把握しやすくなります。すべての現代OSには「管理者」あるいは「root」と呼ばれる最高権限のユーザーレベルが存在します。管理者アカウントやrootアカウントを持っていれば、あらゆる設定を変更し、どんなデータでも削除でき、コンピュータに対して自由に何でもできる状態になります。
しかし、それには本来やってはいけない操作——データ損失やOSの完全な初期化・再インストールにつながりかねない危険な操作——も含まれます。
Linuxでは、rootレベルの権限がデフォルトで付与されることはありません。代わりに、通常のアカウントではシステムの重要な領域にアクセスできないようになっており、特別な操作を行う際にはGUI経由で管理者パスワードの入力を求められます。
一方、ターミナルのコマンドラインで作業を行いたい場合、sudoこそが最も安全かつ効率的な方法なのです。
sudoとターミナルの関係
Linuxで昇格した権限を得る方法は大きく分けて2つあります。1つはrootユーザーとして常時ログインする方法です。しかしこの方法には問題があります。コンピュータにアクセスできる他の誰かが重大な被害をもたらす可能性があり、自分自身が誤ってシステムを壊してしまうリスクもあるのです。
そこで登場するのがsudoです。sudoは、直後に続く特定のコマンドを実行する間だけ、短時間権限を昇格させます。必要なときにだけ、必要な範囲で権限を借りられる仕組みです。
sudoの基本構文
sudoの構文(コマンドの書式)は非常にシンプルです。「sudo」に続けて実行したいコマンドを入力するだけです。
例えば「sudo apt-get update」を実行すると、設定ファイルに記載されたアプリのリポジトリ情報がすべて更新されます。sudoなしで実行すると、「権限がありません」というエラーメッセージが表示されるでしょう。ちなみに、これはお気に入りのLinuxディストリビューションを新規インストールした後に最初に実行しておきたいsudoコマンドでもあります。
sudoの「su」の意味
sudoの「su」は「superuser(スーパーユーザー)」の略で、実は単独のコマンドとしても存在します。suコマンドを使うと、sudoが昇格させる対象のユーザー権限を切り替えられます。
sudoが一時的にrootへ昇格させるのに対し、suは適切な権限を持つ別のユーザーへとアカウント自体を切り替えます。些細な違いに思えるかもしれませんが、sudoの昇格先アカウントを変更することには明確なメリットがあります。
第一に、昇格先を変更することで、一般ユーザーはrootのパスワードを知る必要がなくなります。第二に、sudoコマンドの実行履歴はすべてログに記録されるため、システム管理者(root)は誰がsuコマンドを実行したのかを後から確認できます。
suの構文は基本的にsudoと同じです。
su USERNAME -c COMMAND
USERNAMEにはコマンドを実行したいユーザー名を、COMMANDには実行したいLinuxコマンドを指定します。
別のユーザーとして複数のコマンドを連続して実行したい場合は、次のようにします。
su USER
USERには切り替え先のユーザーアカウント名を指定してください。
suを単独で使うと、「exit」コマンドを実行するまで、そのまま別のユーザーアカウントに切り替わった状態が続きます。これを忘れると、同じ端末セッションを次に使った人(または自分自身)が昇格した権限を持ったままになってしまうため注意が必要です。こうしたリスクを考えると、suよりもsudoを使う方が一般的に安全だといえます。
sudoのパスワード有効時間(タイムアウト)
初めてsudoコマンドを使う際にはパスワードの入力が求められます。一度入力すると、そのパスワードはデフォルトで15分間有効になります。この既定値は「sudo visudo」コマンドを実行し、「timestamp_timeout=」の値を変更することで長くも短くも調整可能です。ただし、特段の理由がない限り、この設定を変更することはおすすめしません。
覚えておきたいsudoのオプション
sudoの構文はシンプルですが、知っておくと便利なスイッチ(オプション)がいくつかあります。追加情報の表示やsudoセッションの制御に役立ちます。
- -h:sudoの構文やコマンドに関するヘルプ情報を表示する
- -V:マシンにインストールされているsudoのバージョンを表示する
- -v:sudoのタイムスタンプを更新し、有効時間のカウントをリセットする
- -l:現在のユーザーの権限一覧を表示する
- -k:現在のsudoセッションを即座に終了し、昇格した権限を破棄する
sudoには他にも多数のオプションが用意されており、上記の-hスイッチで全容を確認できます。
上のスクリーンショットは、ヘルプオプションを使用した際の表示結果です。
知っておきたい便利なsudoコマンド
では、どのsudoコマンドをすべてのLinuxユーザーが知っておくべきでしょうか?「sudo apt-get update」はすでに紹介しましたが、以下のコマンドも合わせて覚えておきましょう。
- sudo apt-get upgrade:インストール済みの全パッケージをアップグレードする
- sudo apt-get install <パッケージ名>:任意のソフトウェアをインストールする。パッケージ名を目的のものに置き換えて使用する
- パッケージ名がわからない場合は、dpkg --listでインストール済みパッケージの一覧を確認できる
- ターミナルからインストール済みパッケージを削除したい場合は、sudo apt-get remove <パッケージ名>を使用する(こちらも実際のパッケージ名に置き換える)
これらはおそらく最初に使うことになるsudoコマンドですが、前述のとおり、sudoの後には任意のコマンドを続けられます。ただし、昇格した権限が本当に必要なコマンドだけをsudoと組み合わせるようにしましょう。それが安全なLinux運用への第一歩です。
-
Linuxのteeコマンド使い方ガイド|画面表示とファイル保存を同時に実現
Linuxシェルでパイプやリダイレクトを使っているなら、teeコマンドの出番もきっとあるはずです。teeは「標準出力に表示しながら、同時にファイルにも書き込む」ことができる便利なユーティリティです。この記事では、teeコマンドの基本操作から、sudoとの組み合わせ、追記モード、エラー出力の扱い方まで、実例を交えながら詳しく解説します。 teeコマンドとは何をするもの? まず、次のようなコマンドを見てみましょう。 ls このコマンドは、現在のディレクトリの内容を表示します。つまり、標準出力(stdout)へ出力するわけです。標準出力とは通常、画面、正確には仮想端末のディスプレイのことです
-
LinuxとmacOSでfdコマンドを使ってファイルを素早く検索する方法
fdは、従来のfindコマンドのシンプルな代替ツールです。簡潔な構文と短いコマンド体系を採用しており、入力の手間を大幅に減らせるのが特徴です。ただし、その簡潔さゆえに、初めて見たときには意味が分かりにくいという側面もあります。さらにfdは、標準のfindコマンドよりもパターンマッチングを高速に実行できる点も魅力です。この記事では、LinuxおよびmacOSでfdを使う方法を詳しく解説します。 Linuxへのfdのインストール fdは、デフォルトでインストールされているシステムは多くありません。お好みのパッケージマネージャーでダウンロード・インストールすれば、ターミナルからすぐに利用できるよう