amarron2’s blog

linuxや資格関係の記事を書きます。基本自分用のメモです。

102-3. 管理業務

  1. ユーザアカウント、グループアカウント、および関連するシステムファイルを管理する
    • ユーザーアカウント情報は「/etc/passwd」ファイルに保存されている
    • グループ情報は「/etc/group」ファイルに保存されている
    • 「useradd」コマンドでユーザーアカウントを追加、「usermod」で変更、「userdel」で削除(-rオプションでホームディレクトリも同時に削除)
    • 「groupadd」コマンドでグループを追加、「groupmod」で変更、「groupdel」で削除(プライマリグループとするユーザーがいる場合削除出来ない)
    • 「id」コマンドで所属しているユーザーを調べられる
    • 「/etc/shadow」ファイルに暗号化されたユーザーアカウントのパスワードが保存されている
  2. ジョブスケジューリングによるシステム管理業務の自動化
    • 定期的に実施する作業(バックアップやログ管理等)を自動的に実行できる
      • cron:定期的に実行するジョブ(crondとcrontabコマンドから構成されている)
      • at:1回のみ実行するジョブ
    • ユーザ単位でアクセス制御が可能
      • cron:「/etc/cron.allow」、「/etc/cron.deny」で制御可能
        • allow→denyの順で利用可能(両方共ない場合、全ユーザが利用可能)
      • at:「/etc/at.allow」、「/etc/at.deny」で制御可能
        • allow→denyの順で利用可能(両方共ない場合、rootユーザーのみ利用可能)
  3. ローカライゼーションと国際化
    • ローカライゼーションとは、言語や通貨単位、日付の書式を国に合わせること
    • 国際化とは、最初から多言語、他地域に対応するようにソフトウェアが作られていること
    • 「locale」コマンドでロケール設定を確認できる
      • 「/etc/sysconfig/i18n」ファイルを変更すると次回のログイン時に変更される
    • 「iconv」コマンドで文字コードを変更できる
    • 「/usr/share/zoneinfo」ディレクトリ以下のバイナリファイルにタイムゾーンの情報が格納されている
      • 「cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime」で東京のタイムゾーンにできる

1. ユーザアカウント、グループアカウント、および関連するシステムファイルを管理する

  • Linuxは複数のユーザーが同時に利用できるマルチユーザーシステム
  • ユーザー情報はテキストファイルに保存されている

ユーザーアカウント

  • ユーザーアカウント情報は「/etc/passwd」ファイルに保存されている
    • 1行につき1ユーザーアカウント
    • 項目は「:」で区切られている
/etc/passwdの書式例)
student:x:501:503::/home/student:/bin/bash
①       ②  ③   ④  ⑤    ⑥            ⑦
①ユーザー名:システム内で一意のアカウント名
②パスワード:シャドウパスワードが使われているので「x」が表示される
③UID:ユーザーID(0:管理ユーザー、1~99:システムユーザー、100〜:一般ユーザー)
④GID:グループID(「/etc/group」ファイルに定義されている)
⑤GECOS:コメント
⑥ホームディレクトリ
⑦デフォルトシェル

グループアカウント

  • グループ情報は「/etc/group」ファイルに保存されている
    • ユーザーは複数のグループに所属できる
      • プライマリグループ:ユーザーにとって基本となるグループ
      • サブグループ:ユーザーが参加しているグループ
/etc/groupの書式例)
test:x:502:student,lpic
①    ②  ③   ④
①グループ名
②グループパスワード
③GID:グループID
④グループメンバー:所属するユーザー名が入る、複数所属する場合「,」で区切られる

コマンドを用いたユーザーとグループ管理

ユーザー

  • 「useradd」コマンドでユーザーアカウントを作成できる

useradd [オプション] ユーザー名

オプション 説明
-c コメント コメントフィールドを指定
-d パス ホームディレクトリを指定
-g グループ名/GID プライマリグループを指定
-G グループ名/GID サブグループを指定
-s パス ログインシェルを指定
-D デフォルトの設定値を表示または設定
-m ホームディレクトリを自動作成
ユーザー作成例)
# useradd -c "lpic user" -d /home/lpic -s /bin/bash lpicuser
  • 「usermod」コマンドで既存ユーザーアカウントを変更できる

usermod [オプション] ユーザー名

オプション 説明
-c コメント コメントフィールドを変更
-d パス ホームディレクトリを変更
-g グループ名/GID プライマリグループを変更
-G グループ名/GID サブグループを変更
-s パス ログインシェルを変更
-L パスワードをロックして一時的に無効化
-U パスワードのロック解除
  • 「userdel」コマンドでユーザーアカウントを削除できる

userdel [オプション] ユーザー名

オプション 説明
-r ホームディレクトリも同時に削除
  • 「passwd」コマンドでパスワードを変更できる
    • スーパーユーザーの場合、全ユーザーのパスワードを変更できる
    • 一般ユーザーの場合、自分のパスワードのみ変更できる

passwd [オプション] [ユーザー名]

