コース一覧
LinuC レベル1 102試験対策(LPIC-1対応)
suとsudo

LinuC レベル1 102試験対策(LPIC-1対応)

LinuC レベル1/LPIC-1の102範囲を、シェル、ユーザーとセキュリティ、ネットワーク、システム管理の実機演習と章末問題で固めます。Linuxを安全に運用するための知識とコマンド操作を体系的に身につける25レッスンのコースです。

1
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
2
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
3
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
4
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分

suとsudo

su で root になったのに /sbin のコマンドが見つからない。ハイフンを付けなかっただけです。ここと、sudoers を直接編集してはいけない理由。この回の中心はこの2つです。

ハイフンの有無で、環境が入れ替わるかが決まる

ターミナル

su
su -
su - alice
su -c "systemctl status ssh" alice

引数なしの su は root に切り替わりますが、環境変数は元のユーザーのものを引き継ぎます。カレントディレクトリも変わりません。PATH が一般ユーザーのままなので /sbin 配下のコマンドが見つからず command not found に悩まされる、というのが典型的な症状です。

ハイフンを付けた su - はログインシェルとして起動します。対象ユーザーの .bash_profile や .profile が読み込まれ、PATH も HOME も対象ユーザーのものに切り替わり、カレントディレクトリはそのユーザーのホームになります。su -l や su --login も同じ意味です。管理作業で root になるなら基本は su - です。

su - alice はそのユーザーとしてログインシェルを起動し、su -c "コマンド" は1つのコマンドだけを実行して元のシェルに戻ります。そして su は切り替え先ユーザーのパスワードを要求します。root になりたければ root のパスワードが要ります。

sudo は自分のパスワードで、範囲を限って借りる

sudo は発想が違います。実行者自身のパスワードを入力すると、あらかじめ許可された範囲で他のユーザー、既定では root の権限を借りてコマンドを1つ実行します。root のパスワードを配らずに管理作業を委譲でき、誰がいつ何を実行したかがログに残るのが利点です。

書き方意味
sudo <cmd>root の権限で1つのコマンドを実行
sudo -u alice <cmd>alice の権限で実行
sudo -l自分に許可されているコマンドを一覧表示
sudo -iroot のログインシェルを起動する。su - に近い
sudo -sroot のシェルを起動する。環境は概ね維持される
sudo -kパスワードのキャッシュを破棄する

sudoers は visudo を通す

設定は /etc/sudoers に書きますが、このファイルをエディタで直接開いてはいけません。理由は文法エラーです。sudoers に文法エラーがあると sudo 自体が動かなくなり、root のパスワードを設定していない環境では誰も管理権限を取り戻せなくなります。

visudo はロックを取って一時ファイルを編集させ、保存時に文法検査を通ってからでないと本体に反映しません。エラーがあればその場で警告してやり直させます。visudo -c は文法検査だけを行い、-f でファイルを指定すれば任意のファイルを検査できます。

/etc/sudoers の末尾には通常 #includedir /etc/sudoers.d が書かれていて、/etc/sudoers.d/ 配下が読み込まれます。本体を触らずに設定を足したり消したりできるので、追加はこちらに置きます。追加ファイルを編集するときも visudo -f <パス> を通します。

sudoers の1行は3つに分かれる

プレーンテキスト

alice ALL=(ALL:ALL) ALL
bob ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
%sudo ALL=(ALL:ALL) ALL

並びはユーザー、ホスト=(なれるユーザーとグループ)、コマンドの3つです。1つ目が対象で、先頭に % を付けるとグループを指します。2つ目の ALL= はこの設定が有効なホスト名で、単一サーバーなら ALL にします。丸括弧の中は誰の権限になれるかで、最後がその権限で実行できるコマンドです。コマンドは絶対パスで書きます。

NOPASSWD を付けると、そのコマンドに限りパスワード入力を省けます。ただしここを ALL にすると、そのアカウントを取られた時点で無条件に root を取られます。上の例のように、必要な1つのコマンドまで絞ってください。

管理者権限をまとめて与えるときは、Debian と Ubuntu では sudo グループ、Red Hat 系では wheel グループに入れるのが慣習です。

試験で狙われるところ

su は切り替え先のパスワード、sudo は自分のパスワードを要求します。ハイフンを付けない su は環境変数を引き継ぎます。sudoers は visudo を通します。理由は保存時の文法検査です。グループを指定するときは名前の先頭に % が要ります。

ヒント

ファイルはヒアドキュメントで書けます。cat > /etc/sudoers.d/linuc <<'EOF' から始めて EOF で閉じます

sudoers の1行は「ユーザー ホスト=(実行できるユーザー) コマンド」の順です。パスワードを省くには NOPASSWD: をコマンドの前に置きます

linucops ALL=(ALL) NOPASSWD: ALL の1行で足ります。書いたら visudo -c -f /etc/sudoers.d/linuc で必ず検査してください

  • 1. id linucops で setup が作ったユーザーを確認する
  • 2. cat のヒアドキュメントで /etc/sudoers.d/linuc を作り、linucops に NOPASSWD で全コマンドを許可する行を書く
  • 3. chmod 440 /etc/sudoers.d/linuc で権限を整える
  • 4. visudo -c -f /etc/sudoers.d/linuc で文法検査を通す
  • 5. sudo -u linucops id -un と su - linucops -c "id -un" で切り替わることを確かめる

Linux は使うときに起動します(初回は約102MB通信します)

5 項目で採点します