102-3. 管理業務
- ユーザアカウント、グループアカウント、および関連するシステムファイルを管理する
- ユーザーアカウント情報は「/etc/passwd」ファイルに保存されている
- グループ情報は「/etc/group」ファイルに保存されている
- 「useradd」コマンドでユーザーアカウントを追加、「usermod」で変更、「userdel」で削除(-rオプションでホームディレクトリも同時に削除)
- 「groupadd」コマンドでグループを追加、「groupmod」で変更、「groupdel」で削除(プライマリグループとするユーザーがいる場合削除出来ない)
- 「id」コマンドで所属しているユーザーを調べられる
- 「/etc/shadow」ファイルに暗号化されたユーザーアカウントのパスワードが保存されている
- ジョブスケジューリングによるシステム管理業務の自動化
- 定期的に実施する作業(バックアップやログ管理等)を自動的に実行できる
- cron:定期的に実行するジョブ(crondとcrontabコマンドから構成されている)
- at:1回のみ実行するジョブ
- ユーザ単位でアクセス制御が可能
- cron:「/etc/cron.allow」、「/etc/cron.deny」で制御可能
- allow→denyの順で利用可能(両方共ない場合、全ユーザが利用可能)
- at:「/etc/at.allow」、「/etc/at.deny」で制御可能
- allow→denyの順で利用可能(両方共ない場合、rootユーザーのみ利用可能)
- cron:「/etc/cron.allow」、「/etc/cron.deny」で制御可能
- 定期的に実施する作業(バックアップやログ管理等)を自動的に実行できる
- ローカライゼーションと国際化
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/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の利用拒否ユーザー
- ファイルの実行順
- cron.allowがある場合、そこに記述されたユーザーはcron利用可能
- cron.allowがない場合、cron.denyに記述されていないユーザーはcron利用可能
- どちらのファイルもない場合、全てのユーザーがcron利用可能
at
- 「/etc/at.allow」、「/etc/at.deny」で制御可能
- at.allow:atの利用許可ユーザー
- at.deny:atの利用拒否ユーザー
- ファイルの実行順
- at.allowがある場合、そこに記述されたユーザーはat利用可能
- at.allowがない場合、at.denyに記述されていないユーザーはat利用可能
- どちらのファイルもない場合、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 | WindowsやMacOSで利用される日本語文字コード |
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