オプション 説明
-l パスワードをロックして一時的に無効化
-u パスワードのロック解除

グループ

  • 「groupadd」コマンドでグループを作成できる

groupadd グループ名

  • 「groupmod」コマンドでグループ情報を変更できる

groupmod グループ名

オプション 説明
-g GID GIDを変更
-n グループ名 グループ名を変更
  • 「groupdel」コマンドでグループを削除できる
    • 削除対象グループをプライマリグループとするユーザーがいる場合削除出来ない

groupdel グループ名

  • 「id」コマンドで所属しているユーザーを調べられる

id [ユーザー名]

idコマンドの使用例)
[vagrant@localhost ~]$ id student
uid=501(student) gid=503(student) 所属グループ=503(student),502(test)

ホームディレクトリのデフォルトファイル

  • ユーザーアカウントを作成するとホームディレクトリも作成される
  • ホームディレクトリ作成時、どのユーザーにも必要なファイルも同時に配布できると便利
    • 「/etc/skel」配下に雛形ファイル(スケルトンファイル)を格納するとホームディレクトリ作成時にホームディレクトリに雛形ファイルがコピーされる

シャドウパスワード

  • 「/etc/shadow」ファイルに暗号化されたユーザーアカウントのパスワードが保存されている
[vagrant@localhost ~]$ ls -l /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 1307 8月  8 08:35 2015 /etc/passwd
---------- 1 root root  802 8月  8 08:35 2015 /etc/shadow
[vagrant@localhost ~]$ 

2. ジョブスケジューリングによるシステム管理業務の自動化

  • 定期的に実施する作業(バックアップやログ管理等)を自動的に実行できる
    • cron:定期的に実行するジョブ
    • at:1回のみ実行するジョブ

cron

  • cronは、crondとcrontabコマンドから構成されている
    • crond:スケジュール管理するデーモン
    • crontab:スケジューリングを編集する

crontab(ユーザー)

  • 「/var/spool/cron」ディレクトリ以下に「crontab」ファイルが置かれている(hogeというユーザーの場合、/var/spool/cron/hogeになる)
  • ジョブを変更する場合、「crontab」ファイルの変更、または「crontab」コマンドで変更する

crontab [オプション]

オプション 説明
-e crontabファイルを編集
-l crontabファイルの表示
-r crontabファイルの削除
-i crontabファイルの削除(確認有り)
-u ユーザー名 ユーザーを指定してcrontabファイルを編集(rootユーザーのみ)
crontabファイルの書式)
# Daily Backup(毎日、2時と14時に「/usr/local/bin/backup」プログラムを実行)
0  2,14  *  *  *  /usr/local/bin/backup
分 時 日 月 曜日 コマンド
- 曜日:0~6(日〜土曜日)、7も日曜日
- 「,」で区切ると複数のタイミングで処理を実行する
- 「/」で区切ると間隔で実行できる(「* */2 * * hoge.sh」の場合、2時間ごとに実行される)

crontab(システム)

  • 「/etc/crontab」ファイルは、システム用のcrontabファイル
    • 「/etc/crontab」ファイルは「/etc/cron.*」ディレクトリ内のファイルを呼び出す
    • 「/etc/crontab」ファイルの書式は、ユーザー用crontabファイルにユーザー名を追加した形式
  • 毎月スクリプトを実行したい場合、「/etc/cron.monthly/」ディレクトリにスクリプトファイルを置く(毎時:cron.hourly、毎日:cron.daily、毎週:cron.weekly、それ以外:cron.d)
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

atコマンド

  • 「at」コマンドで1回限りの実行スケジュールを登録できる
  • 登録方法には「対話式」と「ファイル指定」がある

対話式

at [オプション]

オプション 説明
-d ジョブ 予約中のジョブIDを指定し削除(「atrm」コマンドと同じ)
-l 予約中のジョブを表示(「atq」コマンドと同じ)
スケジュール登録例)
$ at 5:00 tomorrow
at> /usr/local/bin/backup
at> ^D # Ctr+Dで対話終了

ファイル指定

at [-f ファイル名] 日時

cronとatのアクセス制御

  • ユーザー単位で制御できる

cron

  • 「/etc/cron.allow」、「/etc/cron.deny」で制御可能
    • cron.allow:cronの利用許可ユーザー
    • cron.deny:cronの利用拒否ユーザー
  • ファイルの実行順
    1. cron.allowがある場合、そこに記述されたユーザーはcron利用可能
    2. cron.allowがない場合、cron.denyに記述されていないユーザーはcron利用可能
    3. どちらのファイルもない場合、全てのユーザーがcron利用可能

at

  • 「/etc/at.allow」、「/etc/at.deny」で制御可能
    • at.allow:atの利用許可ユーザー
    • at.deny:atの利用拒否ユーザー
  • ファイルの実行順
    1. at.allowがある場合、そこに記述されたユーザーはat利用可能
    2. at.allowがない場合、at.denyに記述されていないユーザーはat利用可能
    3. どちらのファイルもない場合、rootユーザーのみat利用可能(全てのユーザーでatを利用可能にしたい場合、空のat.denyを作成する)

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

  • ローカライゼーションとは、言語や通貨単位、日付の書式を国に合わせること
  • 国際化とは、最初から多言語、他地域に対応するようにソフトウェアが作られていること

