不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

LinuCレベル1取得に向け勉強中:第8章 システム管理

2020-10-12 00:43:39 | LinuC
LinuCレベル1合格教本で、勉強を進める。
今回は、『第8章 システム管理』である。

8.1 アカウント管理

8.1.1 ユーザーの追加


表8.1 主なユーザー管理コマンド
コマンド
意味
コマンド
意味
useraddユーザーの追加groupaddグループの追加
usermodユーザーの編集groupmodグループの編集
userdelユーザーの削除groupdelグループの削除
passwdパスワードの設定idユーザーとグループのID情報を表示
  • useradd [オプション] ユーザー名:ユーザーを追加
    -u UID:ユーザーIDを指定
    -g グループ名/GID:主グループを指定
    -G グループ名/GID:補助グループを指定
    -c コメント:コメントを指定
    -d ディレクトリ名:ホームディレクトリを指定
    -s パス:ログインシェルを指定
    -m:ホームディレクトリを作成
  • passwd [オプション] [ユーザー名]:パスワードを設定
  • ユーザー追加時にホームディレクトリが作成される際、/etc/skel/ディレクトリの内容を参照して中にあるファイルやサブディレクトリをコピーする。
  • Debian環境(Ubuntu含む)では、-mオプションを指定せずにuseraddコマンドでユーザーを追加すると、ホームディレクトリを生成しない。

8.1.2 グループとユーザーの管理

  • ユーザーはあるグループに対して、主グループ(プライマリグループ)もしくは補助グループ(セカンダリグループ、サブグループ)として所属できる。
  • id [オプション] ユーザー名:指定したユーザーのID情報を表示
  • ユーザー追加時に主グループを指定していなかった場合、ユーザー名と同じ名前のグループ(プライベートグループ)が生成され、そのグループに所属することになる。
  • groupadd [オプション] グループ名:グループを追加
    -g GID:グループID(GID)を指定
  • usermod [オプション] ユーザー名:ユーザーの設定を変更
    -u UID:ユーザーIDを指定
    -g グループ名/GID:主グループを指定
    -G グループ名/GID:補助グループを指定
    -c コメント:コメントを指定
    -d ディレクトリ名:ホームディレクトリを指定
    -s パス:ログインシェルを指定
    -l 新ユーザー名:ユーザー名を指定(新ユーザー名に変更)
    -a:-Gを併用し、補助グループを追加
  • groupmod [オプション] グループ名:グループの設定を変更
    -g GID:グループID(GID)を指定
    -n 新グループ名:グループ名を指定(新グループ名に変更)

8.1.3 ユーザーとグループの削除

  • userdel [オプション] ユーザー名:ユーザーを削除
    -r(--remove):ホームディレクトリも削除
    -f(--force):ログイン中のユーザーを削除
  • groupdel [オプション] グループ名:グループを削除
    • ユーザーが1人でもそのグループを主グループとして所属するよう設定されている場合、そのグループは削除できない。

8.1.4 ユーザーとグループの設定ファイル

  • etcディレクトリのpasswd, shadow, groupファイルのそれぞれの列(フィールド)には以下の情報が格納されている。

図8.3 /etc/passwdファイルの内容
/etc/passwd:ユーザー情報を保持
test01:x:1001:2000::/home/test01:/bin/bash
①       ②  ③     ④  ⑤            ⑥         ⑦
コマンド
項目
説明
ユーザーユーザー名
パスワードパスワード欄。現在では/etc/shadowで管理
UIDユーザーに割り当てられているID
GIDユーザーが主グループとして所属しているグループのID
コメントユーザーの本名などを記憶できる
ホームディレクトリユーザーのホームディレクトリ
ログインシェルユーザーが利用するシェル

  • /etc/default/useraddの確認