ロケール

  • ロケールとは、カテゴリ(出力言語、通貨、日時の書式等)別の地域情報
  • 環境変数に「LC_ALL」を設定すると全てのカテゴリがまとめて変更できる
  • 「locale」コマンドで設定を確認できる
  • 「locale」を変更する場合、「/etc/sysconfig/i18n」ファイルを変更すると次回のログイン時に変更される(i18nはinternationalisationの略)
カテゴリ 説明
LC_CTYPE 文字の種類の規定
LC_COLLATE 文字の照合や整理に関する規定
LC_MESSAGES メッセージ表に使用する言語
LC_MONETARY 通過に関数規定
LC_NUMERIC 数値の書式に関する規定
LC_TIME 日時や時刻の書式に関する規定
localeコマンドの例)
[vagrant@localhost ~]$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
locale変更の例)
[root@localhost ~]# vi /etc/sysconfig/i18n 
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@localhost ~]

文字コード

文字コード 説明
ASCII  7ビットで表現される。128種類の英数字、記号、制御コードで構成される。
ISO-8859 ASCIIを拡張した8ビットの文字コードで256種類の文字を表現できる。
Unicode 32ビットで表現される。1つの文字コード体系で多言語処理を可能にするための文字コード
UTF-8 Unicodeを使った文字コード。1文字を1バイト~6バイトで表示。
EUC-JP UNIX環境標準の日本語文字コード
Shift_JIS WindowsMacOSで利用される日本語文字コード
ISO-2022-JP 電子メールで利用される日本語文字コード

iconv [オプション] [ファイル名]

オプション 説明
-f 入力文字コード 変換前の文字コードを指定
-t 出力文字コード 変換後の文字コードを指定
-l 扱える文字コードも表示
iconvの使用例)
# UTF-8で開きeucjpで表示し別ファイルへ出力
$ iconv -f UTF-8 -t eucjp hoge.txt > hogeeuc.txt

タイムゾーン

$ ls /usr/share/zoneinfo
Africa      Canada   GB         Indian     Mexico    ROC        Zulu
America     Chile    GB-Eire    Iran       Mideast   ROK        iso3166.tab
Antarctica  Cuba     GMT        Israel     NZ        Singapore  posix
Arctic      EET      GMT+0      Jamaica    NZ-CHAT   Turkey     posixrules
Asia        EST      GMT-0      Japan      Navajo    UCT        right
Atlantic    EST5EDT  GMT0       Kwajalein  PRC       US         zone.tab
Australia   Egypt    Greenwich  Libya      PST8PDT   UTC
Brazil      Eire     HST        MET        Pacific   Universal
CET         Etc      Hongkong   MST        Poland    W-SU
CST6CDT     Europe   Iceland    MST7MDT    Portugal  WET
$ 
  • 現在のタイムゾーンを確認したい場合は、「date」コマンドで確認出来る
  • タイムゾーンを変更するには、次のような方法がある
    • 「/etc/localtime 」ファイルを上書きする(シンボリックリンクでもOK)
    • 「tzselect」コマンドで対話的に変更する
$ date
2015年  9月  6日 日曜日 23:00:48 EDT

// 「/etc/localtime 」ファイルを上書きする例)
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime 
# date
2015年  9月 6日 日曜日 12:03:42 JST

// 「tzselect」コマンドで対話的に変更する例)
$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
 1) Afghanistan       18) Israel            35) Palestine
 2) Armenia       19) Japan         36) Philippines
 3) Azerbaijan        20) Jordan            37) Qatar
 4) Bahrain       21) Kazakhstan        38) Russia
 5) Bangladesh        22) Korea (North)     39) Saudi Arabia
 6) Bhutan        23) Korea (South)     40) Singapore
 7) Brunei        24) Kuwait            41) Sri Lanka
 8) Cambodia          25) Kyrgyzstan        42) Syria
 9) China         26) Laos          43) Taiwan
10) Cyprus        27) Lebanon           44) Tajikistan
11) East Timor        28) Macau         45) Thailand
12) Georgia       29) Malaysia          46) Turkmenistan
13) Hong Kong         30) Mongolia          47) United Arab Emirates
14) India         31) Myanmar (Burma)       48) Uzbekistan
15) Indonesia         32) Nepal         49) Vietnam
16) Iran          33) Oman          50) Yemen
17) Iraq          34) Pakistan
#? 19
The following information has been given:
    Japan
Therefore TZ='Asia/Tokyo' will be used.
Local time is now:  Sun Aug  9 00:48:17 JST 2015.
Universal Time is now:  Sat Aug  8 15:48:17 UTC 2015.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
    TZ='Asia/Tokyo'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Tokyo

使用した教材

LPIC101,102