[root@centos7 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

  • vipw:passwdファイルの編集

図8.4 /etc/shadowファイルの内容
/etc/shadow:パスワード情報を保存。一般ユーザーは参照不可。
test01:$6$HTUBwjdV$w7dlKDg/3KRz7...:17952:0:99999:7:::
①                    ②                                         ③     ④  ⑤    ⑥⑦⑧⑨
コマンド
項目
説明
ユーザーユーザー名
パスワードハッシュ化されたパスワード
最終変更日1970/1/1からの通算日数
変更可能最短日数0だといつでもパスワード変更可能
パスワード有効期限いつまで同じパスワードを使い続けられるか
警告日有効期限の何日前に警告を表示するか
使用不可になるまでの日数パスワードの有効期限が経過してからアカウントが使用不可になるまでの日数
アカウント有効期限ユーザーアカウントの有効期限
予約フィールド将来的に使用できるフィールドとして予約

図8.5 /etc/groupファイルの内容
/etc/group:グループ情報を保持
sales:x:2000:test02
①     ②  ③     ④
コマンド
項目
説明
グループグループ名
パスワードグループに割り当てられているパスワード
GIDグループに割り当てられているID
所属メンバーサブグループとして所属しているユーザー

  • getent データベース [エントリ]:NSSライブラリのエントリを出力
    • データベース:出力したい内容を指定
      passwd, shadow, group:それぞれのファイルの内容(第2引数にアカウント名を指定して特定のアカウントの情報を出力するよう指定できる)
      hosts:hostsファイルの内容(第2引数にホスト名を指定して、名前解決に利用できる)

8.2 ジョブ管理

8.2.1 cronによるジョブスケジューリング

  • Linuxでは、次の2つの仕組みでジョブをスケジュール管理できる。
    • cron(anacron):定期的に繰り返すジョブを管理
    • at:一度だけ実行するジョブを管理
  • crontab オプション:cronジョブの編集
    -e:cronジョブの追加、編集
    -l:cronジョブの表示
    -r:cronジョブの削除
図8.6 crontabファイルの書式
crontabファイル:cronジョブを登録
31 10 *  *  *     touch /root/crontest.txt
①  ②③④⑤            ⑥
コマンド
項目
既定値
0〜59
0〜23
1〜31
1〜12/jan〜dec
曜日0〜7/sun〜sat
0と7は日曜日
実行する処理実行するコマンドを1行で設定
実用的にはスクリプトを指定

図8.7 crontabで利用できる主な書式
0 23 *  *  1-5    /testbin/backup.sh
→「-」で連続した値を指定。
この例は月曜日から金曜日の23時ちょうどにスクリプトを実行。

0,15,50 * * * * /testbin/sample.sh
→「,」で複数の値を指定。
この例は毎時0分、15分、50分にスクリプトを実行。

0 4 */2 * * /testbin/ntpdate.sh
→「*/数字」で、「〜に1度」という値を指定。
この例は2日に1度、4時ちょうどにスクリプトを実行。
  • /var/spool/cron/rootファイルにもcronジョブの内容が登録される。
  • cronジョブを操作するための設定ファイル。
    • /var/spool/cron/ユーザー名
    • /etc/crontab
    • /etc/cron.d/ディレクトリ
表8.2 システムが参照するcronジョブ用のディレクトリ
  • etc/cron.hourly/:1時間に1回
  • etc/cron.daily/:1日に1回
  • etc/cron.weekly/:1週間に1回
  • etc/cron.monthly/:1ヶ月に1回
※ 突然、CentOSのrootアカウントに入れなくなった。
色々試行錯誤してたら、以下のコマンドを試すよう言われたので、実行したところ、root権限でログインすることに成功。
その後、passwdでパスワードを設定し直したら、正常に戻った。
  • abrt-cli list --since 1602298603

8.2.2 anacronによるジョブスケジューリング

  • CentOS環境にも、表8.2のディレクトリは存在するが、/etc/crontabにジョブの実行についての設定は書かれていない。
    →その代わりに、/etc/anacrontabというファイルにジョブの実行についての設定が書かれている。
表8.3 cronとanacronの違い
cron
anacron
  • crondが常駐して実行
  • システム起動中、指定したタイミングでジョブを実行
例:3時ちょうどに実行されるよう登録されている場合、その時刻に起動していなければならない
  • cron経由で実行(anacronは常駐しない)
  • システム起動中、適当なタイミングでジョブを実行
例:起動後、1時間に1度、anacronが実行され、未実行だったジョブを実行
 

8.2.3 atによるジョブスケジューリング

  • at [オプション] 時刻:atジョブの編集
    • 主なオプション
      -f ファイル:指定したファイルの内容を実行
      -l:atジョブの一覧表示(=atqと同じ)
      -c ジョブ番号:指定したatジョブの内容を表示
      -r ジョブ番号:atジョブの削除(=atrmと同じ)
    • 引数:時刻の書式
      23:30:その日の23時30分に実行
      4pm + 1 days:翌日の午後4時ちょうどに実行
      noon Jul 31:7月31日の正午に実行


8.2.4 cronとatのアクセス制御

  • cronとatのアクセス制御ファイル
    • /etc/cron.allow,/etc/at.allow:ファイル内に記述されたユーザーのみ利用可能
    • /etc/cron.deny,/etc/at.deny:ファイル内に記述されていないユーザーのみ利用可能
    • どちらのファイルもない:rootユーザーのみ利用可能

8.3 ローカライゼーションと国際化

8.3.1 i18n

  • ソフトウェアを様々な言語環境で利用できるようにすることを国際化(internationalization; i18n)という。


8.3.2 ロケール


表8.4 主なロケール関係の変数
変数意味
LANGすべての項目に使用するロケール
LC_ALLすべての項目に使用するロケール
LC_MESSAGESメッセージに使用するロケール
LC_TIME日時に使用するロケール
LC_MONETARY通貨記号など、金額の表示に使用するロケール

  • locale [オプション]:ロケール情報を確認
    -a:設定できる値を全て表示
表8.5 設定可能な主なロケール
変数意味
CCロケール(POSIX準拠のロケール、英語で表記)
en_US.utf8言語:英語、地域:アメリカ、文字コード:UTF-8
ja_JP.utf8言語:日本語、地域:日本、文字コード:UTF-8

  • export LANG=C:すべての表示項目がCになる。
  • ロケールの設定ファイル
    • Red Hat系(CentOSなど):/etc/locale.conf
    • Debian系:/etc/default/locale(dpkg-reconfigure localesで編集可能)

8.3.3 文字コードの変換


表8.6 主な文字コード
文字コード用途
ASCIIアルファベットや数字などの1バイト文字を表現
Shift-JIS日本語用文字コード。Windows環境などで利用
EUC日本語用文字コード。古いUNIX環境などで利用
UTF-8世界中の文字を表現するためのUnicodeの文字符号化形式の一種。
最近のLinux環境では一般的

  • iconv [オプション] [ファイル名]:文字コードの変換
    -f 文字コード:変換対象となる文字コードを指定(fromの頭文字)
    -t 文字コード:変換後の文字コードを指定(toの頭文字)
    -l:指定できる文字コードの一覧を表示
 

演習問題  

  1. A→◯
  2. C→❌A
  3. groupadd→◯
  4. B,D→◯
  5. A→❌B
  6. C→◯
  7. B→❌D
  8. A→◯
  9. /etc/cron.allow→◯
  10. A,C→◯
  11. locale→◯
  12. C→◯
9/12=0.75(75%)
もうちょい点は増やせたかな?😅