Linux管理者-クイックガイド
CentOSは、ビジネスクラスのLinuxディストリビューションの中でもユニークであり、Linuxが設立されたオープンソースの性質に忠実です。最初のLinuxカーネルは、ヘルシンキ大学(Linus Torvalds)の大学生によって開発され、RichardStallmanによって設立および宣伝されたGNUユーティリティと組み合わされました。CentOSには、今日のビジネスの世界を動かすことができる、実績のあるオープンソースライセンスがあります。
CentOSは、すぐに世界で最も多作なサーバープラットフォームの1つになりました。Linux管理者は、就職を希望するときに、「CentOS LinuxExperiencePreferred」という言葉に出くわすはずです。CentOSは、スタートアップ企業からFortune 10の技術者まで、世界中のサーバーオペレーティングシステムの上位層の1つに数えられています。
CentOSを他のLinuxディストリビューションから際立たせているのは、次の素晴らしい組み合わせです。
オープンソースライセンス
Linuxプロフェッショナルの専用ユーザーベース
優れたハードウェアサポート
堅実な安定性と信頼性
セキュリティとアップデートに焦点を当てる
企業環境で必要とされるソフトウェアパッケージング標準への厳格な準拠
レッスンを開始する前に、読者がLinuxおよび管理の基礎に関する基本的な知識を持っていることを前提としています。
rootユーザーとは何ですか?
rootユーザーの力
セキュリティグループとユーザーの基本概念
Linuxターミナルエミュレータの使用経験
基本的なネットワーキングの概念
インタープリター型プログラミング言語(Perl、Python、Ruby)の基本的な理解
HTTP、LDAP、FTP、IMAP、SMTPなどのネットワークプロトコル
コンピューターのオペレーティングシステムを構成するコア:ファイルシステム、ドライバー、およびカーネル
CentOS Linux管理者のツールを学ぶ前に、Linux管理コマンドラインの背後にある哲学に注意することが重要です。
Linuxは、「より大きなタスクを単純化するためにチェーン化された小さくて正確なツール」というUnix哲学に基づいて設計されました。Linuxは、その根底にある特定の用途向けの大規模な単一目的アプリケーションを多くの場合持っていません。代わりに、組み合わせたときに効率的に大きなタスクを実行するための大きな力を提供する何百もの基本的なユーティリティがあります。
Linux哲学の例
たとえば、管理者がシステム上の現在のすべてのユーザーのリストを必要とする場合、次の連鎖コマンドを使用して、すべてのシステムユーザーのリストを取得できます。コマンドを実行すると、システムにいるユーザーがアルファベット順に一覧表示されます。
[root@centosLocal centos]# cut /etc/passwd -d":" -f1 | sort
abrt
adm
avahi
bin
centos
chrony
colord
daemon
dbus
次のコマンドを使用して、このリストをテキストファイルにエクスポートするのは簡単です。
[root@localhost /]# cut /etc/passwd -d ":" -f1 > system_users.txt
[root@localhost /]# cat ./system_users.txt | sort | wc –l
40
[root@localhost /]#
後日、ユーザーリストをエクスポートと比較することもできます。
[root@centosLocal centos]# cut /etc/passwd -d ":" -f1 > system_users002.txt &&
cat system_users002.txt | sort | wc -l
41
[root@centosLocal centos]# diff ./system_users.txt ./system_users002.txt
evilBackdoor [root@centosLocal centos]#
より大きなタスクを実行するためにチェーンされた小さなツールのこのアプローチでは、定期的な時間間隔で結果を自動的に電子メールで送信するよりも、これらのコマンドを実行するスクリプトを作成する方が簡単です。
すべてのLinux管理者が習熟している必要のある基本コマンドは次のとおりです。
- vim
- grep
- ますます少なくなる
- tail
- head
- wc
- sort
- uniq
- tee
- cat
- cut
- sed
- tr
- paste
Linuxの世界では、管理者は filteringログを解析し、コマンド出力をフィルタリングし、インタラクティブなシェルスクリプトを使用してアクションを実行するコマンドを毎日実行します。前述のように、これらのコマンドの力は、と呼ばれるプロセスを通じて相互に変更する能力にあります。piping。
次のコマンドは、CentOSメインユーザー辞書の文字aで始まる単語の数を示しています。
[root@centosLocal ~]# egrep '^a.*$' /usr/share/dict/words | wc -l
25192
[root@centosLocal ~]#
CentOS Linuxのディレクトリとファイルの両方に適用される権限を導入するために、次のコマンド出力を見てみましょう。
[centos@centosLocal etc]$ ls -ld /etc/yum*
drwxr-xr-x. 6 root root 100 Dec 5 06:59 /etc/yum
-rw-r--r--. 1 root root 970 Nov 15 08:30 /etc/yum.conf
drwxr-xr-x. 2 root root 187 Nov 15 08:30 /etc/yum.repos.d
Note −表示される3つの主要なオブジェクトタイプは次のとおりです。
"-" −プレーンファイルのダッシュ
"d" −ディレクトリの場合
"l" −シンボリックリンクの場合
各ディレクトリとファイルの出力の3つのブロックに焦点を当てます-
- drwxr-xr-x:ルート:ルート
- -rw-r--r--:ルート:ルート
- drwxr-xr-x:ルート:ルート
これらの行をよりよく理解するために、これを分解してみましょう-
d | オブジェクトタイプがディレクトリであることを意味します |
rwx | 所有者に適用されるディレクトリ権限を示します |
処方箋 | グループに適用されるディレクトリ権限を示します |
処方箋 | 世界に適用されるディレクトリ権限を示します |
ルート | 最初のインスタンスは、ディレクトリの所有者を示します |
ルート | 2番目のインスタンスは、グループ権限が適用されるグループを示します |
所有者、グループ、世界の違いを理解することが重要です。これを理解しないと、インターネットへのサービスをホストするサーバーに大きな影響を与える可能性があります。
実際の例を示す前に、まず、ディレクトリとファイルに適用されるアクセス許可について理解しましょう。
次の表をご覧になり、手順を続行してください。
オクタル | シンボリック | パーマ。 | ディレクトリ |
---|---|---|---|
1 | バツ | 実行する | ディレクトリを入力してファイルにアクセスします |
2 | w | 書く | ディレクトリ内のファイルを削除または変更する |
4 | r | 読んだ | ディレクトリ内のファイルを一覧表示します |
Note−ディレクトリ内の読み取りのためにファイルにアクセスできる必要がある場合、読み取りおよび実行権限を適用するのが一般的です。そうしないと、ユーザーはファイルを操作するのが困難になります。書き込みを無効のままにしておくと、ファイルの名前の変更、削除、コピー、またはアクセス許可の変更を行うことができなくなります。
ディレクトリとファイルへのアクセス許可の適用
権限を適用する場合、理解すべき2つの概念があります-
- シンボリックパーミッション
- 8進数のパーミッション
本質的に、それぞれは同じですが、ファイルのアクセス許可を参照および割り当てる方法が異なります。クイックガイドについては、次の表を調べて参照してください。
読んだ | 書く | 実行する | |
---|---|---|---|
Octal | 4 | 2 | 1 |
Symbolic | r | w | バツ |
を使用して権限を割り当てる場合 octalメソッドでは、次のような3バイトの数値を使用します。760。数値760は次のように変換されます。所有者:rwx; グループ:rw; その他(または世界)の権限はありません。
別のシナリオ:733は次のように変換されます。所有者:rwx; グループ:wx; その他:wx。
Octalメソッドを使用する権限には1つの欠点があります。既存の権限セットは変更できません。オブジェクトの権限セット全体を再割り当てすることのみが可能です。
今、あなたは不思議に思うかもしれません、常に許可を再割り当てすることの何が問題になっていますか?実稼働Webサーバー上の/ var / www /などの大きなディレクトリ構造を想像してみてください。その他のすべてのディレクトリのwまたは書き込みビットを再帰的に削除します。したがって、セキュリティ対策に必要な場合にのみ、事前に追加するように強制します。アクセス許可セット全体を再割り当てすると、すべてのサブディレクトリに割り当てられている他のすべてのカスタムアクセス許可が削除されます。
したがって、システムの管理者とユーザーの両方に問題が発生します。ある時点で、1人(または複数の人)は、すべてのディレクトリとオブジェクトに権限セット全体を再割り当てすることによって、消去されたすべてのカスタム権限を再割り当てする必要があります。
この場合、シンボリックメソッドを使用してパーミッションを変更する必要があります-
chmod -R o-w /var/www/
上記のコマンドは「アクセス許可を上書き」しませんが、現在のアクセス許可セットを変更します。したがって、ベストプラクティスの使用に慣れてください
- 権限を割り当てるための8進数のみ
- 権限セットを変更するための記号
データとオペレーティングシステム全体の整合性にとってアクセス許可は重要であるため、CentOS管理者は8進数と記号の両方のアクセス許可に習熟していることが重要です。アクセス許可が正しくない場合、最終的には機密データになり、オペレーティングシステム全体が危険にさらされます。
それをカバーしたので、権限とオブジェクトの所有者/メンバーを変更するためのいくつかのコマンドを見てみましょう-
- chmod
- chown
- chgrp
- umask
chmod:ファイルモードのアクセス許可ビットを変更します
コマンド | アクション |
---|---|
-c | 詳細に似ていますが、加えられた変更のみを報告します |
-v | 詳細、行われたすべての要求の診断を出力します |
-R | ファイルとディレクトリに操作を再帰的に適用します |
chmodを使用すると、8進数または記号のアクセス許可セットを使用してディレクトリとファイルのアクセス許可を変更できます。これを使用して、割り当てを変更し、ディレクトリをアップロードします。
chown:ファイルの所有者とグループを変更する
コマンド | アクション |
---|---|
-c | 詳細に似ていますが、加えられた変更のみを報告します |
-v | 詳細、行われたすべての要求の診断を出力します |
-R | ファイルとディレクトリに操作を再帰的に適用します |
chownは、ユーザーとオブジェクトのグループの両方の所有を変更できます。ただし、両方を同時に変更する必要がない限り、通常、グループにはchgrpを使用します。
chgrp:ファイルまたはディレクトリのグループ所有権を変更する
コマンド | アクション |
---|---|
-c | 詳細に似ていますが、変更のみを報告します |
-v | 詳細、行われたすべての要求の診断を出力します |
-R | 再帰的に、ファイルとディレクトリに操作を適用します |
chgrpは、グループ所有者を指定された所有者に変更します。
実世界の練習
/ var / www / students /内のすべてのサブディレクトリの割り当てを変更して、所有するグループが学生グループになるようにします。次に、学生のルートを教授グループに割り当てます。その後、テリー・トーマス博士を学生名簿の所有者にします。彼は学校のすべてのコンピュータサイエンス学界を担当する任務を負っているからです。
ご覧のとおり、作成されると、ディレクトリはかなり生のままになります。
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 root root 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -l /var/www/students/
total 0
drwxr-xr-x. 2 root root 6 Jan 9 22:03 assignments
drwxr-xr-x. 2 root root 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
管理者として、ルート資格情報を誰にも教えたくありません。しかし同時に、ユーザーが自分の仕事を行えるようにする必要があります。それでは、テリー・トーマス博士がファイル構造をより細かく制御し、学生ができることを制限できるようにしましょう。
[root@centosLocal ~]# chown -R drterryt:professors /var/www/students/
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 drterryt professors 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -ls /var/www/students/
total 0
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 assignments
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
現在、各ディレクトリとサブディレクトリにはdrterrytの所有者がいて、所有するグループは教授です。以来の割り当ての学生がで割り当てられた作業をオンにするためのディレクトリがある、の離れリストおよび変更する機能いきましょうファイルからの学生のグループを。
[root@centosLocal ~]# chgrp students /var/www/students/assignments/ && chmod
736 /var/www/students/assignments/
[root@centosLocal assignments]# ls -ld /var/www/students/assignments/
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[root@centosLocal assignments]#
学生は課題を課題ディレクトリにコピーできます。ただし、ディレクトリの内容を一覧表示したり、現在のファイルをコピーしたり、割り当てディレクトリ内のファイルを変更したりすることはできません。したがって、それは学生が完了した課題を提出することを可能にするだけです。CentOSファイルシステムは、割り当てが提出された日付スタンプを提供します。
割り当てディレクトリの所有者として-
[drterryt@centosLocal assignments]$ whoami drterryt [drterryt@centosLocal assignments]$ ls -ld /var/www/students/assignment
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[drterryt@centosLocal assignments]$ ls -l /var/www/students/assignments/ total 4 -rw-r--r--. 1 adama students 0 Jan 9 23:14 myassign.txt -rw-r--r--. 1 tammyr students 16 Jan 9 23:18 terryt.txt [drterryt@centosLocal assignments]$
ディレクトリの所有者は、ファイルを一覧表示したり、ファイルを変更および削除したりできます。
umaskコマンド:作成時にファイルとディレクトリのアクセス許可のデフォルトモードを提供します
umaskは、作成時にファイルとディレクトリのアクセス許可のデフォルトモードを提供する重要なコマンドです。
umaskパーミッションは、単項の否定ロジックを使用します。
許可 | 操作 |
---|---|
0 | 読み取り、書き込み、実行 |
1 | 読み書き |
2 | 読み取りと実行 |
3 | 読み取り専用 |
4 | 読み取りと実行 |
5 | 書き込みのみ |
6 | 実行のみ |
7 | 権限なし |
[adama@centosLocal umask_tests]$ ls -l ./ -rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir -rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt [adama@centosLocal umask_tests]$ whoami
adama
[adama@centosLocal umask_tests]$ umask 0022 [adama@centosLocal umask_tests]$
それでは、現在のユーザーのumaskを変更して、新しいファイルとディレクトリを作成しましょう。
[adama@centosLocal umask_tests]$ umask 077 [adama@centosLocal umask_tests]$ touch mynewfile.txt
[adama@centosLocal umask_tests]$ mkdir myNewDir [adama@centosLocal umask_tests]$ ls -l
total 0
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt
drwx------. 2 adama students 6 Jan 10 00:35 myNewDir
-rw-------. 1 adama students 0 Jan 10 00:35 mynewfile.txt
ご覧のとおり、新しく作成されたファイルは以前よりも少し制限が厳しくなりました。
ユーザーのumaskは、次のいずれかで変更する必要があります-
- /etc/profile
- ~/bashrc
[root@centosLocal centos]# su adama
[adama@centosLocal centos]$ umask 0022 [adama@centosLocal centos]$
通常、CentOSのデフォルトのumaskは問題ありません。デフォルトの0022で問題が発生した場合は、通常、さまざまなグループに属するさまざまな部門がプロジェクトで共同作業を行う必要がある場合です。
ここで、CentOSオペレーティングシステムの運用と設計のバランスを取るために、システム管理者の役割が必要になります。
ユーザー管理について議論するとき、理解すべき3つの重要な用語があります-
- Users
- Groups
- Permissions
ファイルとフォルダーに適用される詳細なアクセス許可については、すでに説明しました。この章では、ユーザーとグループについて説明します。
CentOSユーザー
CentOSには、2つのタイプのアカウントがあります-
System accounts −デーモンまたはその他のソフトウェアに使用されます。
Interactive accounts −通常、システムリソースにアクセスするためにユーザーに割り当てられます。
2つのユーザータイプの主な違いは次のとおりです。
System accountsデーモンがファイルやディレクトリにアクセスするために使用します。これらは通常、シェルまたは物理コンソールログインを介したインタラクティブログインから許可されません。
Interactive accounts エンドユーザーは、シェルまたは物理コンソールログインからコンピューティングリソースにアクセスするために使用されます。
このユーザーの基本的な理解を踏まえて、経理部でBobJonesの新しいユーザーを作成しましょう。新しいユーザーが追加されますadduser コマンド。
以下はいくつかです adduser 共通スイッチ-
スイッチ | アクション |
---|---|
-c | ユーザーアカウントにコメントを追加します |
-m | 存在しない場合は、デフォルトの場所にユーザーのホームディレクトリを作成します |
-g | ユーザーを割り当てるデフォルトのグループ |
-n | ユーザーのプライベートグループ、通常はユーザー名を持つグループを作成しません |
-M | ホームディレクトリを作成しません |
-s | / bin / bash以外のデフォルトシェル |
-u | UIDを指定します(それ以外の場合はシステムによって割り当てられます) |
-G | ユーザーを割り当てる追加のグループ |
新しいユーザーを作成するときは、次のように-c、-m、-g、-nスイッチを使用します。
[root@localhost Downloads]# useradd -c "Bob Jones Accounting Dept Manager"
-m -g accounting -n bjones
次に、新しいユーザーが作成されたかどうかを確認しましょう-
[root@localhost Downloads]# id bjones
(bjones) gid = 1001(accounting) groups = 1001(accounting)
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Bob Jones Accounting Dept Manager:/home/bjones:/bin/bash
[root@localhost Downloads]#
次に、passwdコマンドを使用して新しいアカウントを有効にする必要があります-
[root@localhost Downloads]# passwd bjones
Changing password for user bjones.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost Downloads]#
ユーザーアカウントが有効になっていないため、ユーザーはシステムにログインできません。
ユーザーアカウントの無効化
システムのアカウントを無効にする方法はいくつかあります。これらは、/ etc / passwdファイルを手動で編集することから始まります。または、passwdコマンドを-lスイッチ。これらの方法には両方とも1つの大きな欠点があります。ユーザーがsshアクセスを持ち、認証にRSAキーを使用している場合でも、この方法を使用してログインできます。
次に、chageコマンドを使用して、パスワードの有効期限を前の日付に変更しましょう。また、アカウントを無効にした理由をメモしておくとよいでしょう。
[root@localhost Downloads]# chage -E 2005-10-01 bjones
[root@localhost Downloads]# usermod -c "Disabled Account while Bob out of the country
for five months" bjones
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Disabled Account while Bob out of the country for four
months:/home/bjones:/bin/bash
[root@localhost Downloads]#
グループの管理
Linuxでグループを管理すると、管理者は、すべてのグループメンバーに適用可能な権限セットを適用して、コンテナー内のユーザーを組み合わせることができます。たとえば、経理部門のすべてのユーザーが同じファイルにアクセスする必要がある場合があります。したがって、アカウンティングユーザーを追加して、アカウンティンググループを作成します。
ほとんどの場合、特別なアクセス許可が必要なものはすべてグループで実行する必要があります。このアプローチは通常、1人のユーザーだけに特別なアクセス許可を適用するよりも時間を節約します。たとえば、Sallyはレポートを担当し、Sallyだけがレポートのために特定のファイルにアクセスする必要があります。しかし、ある日サリーが病気でボブが報告した場合はどうなるでしょうか。または、レポートの必要性が高まっていますか?グループが作成されると、管理者は1回だけ実行する必要があります。ユーザーの追加は、ニーズの変更または拡張に応じて適用されます。
以下は、グループの管理に使用されるいくつかの一般的なコマンドです-
- chgrp
- groupadd
- groups
- usermod
chgrp −ファイルまたはディレクトリのグループ所有権を変更します。
経理グループのメンバーがファイルを保存し、ファイルのディレクトリを作成するためのディレクトリを作成しましょう。
[root@localhost Downloads]# mkdir /home/accounting
[root@localhost Downloads]# ls -ld /home/accounting
drwxr-xr-x. 2 root root 6 Jan 13 10:18 /home/accounting
[root@localhost Downloads]#
次に、会計グループにグループの所有権を与えましょう。
[root@localhost Downloads]# chgrp -v accounting /home/accounting/
changed group of ‘/home/accounting/’ from root to accounting
[root@localhost Downloads]# ls -ld /home/accounting/
drwxr-xr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
これで、アカウンティンググループの全員が/ home / accountingへの読み取りおよび実行権限を取得しました。書き込み権限も必要になります。
[root@localhost Downloads]# chmod g+w /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwxr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
以来会計グループは、機密文書を扱うことが、我々はのためにいくつかの制限された権限を適用する必要があり、他のまたは世界。
[root@localhost Downloads]# chmod o-rx /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwx---. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
groupadd −新しいグループを作成するために使用されます。
スイッチ | アクション |
---|---|
-g | グループのGIDを指定します |
-K | /etc/login.defsのGIDの仕様を上書きします |
-o | 一意でないグループIDの不許可をオーバーライドできます |
-p | グループパスワード、ユーザーが自分自身をアクティブ化できるようにする |
シークレットという新しいグループを作りましょう。グループにパスワードを追加して、ユーザーが既知のパスワードで自分自身を追加できるようにします。
[root@localhost]# groupadd secret
[root@localhost]# gpasswd secret
Changing the password for group secret
New Password:
Re-enter new password:
[root@localhost]# exit
exit
[centos@localhost ~]$ newgrp secret Password: [centos@localhost ~]$ groups
secret wheel rdc
[centos@localhost ~]$
実際には、グループのパスワードはあまり使用されません。セカンダリグループは適切であり、他のユーザー間でパスワードを共有することは、優れたセキュリティ慣行ではありません。
ザ・ groupsコマンドは、ユーザーがどのグループに属しているかを示すために使用されます。現在のユーザーにいくつかの変更を加えた後、これを使用します。
usermod アカウント属性を更新するために使用されます。
以下は、一般的なusermodスイッチです。
スイッチ | アクション |
---|---|
-a | -Gオプションを使用した場合のみ、ユーザーを補足グループに追加します |
-c | コメント、ユーザーのコメント値を更新します |
-d | ホームディレクトリ、ユーザーのホームディレクトリを更新します |
-G | セカンダリユーザーグループをグループ化、追加、または削除します |
-g | グループ、ユーザーのデフォルトのプライマリグループ |
[root@localhost]# groups centos
centos : accounting secret
[root@localhost]#
[root@localhost]# usermod -a -G wheel centos
[root@localhost]# groups centos
centos : accounting wheel secret
[root@localhost]#
CentOSディスククォータは両方とも有効にできます。システム管理者に警告し、ディスク容量を超える前にユーザーへのそれ以上のディスクストレージアクセスを拒否します。ディスクがいっぱいになると、ディスクの内容によっては、システム全体が回復するまで急停止する可能性があります。
CentOS Linuxでクォータ管理を有効にすることは、基本的に4ステップのプロセスです-
Step 1 − / etc / fstabでグループとユーザーのクォータ管理を有効にします。
Step 2 −ファイルシステムを再マウントします。
Step 3 −クォータデータベースを作成し、ディスク使用量テーブルを生成します。
Step 4 −クォータポリシーを割り当てます。
/ etc / fstabでクォータ管理を有効にする
まず、/ etc / fstabファイルをバックアップします-
[root@centosLocal centos]# cp -r /etc/fstab ./
これで、現在の作業ディレクトリに既知の作業/ etc / fstabのコピーがあります。
#
# /etc/fstab
# Created by anaconda on Sat Dec 17 02:44:51 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID = 4b9a40bc-9480-4 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults,usrquota,grpquota 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
ボリュームまたはラベルの/ etc / fstabのオプションセクションで、ユーザーとグループにクォータが適用される場所に次の変更を加えました。
- usrquota
- grpquota
ご覧のとおり、 xfsファイルシステム。xfsを使用する場合、追加の手動手順が必要になります。/home/と同じディスク上にあります。さらに調査すると、カーネルレベルのマウントオプションであるnoquotaに/が設定されていることがわかります。カーネルブートオプションを再構成する必要があります。
root@localhost rdc]# mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost rdc]#
XFSファイルシステムのカーネルブートオプションの再構成
このステップは、2つの条件下でのみ必要です-
- クォータを有効にしているディスク/パーティションがxfsファイルシステムを使用している場合
- カーネルが起動時に/ etc / fstabにnoquotaパラメーターを渡している場合
Step 1 − / etc / default / grubのバックアップを作成します。
cp /etc/default/grub ~/
Step 2− / etc / default / grubを変更します。
これがデフォルトのファイルです。
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
次の行を変更したい-
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
に
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv
=cl/swap rhgb quiet rootflags=usrquota,grpquota"
Note−これらの変更を逐語的にコピーすることが重要です。grub.cfgを再構成した後、構成でエラーが発生した場合、システムは起動に失敗します。非実稼働システムでチュートリアルのこの部分を試してください。
Step 3 −作業中のgrub.cfgをバックアップします
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
新しいgrub.cfgを作成します
[root@localhost rdc]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-dbba7fa47f73457b96628ba8f3959bfd
Found initrd image: /boot/initramfs-0-rescuedbba7fa47f73457b96628ba8f3959bfd.img
done
[root@localhost rdc]#
リブート
[root@localhost rdc]#reboot
すべての変更が正確である場合、xfsファイルシステムにクォータを追加するための可用性がないはずです。
[rdc@localhost ~]$ mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[rdc@localhost ~]$
私たちは、合格したUSRQUOTAとGRPQUOTA GRUBを経由してパラメータを。
ここで、/ etc / fstabを再度編集して、同じ物理ディスク上の/ home以降に/を含めます。
/dev/mapper/cl-root/xfs
defaults,usrquota,grpquota 0 0
それでは、クォータデータベースを有効にしましょう。
[root@localhost rdc]# quotacheck -acfvugM
クォータが有効になっていることを確認してください。
[root@localhost rdc]# quotaon -ap
group quota on / (/dev/mapper/cl-root) is on
user quota on / (/dev/mapper/cl-root) is on
group quota on /home (/dev/mapper/cl-home) is on
user quota on /home (/dev/mapper/cl-home) is on
[root@localhost rdc]#
ファイルシステムを再マウントします
パーティションまたはディスクがアクティブに起動されたパーティションから分離されている場合は、再起動せずに再マウントできます。ルートディレクトリ/で起動されたディスク/パーティションでクォータが構成されている場合は、オペレーティングシステムを再起動する必要がある場合があります。再マウントを強制して変更を適用すると、ファイルシステムを再マウントする必要性が異なる場合があります。
[rdc@localhost ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root 22447404 4081860 18365544 19% /
devtmpfs 903448 0 903448 0% /dev
tmpfs 919308 100 919208 1% /dev/shm
tmpfs 919308 9180 910128 1% /run
tmpfs 919308 0 919308 0% /sys/fs/cgroup
/dev/sda2 1268736 176612 1092124 14% /boot
/dev/mapper/cl-var 4872192 158024 4714168 4% /var
/dev/mapper/cl-home 18475008 37284 18437724 1% /home
tmpfs 183864 8 183856 1% /run/user/1000
[rdc@localhost ~]$
ご覧のとおり、LVMボリュームが使用されています。したがって、再起動するのは簡単です。これにより、/ homeが再マウントされ、/ etc / fstab構成の変更がアクティブな構成にロードされます。
クォータデータベースファイルの作成
CentOSは、/ homeのディスククォータを処理できるようになりました。フルクォータサポートを有効にするには、quotacheck コマンド。
クォータチェックは2つのファイルを作成します-
- aquota.user
- aquota.group
これらは、クォータが有効なディスク/パーティションのクォータ情報を格納するために使用されます。
以下は、一般的なクォータチェックスイッチです。
スイッチ | アクション |
---|---|
-u | Checks for user quotas |
-g | Checks for group quotas |
-c | Quotas should be enabled for each file system with enables quotas |
-v | Displays verbose output |
Add Quota Limits Per User
For this, we will use the edquota command, followed by the username −
[root@localhost rdc]# edquota centos
Disk quotas for user centos (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/cl-root 12 0 0 13 0 0
/dev/mapper/cl-home 4084 0 0 140 0 0
Let's look at each column.
Filesystem − It is the filesystem quotas for the user applied to
blocks − How many blocks the user is currently using on each filesystem
soft − Set blocks for a soft limit. Soft limit allows the user to carry quota for a given time period
hard − Set blocks for a hard limit. Hard limit is total allowable quota
inodes − How many inodes the user is currently using
soft − Soft inode limit
hard − Hard inode limit
To check our current quota as a user −
[centos@localhost ~]$ quota
Disk quotas for user centos (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/cl-home 6052604 56123456 61234568 475 0 0 [centos@localhost ~]$
Following is an error given to a user when the hard quota limit has exceeded.
[centos@localhost Downloads]$ cp CentOS-7-x86_64-LiveKDE-1611.iso.part ../Desktop/
cp: cannot create regular file ‘../Desktop/CentOS-7-x86_64-LiveKDE-
1611.iso.part’: Disk quota exceeded
[centos@localhost Downloads]$
As we can see, we are closely within this user's disk quota. Let's set a soft limit warning. This way, the user will have advance notice before quota limits expire. From experience, you will get end-user complaints when they come into work and need to spend 45 minutes clearing files to actually get to work.
As an Administrator, we can check quota usage with the repquota command.
[root@localhost Downloads]# repquota /home
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------------------------
root -- 0 0 0 3 0 0
centos -+ 6189824 56123456 61234568 541 520 540 6days
[root@localhost Downloads]#
As we can see, the user centos has exceeded their hard block quota and can no longer use any more disk space on /home.
-+denotes a hard quota has been exceeded on the filesystem.
When planning quotas, it is necessary to do a little math. What an Administrator needs to know is:How many users are on the system? How much free space to allocate amongst users/groups? How many bytes make up a block on the file system?
Define quotas in terms of blocks as related to free disk-space.It is recommended to leave a "safe" buffer of free-space on the file system that will remain in worst case scenario: all quotas are simultaneously exceeded. This is especially on a partition that is used by the system for writing logs.
systemd is the new way of running services on Linux. systemd has a superceded sysvinit. systemd brings faster boot-times to Linux and is now, a standard way to manage Linux services. While stable, systemd is still evolving.
systemd as an init system, is used to manage both services and daemons that need status changes after the Linux kernel has been booted. By status change starting, stopping, reloading, and adjusting service state is applied.
First, let's check the version of systemd currently running on our server.
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
As of CentOS version 7, fully updated at the time of this writing systemd version 219 is the current stable version.
We can also analyze the last server boot time with systemd-analyze
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
When the system boot times are slower, we can use the systemd-analyze blame command.
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
When working with systemd, it is important to understand the concept of units. Units are the resources systemd knows how to interpret. Units are categorized into 12 types as follows −
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
For the most part, we will be working with .service as unit targets. It is recommended to do further research on the other types. As only .service units will apply to starting and stopping systemd services.
Each unit is defined in a file located in either −
/lib/systemd/system − base unit files
/etc/systemd/system − modified unit files started at run-time
Manage Services with systemctl
To work with systemd, we will need to get very familiar with the systemctl command. Following are the most common command line switches for systemctl.
Switch | Action |
---|---|
-t | Comma separated value of unit types such as service or socket |
-a | Shows all loaded units |
--state | Shows all units in a defined state, either: load, sub, active, inactive, etc.. |
-H | Executes operation remotely. Specify Host name or host and user separated by @. |
Basic systemctl Usage
systemctl [operation]
example: systemctl --state [servicename.service]
For a quick look at all the services running on our box.
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
Stopping a Service
Let's first, stop the bluetooth service.
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
As we can see, the bluetooth service is now inactive.
To start the bluetooth service again.
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note − We didn't specify bluetooth.service, since the .service is implied. It is a good practice to think of the unit type appending the service we are dealing with. So, from here on, we will use the .service extension to clarify we are working on service unit operations.
The primary actions that can be performed on a service are −
Start | Starts the service |
Stop | Stops a service |
Reload | Reloads the active configuration of a service w/o stopping it (like kill -HUP in system v init) |
Restart | Starts, then stops a service |
Enable | Starts a service at boot time |
Disable | Stops a service from automatically starting at run time |
The above actions are primarily used in the following scenarios −
Start | To bring a service up that has been put in the stopped state. |
Stop | To temporarily shut down a service (for example when a service must be stopped to access files locked by the service, as when upgrading the service) |
Reload | When a configuration file has been edited and we want to apply the new changes while not stopping the service. |
Restart | In the same scenario as reload, but the service does not support reload. |
Enable | When we want a disabled service to run at boot time. |
Disable | Used primarily when there is a need to stop a service, but it starts on boot. |
To check the status of a service −
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
Show us the current status of the networking service. If we want to see all the services related to networking, we can use −
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
For those familiar with the sysinit method of managing services, it is important to make the transition to systemd. systemd is the new way starting and stopping daemon services in Linux.
systemctl is the utility used to control systemd. systemctl provides CentOS administrators with the ability to perform a multitude of operations on systemd including −
- Configure systemd units
- Get status of systemd untis
- Start and stop services
- Enable / disable systemd services for runtime, etc.
The command syntax for systemctl is pretty basic, but can tangle with switches and options. We will present the most essential functions of systemctl needed for administering CentOS Linux.
Basic systemctl syntax:
systemctl [OPTIONS] COMMAND [NAME]
Following are the common commands used with systemctl −
- start
- stop
- restart
- reload
- status
- is-active
- list-units
- enable
- disable
- cat
- show
We have already discussed start, stop, reload, restart, enable and disable with systemctl. So let's go over the remaining commonly used commands.
status
In its most simple form, the status command can be used to see the system status as a whole −
[root@localhost rdc]# systemctl status
● localhost.localdomain
State: running
Jobs: 0 queued
Failed: 0 units
Since: Thu 2017-01-19 19:14:37 EST; 4h 5min ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1002.slice
│ └─session-1.scope
│ ├─2869 gdm-session-worker [pam/gdm-password]
│ ├─2881 /usr/bin/gnome-keyring-daemon --daemonize --login
│ ├─2888 gnome-session --session gnome-classic
│ ├─2895 dbus-launch --sh-syntax --exit-with-session
The above output has been condensed. In the real-world systemctl status will output about 100 lines of treed process statuses.
Let's say we want to check the status of our firewall service −
[root@localhost rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-19 19:14:55 EST; 4h 12min ago
Docs: man:firewalld(1)
Main PID: 825 (firewalld)
CGroup: /system.slice/firewalld.service
└─825 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
As you see, our firewall service is currently active and has been for over 4 hours.
list-units
The list-units command allows us to list all the units of a certain type. Let's check for sockets managed by systemd −
[root@localhost]# systemctl list-units --type=socket
UNIT LOAD ACTIVE SUB DESCRIPTION
avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket
cups.socket loaded active running CUPS Printing Service Sockets
dbus.socket loaded active running D-Bus System Message Bus Socket
dm-event.socket loaded active listening Device-mapper event daemon FIFOs
iscsid.socket loaded active listening Open-iSCSI iscsid Socket
iscsiuio.socket loaded active listening Open-iSCSI iscsiuio Socket
lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket
lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket
rpcbind.socket loaded active listening RPCbind Server Activation Socket
systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe
systemd-journald.socket loaded active running Journal Socket
systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket loaded active running udev Kernel Socket
virtlockd.socket loaded active listening Virtual machine lock manager socket
virtlogd.socket loaded active listening Virtual machine log manager socket
それでは、現在実行中のサービスを確認しましょう-
[root@localhost rdc]# systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
アクティブです
IS-アクティブコマンドは、ユニットのステータス情報を返すように設計systemctlコマンドの一例です。
[root@localhost rdc]# systemctl is-active ksm.service
active
ネコ
catはめったに使用されないコマンドの1つです。シェルでcatを使用してユニットファイルへのパスを入力する代わりに、systemctlcatを使用するだけです。
[root@localhost]# systemctl cat firewalld
# /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before = NetworkManager.service
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)
[Service]
EnvironmentFile = -/etc/sysconfig/firewalld
ExecStart = /usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS ExecReload = /bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput = null
StandardError = null
Type = dbus
BusName = org.fedoraproject.FirewallD1
[Install]
WantedBy = basic.target
Alias = dbus-org.fedoraproject.FirewallD1.service
[root@localhost]#
今、私たちは両方の探求していることにsystemdとsystemctlをより詳細に、の内のリソースを管理するためにそれらを使用してみましょうのcgroupまたは対照群。
cgroupsまたはControlGroupsは、管理者がサービスおよびグループ化のためにシステムリソースを割り当てまたは制限できるようにするLinuxカーネルの機能です。
実行中のアクティブなコントロールグループを一覧表示するには、次のpsコマンドを使用できます-
[root@localhost]# ps xawf -eo pid,user,cgroup,args
8362 root - \_ [kworker/1:2]
1 root - /usr/lib/systemd/systemd --switched-
root --system -- deserialize 21
507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald
527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f
540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd
715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n
731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd
734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch
737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug
738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon
740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --
address=systemd: --nofork --nopidfile --systemd-activation
リソース管理は、CentOSの6.Xのように、と再定義されているにsystemdのinit実装。サービスのリソース管理を考えるとき、焦点を当てるべき主なものはcgroupsです。cgroups機能性とシンプルさの両方でsystemdで進歩しました。
リソース管理におけるcgroupの目標は、システム全体をダウンさせることができるサービスはありません。または、単一のサービスプロセス(おそらく不十分に記述されたPHPスクリプト)が、あまりにも多くのリソースを消費することによってサーバー機能を損なうことはありません。
cgroupsを使用すると、次のリソースのユニットのリソース制御が可能になります-
CPU −他のそれほど集中的でないタスクほど重要ではないCPU集中型タスクを制限する
Memory −サービスが消費できるメモリ量を制限する
Disks −ディスクI / Oを制限する
** CPU時間:**
より少ないCPU優先度を必要とするタスクは、カスタム構成されたCPUスライスを持つことができます。
たとえば、次の2つのサービスを見てみましょう。
丁寧なCPUサービス1
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
邪悪なCPUサービス2
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
より低いCPU優先度を使用して丁寧なサービスを設定しましょう-
systemctl set-property polite.service CPUShares = 20
/system.slice/polite.service
1 70.5 124.0K - -
/system.slice/evil.service
1 99.5 304.0K - -
ご覧のとおり、通常のシステムアイドル時間の間、両方の不正なプロセスは依然としてCPUサイクルを使用しています。ただし、タイムスライスを少なくするように設定されているのは、CPU時間を少なくすることです。これを念頭に置いて、より短い時間のタイムスライスを使用すると、重要なタスクがシステムリソースにアクセスしやすくなることがわかります。
リソースごとにサービスを設定するために、set-propertyメソッドは次のパラメーターを定義します-
systemctl set-property name parameter=value
CPUスライス | CPUシェア |
メモリ制限 | MemoryLimit |
ソフトメモリ制限 | MemorySoftLimit |
ブロックIOの重み | BlockIOWeight |
ブロックデバイス制限(/ volume / pathで指定)) | BlockIODeviceWeight |
IOを読む | BlockIOReadBandwidth |
ディスク書き込みIO | BlockIOReadBandwidth |
ほとんどの場合、サービスはCPUの使用、メモリの制限、および読み取り/書き込みIOによって制限されます。
それぞれを変更した後、systemdをリロードしてサービスを再起動する必要があります-
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
CentOSLinuxでCGroupsを構成する
CentOS Linuxでカスタムcgroupを作成するには、最初にサービスをインストールして構成する必要があります。
Step 1 − libcgroupをインストールします(まだインストールされていない場合)。
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
ご覧のとおり、デフォルトでは、CentOS7にはeverythingインストーラーとともにlibcgroupがインストールされています。最小限のインストーラーを使用するには、依存関係とともにlibcgroupユーティリティをインストールする必要があります。
Step 2 −cgconfigサービスを開始して有効にします。
[root@localhost]# systemctl enable cgconfig
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service to /usr/lib/systemd/system/cgconfig.service.
[root@localhost]# systemctl start cgconfig
[root@localhost]# systemctl status cgconfig
● cgconfig.service - Control Group configuration service
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor preset: disabled)
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago
Main PID: 4692 (code=exited, status = 0/SUCCESS)
Memory: 0B
CGroup: /system.slice/cgconfig.service
Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group configuration service...
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group configuration service.
[root@localhost]#
プロセス管理で使用される一般的なコマンドは次のとおりです– bg、fg、nohup、ps、pstree、top、kill、killall、free、uptime、nice。
プロセスの操作
Quick Note: Process PID in Linux
Linuxでは、実行中のすべてのプロセスにPIDまたはプロセスID番号が割り当てられます。このPIDは、CentOSが特定のプロセスを識別する方法です。すでに説明したように、systemdは、CentOSで開始されPIDが1の最初のプロセスです。
Pgrep 指定されたプロセス名のLinuxPIDを取得するために使用されます。
[root@CentOS]# pgrep systemd
1
[root@CentOS]#
ご覧のとおり、pgrepコマンドはsystemdの現在のPIDを返します。
CentOSの基本的なCentOSプロセスとジョブ管理
Linuxでプロセスを操作するときは、基本的なフォアグラウンドおよびバックグラウンドプロセスがコマンドラインでどのように実行されるかを知ることが重要です。
fg −プロセスを前面に出します
bg −プロセスをバックグラウンドに移動します
jobs −シェルに接続されている現在のプロセスのリスト
ctrl+z −現在のプロセスをスリープ状態にするためのControl + zキーの組み合わせ
& −バックグラウンドでプロセスを開始します
シェルコマンドsleepの使用を開始しましょう。sleep名前のとおり、定義された期間スリープします:sleep。
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 &
[1] 12454
[root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs
[1]- Running sleep 10 &
[2]+ Running sleep 20 &
[cnetos@CentOS ~]$
それでは、最初の仕事を前面に出しましょう-
[root@CentOS ~]$ fg 1
sleep 10
フォローしていると、フォアグラウンドジョブがシェルでスタックしていることに気付くでしょう。それでは、プロセスをスリープ状態にしてから、バックグラウンドで再度有効にしてみましょう。
- コントロール+ zを押す
- タイプ:bg 1、最初のジョブをバックグラウンドに送信して開始します。
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1
[1]+ sleep 20 &
[root@CentOS ~]$
nohup
シェルまたはターミナルから作業する場合、デフォルトでは、シェルが閉じられるか、ユーザーがログアウトすると、シェルに接続されているすべてのプロセスとジョブが終了することに注意してください。nohupを使用する場合、ユーザーがログアウトするか、プロセスが接続されているシェルを閉じると、プロセスは引き続き実行されます。
[root@CentOS]# nohup ping www.google.com &
[1] 27299
nohup: ignoring input and appending output to ‘nohup.out’
[root@CentOS]# pgrep ping
27299
[root@CentOS]# kill -KILL `pgrep ping`
[1]+ Killed nohup ping www.google.com
[root@CentOS rdc]# cat nohup.out
PING www.google.com (216.58.193.68) 56(84) bytes of data.
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128
time = 51.6 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128
time = 54.2 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128
time = 52.7 ms
psコマンド
ザ・ psコマンドは通常、特定のプロセスのスナップショットを調査するために管理者によって使用されます。psは、分析する特定のプロセスを除外するためにgrepで一般的に使用されます。
[root@CentOS ~]$ ps axw | grep python
762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid
1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
15550 pts/0 S+ 0:00 grep --color=auto python
上記のコマンドでは、Pythonインタープリターを使用しているすべてのプロセスが表示されます。結果には、文字列pythonを検索するgrepコマンドも含まれていました。
以下は、psで使用される最も一般的なコマンドラインスイッチです。
スイッチ | アクション |
---|---|
a | 現在のユーザーのレポートプロセスのみの制約を除外します |
バツ | ttyまたはシェルに接続されていないプロセスを表示します |
w | 出力のワイド出力表示をフォーマットします |
e | コマンド後の環境を表示します |
-e | すべてのプロセスを選択します |
-o | ユーザー定義のフォーマットされた出力 |
-u | 特定のユーザーによるすべてのプロセスを表示します |
-C | 名前またはプロセスIDですべてのプロセスを表示します |
- ソート | 定義によってプロセスをソートします |
誰も使用していないすべてのプロセスを表示するには-
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
Firewalldプロセスに関するすべての情報を表示するには-
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
どのプロセスが最も多くのメモリを消費しているかを見てみましょう-
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
カスタム出力を表示して、ユーザーのセントとフォーマットですべてのプロセスを表示します-
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm
PID USER COMMAND
5802 centos gnome-keyring-d
5812 cnetos gnome-session
5819 cnetos dbus-launch
5820 cnetos dbus-daemon
5888 cnetos gvfsd
5893 cnetos gvfsd-fuse
5980 cnetos ssh-agent
5996 cnetos at-spi-bus-laun
pstreeコマンド
pstreepsに似ていますが、あまり使用されません。プロセスをきちんとしたツリー形式で表示します。
[centos@CentOS ~]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─cgrulesengd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
pstreeからの合計出力は100行を超える可能性があります。通常、psはより有用な情報を提供します。
トップコマンド
topLinuxのパフォーマンスの問題をトラブルシューティングするときに最もよく使用されるコマンドの1つです。Linuxでのリアルタイムの統計とプロセスの監視に役立ちます。以下は、コマンドラインから起動したときのtopのデフォルト出力です。
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache
KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg
8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal-
6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc
6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
topの実行中に使用される一般的なホットキー(topがシェルで実行されているときにキーを押すとホットキーにアクセスします)。
コマンド | アクション |
---|---|
b | トップメニューの太字の強調表示を有効/無効にします |
z | 配色を循環させます |
l | 負荷平均方位を循環します |
m | メモリの平均見出しを循環させます |
t | タスク情報の見出し |
h | ヘルプメニュー |
Shift + F | 並べ替えと表示フィールドをカスタマイズします |
以下は、topの一般的なコマンドラインスイッチです。
コマンド | アクション |
---|---|
-o | 列で並べ替えます(-または+を前に付けて、昇順または降順で並べ替えることができます) |
-u | 指定されたユーザーからのプロセスのみを表示します |
-d | トップの遅延時間を更新します |
-O | トップがソートを適用できる列のリストを返します |
Shift + Fを使用して表示される、上部の並べ替えオプション画面。この画面では、上部の表示と並べ替えのオプションをカスタマイズできます。
Fields Management for window 1:Def, whose current sort field is %MEM
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id TGID = Thread Group Id
* USER = Effective User Name ENVIRON = Environment vars
* PR = Priority vMj = Major Faults delta
* NI = Nice Value vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nsIPC = IPC namespace Inode
* SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode
* S = Process Status nsNET = NET namespace Inode
* %CPU = CPU Usage nsPID = PID namespace Inode
* %MEM = Memory Usage (RES) nsUSER = USER namespace Inode
* TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
上、ユーザーrdcのプロセスを示し、メモリ使用量でソート-
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND
6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell
6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen
6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm
6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga
6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus
6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
有効なトップフィールドの表示(要約)-
[centos@CentOS ~]$ top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID
コマンドを殺す
ザ・ killcommandは、PIDを介してコマンドシェルからプロセスを強制終了するために使用されます。ときに殺す過程を、私たちは、送信する信号を指定する必要があります。このシグナルは、プロセスをどのように終了するかをカーネルに知らせます。最も一般的に使用される信号は次のとおりです。
SIGTERMカーネルがプロセスに安全に停止する必要があることを通知するため、これは暗黙的に示されます。SIGTERMは、プロセスを正常に終了し、安全な終了操作を実行する機会を提供します。
SIGHUPほとんどのデーモンは、SIGHUPが送信されると再起動します。これは、構成ファイルに変更が加えられたプロセスでよく使用されます。
SIGKILL以来、SIGTERMシャットダウンするプロセスを尋ねると同等です。カーネルには、要求に準拠しないプロセスを終了するオプションが必要です。プロセスがハングした場合、SIGKILLオプションを使用して、プロセスを明示的にシャットダウンします。
killで送信できるすべてのシグナルのリストには、-lオプションを使用できます-
[root@CentOS]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@CentOS rdc]#
SIGHUPを使用してシステムを再起動します。
[root@CentOS]# pgrep systemd
1
464
500
643
15071
[root@CentOS]# kill -HUP 1
[root@CentOS]# pgrep systemd
1
464
500
643
15196
15197
15198
[root@CentOS]#
pkill管理者がプロセス名でkillシグナルを送信できるようにします。
[root@CentOS]# pgrep ping
19450
[root@CentOS]# pkill -9 ping
[root@CentOS]# pgrep ping
[root@CentOS]#
killallすべてのプロセスを強制終了します。すべてのユーザーのすべてのプロセスを強制終了するため、rootとしてkillallを使用する場合は注意が必要です。
[root@CentOS]# killall chrome
無料コマンド
freeは、システムのメモリをすばやくチェックするためによく使用される非常に単純なコマンドです。使用済みの物理メモリとスワップメモリの合計量が表示されます。
[root@CentOS]# free
total used free shared buff/cache available
Mem: 1879668 526284 699796 10304 653588 1141412
Swap: 3145724 0 3145724
[root@CentOS]#
素敵なコマンド
nice管理者は、CPU使用率の観点からプロセスのスケジューリング優先度を設定できます。基本的に、カーネルがプロセスまたはジョブのCPUタイムスライスをスケジュールする方法が優れています。デフォルトでは、プロセスにはCPUリソースへの同等のアクセス権が与えられていると想定されています。
まず、topを使用して、現在実行中のプロセスの良さを確認しましょう。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged
690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl]
9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract
9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a
9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f
9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon
1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
NIが描いたNICEコラムに焦点を当てたいと思います。優しさの範囲は、-20から正の19までの範囲です。-20は、与えられた最高の優先順位を表します。
nohup nice --20 ping www.google.com &
renice
reniceを使用すると、すでに実行されているプロセスの現在の優先度を変更できます。
renice 17 -p 30727
上記のコマンドは、pingプロセスコマンドの優先度を下げます。
Firewalldは、CentOS上のiptablesのデフォルトのフロントエンドコントローラーです。firewalldフロントエンドは、生のiptablesの上2つの主な利点を有しています-
チェーンとルールを抽象化するゾーンを構成および実装するのが簡単です。
ルールセットは動的です。つまり、設定が変更または変更されても、ステートフル接続は中断されません。
Firewalldはiptablesのラッパーであり、代替ではないことを忘れないでください。カスタムiptablesコマンドはfirewalldで使用できますが、ファイアウォール機能を壊さないようにfirewalldを使用することをお勧めします。
まず、firewalldが開始されて有効になっていることを確認しましょう。
[root@CentOS rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago
Docs: man:firewalld(1)
Main PID: 712 (firewalld)
Memory: 34.7M
CGroup: /system.slice/firewalld.service
└─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
ご覧のとおり、firewalldはアクティブ(起動時に開始)であり、現在実行中です。非アクティブまたは開始されていない場合は、-を使用できます
systemctl start firewalld && systemctl enable firewalld
これでfirewalldサービスが構成されたので、それが機能していることを確認しましょう。
[root@CentOS]# firewall-cmd --state
running
[root@CentOS]#
ご覧のとおり、firewalldサービスは完全に機能しています。
Firewalldはゾーンの概念に基づいて機能します。ゾーンは、ネットワークマネージャーを介してネットワークインターフェイスに適用されます。これについては、ネットワークの構成で説明します。ただし、現時点では、デフォルトでは、デフォルトゾーンを変更すると、デフォルト状態の「デフォルトゾーン」のままになっているネットワークアダプタが変更されます。
すぐに使用できるfirewalldの各ゾーンを簡単に見てみましょう。
シニア番号 | ゾーンと説明 |
---|---|
1 | drop 信頼レベルが低い。すべての着信接続とパケットがドロップされ、ステートフルネスを介して発信接続のみが可能になります |
2 | block 着信接続には、要求が禁止されていることをイニシエーターに通知するicmpメッセージが返信されます。 |
3 | public すべてのネットワークが制限されています。ただし、選択した着信接続は明示的に許可できます |
4 | external NAT用にfirewalldを設定します。内部ネットワークはプライベートのままですが、到達可能です |
5 | dmz 特定の着信接続のみが許可されます。DMZ分離のシステムに使用されます |
6 | work デフォルトでは、システムが安全な作業環境にあると仮定して、ネットワーク上のより多くのコンピューターを信頼します |
7 | hone デフォルトでは、より多くのサービスがフィルタリングされていません。システムがNFS、SAMBA、SSDPなどのサービスが使用されるホームネットワーク上にあると仮定します |
8 | trusted ネットワーク上のすべてのマシンが信頼されています。ほとんどの着信接続は自由に許可されます。This is not meant for interfaces exposed to the Internet |
使用する最も一般的なゾーンは、パブリック、ドロップ、職場、および自宅です。
各共通ゾーンが使用されるいくつかのシナリオは次のとおりです。
public−管理者が使用する最も一般的なゾーンです。これにより、カスタム設定を適用し、LANでの操作に関するRFC仕様に従うことができます。
drop−ドロップを使用するタイミングの良い例は、セキュリティ会議、パブリックWiFi、またはインターネットに直接接続されたインターフェイスです。dropは、ICMPプローブを含むすべての一方的な要求が悪意のあるものであると想定します。したがって、州外のリクエストは返信を受け取りません。ドロップの欠点は、厳密なRFCコンプライアンスを必要とする特定の状況でアプリケーションの機能を壊す可能性があることです。
work−半安全な企業LANを使用しています。すべてのトラフィックが適度に安全であると見なすことができる場所。これは、WiFiではなく、IDS、IPS、物理的セキュリティまたは802.1xが導入されている可能性があることを意味します。また、LANを使用する人々にも精通している必要があります。
home−ホームLANを使用しています。LAN上のすべてのシステムとユーザーに対して個人的に責任があります。LAN上のすべてのマシンを知っており、侵害されたものはありません。多くの場合、信頼できる個人間でメディアを共有するために新しいサービスが提供され、セキュリティのために余分な時間をかける必要はありません。
ゾーンとネットワークインターフェイスは、1対多のレベルで機能します。1つのネットワークインターフェースには、一度に1つのゾーンしか適用できません。一方、ゾーンは多くのインターフェースに同時に適用できます。
利用可能なゾーンと現在適用されているゾーンを見てみましょう。
[root@CentOS]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
カスタマイズされたルールをfirewalldに追加する準備はできましたか?
まず、外部からポートスキャナーにボックスがどのように見えるかを見てみましょう。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00046s latency).
Not shown: 1023 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds
bash-3.2#
ポート80への着信要求を許可しましょう。
まず、デフォルトで適用されているゾーンを確認します。
[root@CentOs]# firewall-cmd --get-default-zone
public
[root@CentOS]#
次に、ポート80を許可するルールを現在のデフォルトゾーンに設定します。
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp
success
[root@CentOS]#
次に、ポート80の接続を許可した後、チェックボックスをオンにします。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00053s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
bash-3.2#
これで、80までの一方的なトラフィックが許可されます。
デフォルトのゾーンをドロップして、ポートスキャンがどうなるか見てみましょう。
[root@CentOS]# firewall-cmd --set-default-zone=drop
success
[root@CentOS]# firewall-cmd --get-default-zone
drop
[root@CentOs]#
次に、より安全なゾーンでネットワークインターフェイスを使用してホストをスキャンしましょう。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00094s latency).
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered
Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds
bash-3.2#
これで、すべてが外部からフィルタリングされます。
以下に示すように、ホストはドロップ時にICMPping要求に応答することさえありません。
bash-3.2# ping 10.211.55.1
PING 10.211.55.1 (10.211.55.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
デフォルトのゾーンを再びパブリックに設定しましょう。
[root@CentOs]# firewall-cmd --set-default-zone=public
success
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
それでは、現在のフィルタリングルールセットを公開して確認しましょう。
[root@CentOS]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@CentOS rdc]#
構成されているように、ポート80フィルタールールは実行中の構成のコンテキスト内にのみあります。これは、システムが再起動されるか、firewalldサービスが再起動されると、ルールが破棄されることを意味します。
間もなくhttpdデーモンを構成するので、変更を永続的にしましょう-
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@CentOS]# systemctl restart firewalld
[root@CentOS]#
これで、パブリックゾーンのポート80ルールは、再起動とサービスの再起動の間も保持されます。
以下は、firewall-cmdで適用される一般的なfirewalldコマンドです。
コマンド | アクション |
---|---|
ファイアウォール-cmd--get-zones | インターフェイスに適用できるすべてのゾーンを一覧表示します |
Firewall-cmd —ステータス | Firewalldサービスの現在のステータスを返します |
ファイアウォール-cmd--get-default-zone | 現在のデフォルトゾーンを取得します |
Firewall-cmd --set-default-zone = <zone> | デフォルトゾーンを現在のコンテキストに設定します |
ファイアウォール-cmd--get-active-zone | インターフェイスに適用されたコンテキストで現在のゾーンを取得します |
Firewall-cmd --zone = <zone> --list-all | 提供されたゾーンの構成を一覧表示します |
Firewall-cmd --zone = <zone> --addport = <ポート/トランスポートプロトコル> | ゾーンフィルターにポートルールを適用します |
-永続的 | ゾーンへの変更を永続的にします。フラグは変更コマンドとインラインで使用されます |
これらは、firewalldの管理と構成の基本的な概念です。
CentOSでホストベースのファイアウォールサービスを構成することは、より高度なネットワークシナリオでは複雑な作業になる可能性があります。CentOSでのfirewalldとiptablesの高度な使用法と構成には、チュートリアル全体が必要です。ただし、日常のタスクの大部分を完了するのに十分な基本事項を示しました。
PHPは、今日使用されている最も多作なWeb言語の1つです。CentOSにLAMPスタックをインストールすることは、すべてのシステム管理者が実行する必要があることであり、おそらく遅かれ早かれです。
従来のLAMPスタックは、(L)inux(A)pache(M)ySQL(P)HPで構成されています。
CentOSのLAMPスタックには3つの主要なコンポーネントがあります-
- Webサーバー
- Web開発プラットフォーム/言語
- データベースサーバー
Note− LAMPスタックという用語には、PostgreSQL、MariaDB、Perl、Python、Ruby、NGINXWebサーバーなどのテクノロジーも含まれます。
このチュートリアルでは、CentOS GNU Linuxの従来のLAMPスタックであるApache Webサーバー、MySQLデータベースサーバー、およびPHPを使用します。
実際にはMariaDBを使用します。MySQL構成ファイル、データベース、およびテーブルは、MariaDBに対して透過的です。MariaDBは、MySQLではなく標準のCentOSリポジトリに含まれるようになりました。これは、OracleがMySQLの開発を引き継いだため、ライセンスとオープンソースコンプライアンスの制限によるものです。
最初に行う必要があるのは、Apacheをインストールすることです。
[root@CentOS]# yum install httpd
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
extras/7/x86_64/primary_d
| 121 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirror.sigmanet.com
* extras: linux.mirrors.es.net
* updates: mirror.eboundhost.com
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-45.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-45.el7.centos for package:
httpd-2.4.6-45.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.645.el7.centos.x86_64
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-45.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Installed:
httpd.x86_64 0:2.4.6-45.el7.centos
Dependency Installed:
httpd-tools.x86_64 0:2.4.6-45.el7.centos
mailcap.noarch 0:2.1.41-2.el7
Complete!
[root@CentOS]#
httpdサービスを設定しましょう。
[root@CentOS]# systemctl start httpd && systemctl enable httpd
それでは、firewalldを介してWebサーバーにアクセスできることを確認しましょう。
bash-3.2# nmap -sS -p 1-1024 -T 5 -sV 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-28 02:00 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00054s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS))
Service detection performed. Please report any incorrect results at
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds bash-3.2#
nmapサービスプローブからわかるように、ApacheWebサーバーはCentOSホスト上の要求をリッスンして応答しています。
MySQLデータベースサーバーをインストールします
[root@CentOS rdc]# yum install mariadb-server.x86_64 && yum install mariadb-
devel.x86_64 && mariadb.x86_64 && mariadb-libs.x86_64
MariaDB用に以下のリポジトリパッケージをインストールしています-
mariadb-server.x86_64
メインのMariaDBサーバーデーモンパッケージ。
mariadb-devel.x86_64
ファイルは、MySQL / MariaDBと互換性のあるソースからコンパイルする必要があります。
mariadb.x86_64
コマンドラインからMariaDBサーバーを管理するためのMariaDBクライアントユーティリティ。
mariadb-libs.x86_64
MySQL / MariaDBサポートでコンパイルされた他のアプリケーションに必要となる可能性のあるMariaDBの共通ライブラリ。
それでは、MariaDBサービスを開始して有効にしましょう。
[root@CentOS]# systemctl start mariadb
[root@CentOS]# systemctl enable mariadb
Note− Apacheとは異なり、ホストベースのファイアウォール(firewalld)を介したMariaDBへの接続は有効にしません。データベースサーバーを使用する場合、リモートソケットアクセスが特に必要でない限り、ローカルソケット接続のみを許可することがセキュリティのベストプラクティスと見なされます。
MariaDBサーバーが接続を受け入れていることを確認しましょう。
[root@CentOS#] netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
[root@CentOS rdc]#
ご覧のとおり、MariaDBはポート3306tcpでリッスンしています。ホストベースのファイアウォール(firewalld)は、ポート3306への着信接続をブロックしたままにします。
PHPをインストールして構成する
[root@CentOS#] yum install php.x86_64 && php-common.x86_64 && php-mysql.x86_64
&& php-mysqlnd.x86_64 && php-pdo.x86_64 && php-soap.x86_64 && php-xml.x86_64
一般的な互換性のために、次のphpパッケージをインストールすることをお勧めします-
- php-common.x86_64
- php-mysql.x86_64
- php-mysqlnd.x86_64
- php-pdo.x86_64
- php-soap.x86_64
- php-xml.x86_64
[root@CentOS]# yum install -y php-common.x86_64 php-mysql.x86_64 php-
mysqlnd.x86_64 php-pdo.x86_64 php-soap.x86_64 php-xml.x86_64
これは、/ var / www / html /のApacheWebルートにある単純なphpファイルです。
[root@CentOS]# cat /var/www/html/index.php
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
<?php
echo "We are now running PHP on GNU Centos Linux!<br />"
?>
</body>
</html>
[root@CentOS]#
ページの所有グループを、httpデーモンが実行されているシステムユーザーに変更しましょう。
[root@CentOS]# chgrp httpd /var/www/html/index.php && chmod g+rx /var/www/html/index.php
---
ncatを介して手動で要求された場合。
bash-3.2# ncat 10.211.55.1 80
GET / index.php
HTTP/1.1 200 OK
Date: Sat, 28 Jan 2017 12:06:02 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 137
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
We are now running PHP on GNU Centos Linux!<br />
</body>
</html>
bash-3.2#
PHPとLAMPは、非常に人気のあるWebプログラミングテクノロジーです。LAMPのインストールと構成は、CentOS管理者としてのニーズのリストに必ず登場します。使いやすいCentOSパッケージは、ソースコードからApache、MySQL、およびPHPをコンパイルすることから多くの作業を要しました。
Pythonは広く使用されているインタープリター言語であり、Linux(およびその他のオペレーティングシステム)でスクリプト化されたアプリケーションをコーディングする世界にプロ意識をもたらしています。Perlがかつて業界標準であったところ、Pythonは多くの点でPerlを上回りました。
PythonとPerlのいくつかの長所は次のとおりです。
洗練の急速な進歩
言語に標準的なライブラリ
コードの可読性は言語定義で考えられています
GUIサポートからWeb開発まですべてのための多くの専門的なフレームワーク
Pythonは、Perlが実行できるすべてのことを実行でき、多くの場合、より良い方法で実行できます。PerlはまだLinux管理者のツールボックスの中でその位置を占めていますが、Pythonを学ぶことはスキルセットとして素晴らしい選択です。
Pythonの最大の欠点は、Pythonの長所に関連している場合があります。歴史上、Pythonはもともとプログラミングを教えるために設計されました。時々、「読みやすい」と「正しい方法で物事を行う」というそのコア基盤は、単純なコードを書くときに不必要な複雑さを引き起こす可能性があります。また、その標準ライブラリにより、バージョン2.Xから3.Xへの移行で問題が発生しました。
Pythonスクリプトは、実際には、オペレーティングシステムの機能に不可欠な機能のためにCentOSのコアで使用されます。このため、開発用Python環境をCentOSのコアPython環境から分離することが重要です。
手始めに、Pythonには現在2つのバージョンがあります。 Python 2.X そして Python 3.X。
バージョン2.Xはすぐに減価償却に近づいていますが(そして数年前から)、両方の段階はまだ活発に生産されています。Pythonの2つのアクティブなバージョンの理由は、基本的にバージョン2.Xの欠点を修正することでした。これには、バージョン3.Xの一部のコア機能を、一部のバージョン2.Xスクリプトをサポートできない方法でやり直す必要がありました。
基本的に、この移行を克服する最善の方法は次のとおりです。3.X用に開発し、レガシースクリプト用の最新の2.Xバージョンに対応します。現在、CentOS 7.Xは、バージョン2.Xの半最新リビジョンに依存しています。
この記事の執筆時点で、Pythonの最新バージョンは次のとおりです。 3.4.6 そして 2.7.13。
これがPythonの結論を混乱させたり、引き出したりしないようにしてください。Python環境のセットアップは非常に簡単です。Pythonフレームワークとライブラリを使用すると、このタスクは実際には非常に簡単に実行できます。
Python環境をセットアップする前に、適切な環境が必要です。まず、CentOSのインストールが完全に更新されていることを確認し、いくつかの構築ユーティリティをインストールしましょう。
Step 1 −CentOSを更新します。
[root@CentOS]# yum -y update
Step 2 −ビルドユーティリティをインストールします。
[root@CentOS]# yum -y groupinstall "development tools"
Step 3 −必要なパッケージをいくつかインストールします。
[root@CentOS]# yum install -y zlib-dev openssl-devel sqlite-devel bip2-devel
次に、現在のPython2.Xおよび3.Xをソースからインストールする必要があります。
- 圧縮アーカイブをダウンロードする
- ファイルを抽出する
- ソースコードをコンパイルする
/ usr / src /にPythonインストールごとにビルドディレクトリを作成することから始めましょう。
[root@CentOS]# mkdir -p /usr/src/pythonSource
それでは、それぞれのソースtarballをダウンロードしましょう-
[root@CentOS]# wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
[root@CentOS]# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
次に、アーカイブからそれぞれを抽出する必要があります。
Step 1 − xz-libsをインストールし、tarballを抽出します。
[root@CentOS]# yum install xz-libs
[root@CentOS python3]# xz -d ./*.xz
[root@CentOS python3]# ls
Python-2.7.13.tar Python-3.6.0.tar
[root@CentOS python3]#
Step 2 −各インストーラーをtarballから解凍します。
[root@CentOS]# tar -xvf ./Python-2.7.13.tar
[root@CentOS]# tar -xvf ./Python-3.6.0.tar
Step 3 −各ディレクトリを入力し、configureスクリプトを実行します。
[root@CentOS]# ./configure --prefix=/usr/local
root@CentOS]# make altinstall
Note −必ず使用してください altinstallインストールしません。これにより、CentOSとPythonの開発バージョンが分離されます。そうしないと、CentOSの機能が損なわれる可能性があります。
これで、コンパイルプロセスが開始されます。コーヒーを1杯飲み、完了するまで15分の休憩を取ります。Pythonに必要なすべての依存関係をインストールしたので、コンパイルプロセスはエラーなしで完了するはずです。
Pythonの最新の2.Xバージョンがインストールされていることを確認しましょう。
[root@CentOS Python-2.7.13]# /usr/local/bin/python2.7 -V
Python 2.7.13
[root@CentOS Python-2.7.13]#
Note − Python2.Xの開発環境を指すシバン行のプレフィックスを付ける必要があります。
[root@CentOS Python-2.7.13]# cat ver.py
#!/usr/local/bin/python2.7
import sys
print(sys.version)
[root@CentOS Python-2.7.13]# ./ver.py
2.7.13 (default, Jan 29 2017, 02:24:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
そのように、バージョン2.Xと3.Xには別々のPythonインストールがあります。ここから、それぞれとユーティリティなどを使用できますpip そして virtualenv Python環境とパッケージのインストールを管理する負担をさらに軽減します。
Rubyは、Web開発とLinux管理の両方に最適な言語です。Rubyには、これまでに説明したすべての言語(PHP、Python、Perl)に見られる多くの利点があります。
Rubyをインストールするには、管理者がRuby環境を簡単にインストールして管理できるようにするrbenvを介してブートストラップするのが最善です。
Rubyをインストールするもう1つの方法は、Rubyの標準CentOSパッケージです。すべての利点を備えたrbenvメソッドを使用することをお勧めします。CentOSパッケージは、Rubyに精通していない人にとっては簡単です。
まず、rbenvインストーラーに必要な依存関係をいくつか取得しましょう。
- git-core
- zlib
- zlib-devel
- gcc-c++
- patch
- readline
- readline-devel
- libyaml-devel
- libffi-devel
- openssl-devel
- make
- bzzip2
- autoconf
- automake
- libtool
- bison
- curl
- sqlite-devel
CentOSのインストール時に選択したオプションと役割によっては、これらのパッケージのほとんどがすでにインストールされている場合があります。依存関係を必要とするパッケージをインストールする際の頭痛の種を減らすことができるため、不明な点をすべてインストールすることをお勧めします。
[root@CentOS]# yum -y install git-core zlib zlib-devel gcc-c++ patch readline
readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf
automake libtool bison curl sqlite-devel
方法1:動的Ruby開発環境用のrbenv
今Rubyを使用するユーザーとして-
[rdc@CentOS ~]$ git clone https://github.com/rbenv/rbenv.git
[rdc@CentOS ~]$ https://github.com/rbenv/ruby-build.git
ruby-buildはrbenvにインストール機能を提供します−
Note− install.shを実行する前に、rootまたは管理ユーザーに切り替える必要があります
[rdc@CentOS ruby-build]$ cd ~/ruby-build
[rdc@CentOS ruby-build]# ./install.sh
rbenvのシェルを設定し、正しいオプションがインストールされていることを確認しましょう。
[rdc@CentOS ~]$ source ~/rbenv/rbenv.d/exec/gem-rehash.bash [rdc@CentOS ruby-build]$ ~/rbenv/bin/rbenv
rbenv 1.1.0-2-g4f8925a
Usage: rbenv <command> [<args>]
いくつかの便利なrbenvコマンドは次のとおりです。
コマンド | アクション |
---|---|
地元 | ローカルアプリケーション固有のRubyバージョンを設定または表示します |
グローバル | グローバルRubyバージョンを設定または表示します |
シェル | シェル固有のRubyバージョンを設定または表示します |
インストール | ruby-buildを使用してRubyバージョンをインストールします |
アンインストール | 特定のRubyバージョンをアンインストールします |
再ハッシュ | rbenvシムを再ハッシュします(実行可能ファイルをインストールした後にこれを実行します) |
バージョン | 現在のRubyバージョンとその起源を表示します |
バージョン | rbenvで使用可能なすべてのRubyバージョンを一覧表示します |
これ | 実行可能ファイルへのフルパスを表示します |
どこから | 指定された実行可能ファイルを含むすべてのRubyバージョンを一覧表示します |
Rubyをインストールしましょう-
[rdc@CentOS bin]$ ~/rbenv/bin/rbenv install -v 2.2.1
コンパイル完了後−
[rdc@CentOS ~]$ ./ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
[rdc@CentOS ~]$
これで、Ruby2.Xブランチの更新された動作バージョンを備えた動作するRuby環境ができました。
方法2:CentOSパッケージからRubyをインストールする
これが最も簡単な方法です。ただし、CentOSからパッケージ化されたバージョンとgemによって制限される場合があります。本格的な開発作業には、rbenvメソッドを使用してRubyをインストールすることを強くお勧めします。
Ruby、必要な開発パッケージ、およびいくつかの一般的なgemをインストールします。
[root@CentOS rdc]# yum install -y ruby.x86_64 ruby-devel.x86_64 ruby-
libs.x86_64 ruby-gem-json.x86_64 rubygem-rake.noarch
残念ながら、Rubyのバージョンはやや古くなっています。
[root@CentOS rdc]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[root@CentOS rdc]#
Perl長い間存在しています。もともとは、テキストファイルの解析に使用されるレポート言語として設計されました。人気が高まるにつれ、Perlは強力なスクリプト言語に必要なモジュールサポートまたはCPAN、ソケット、スレッド、およびその他の機能を追加しました。
PHP、Python、またはRubyに対するPerlの最大の利点は、最小限の手間で物事を成し遂げることです。このPerlの哲学は、物事を正しい方法で行うことを常に意味するわけではありません。ただし、Linuxでの管理タスクの場合、Perlはスクリプト言語の頼りになる選択肢と見なされます。
PythonやRubyに対するPerlのいくつかの利点は次のとおりです。
強力なテキスト処理
Perlは、スクリプトの記述を迅速かつ汚くします(通常、PerlスクリプトはPythonまたはRubyの同等のものよりも数十行短くなります)
Perlは(ほぼ)何でもできます
Perlのいくつかの欠点は次のとおりです。
構文が混乱する可能性があります
Perlのコーディングスタイルはユニークであり、コラボレーションを妨げる可能性があります
Perlは実際にはオブジェクト指向ではありません
通常、Perlを使用する場合、標準化とベストプラクティスについてはあまり考慮されていません。
Perl、Python、またはPHPのいずれを使用するかを決定するとき。次の質問をする必要があります-
- このアプリケーションにはバージョン管理が必要ですか?
- 他の人がコードを変更する必要がありますか?
- 他の人がこのアプリケーションを使用する必要がありますか?
- このアプリケーションを別のマシンまたはCPUアーキテクチャで使用することはありますか?
上記のすべての答えが「いいえ」の場合、Perlは良い選択であり、最終結果の点で物事をスピードアップする可能性があります。
これを踏まえて、最新バージョンのPerlを使用するようにCentOSサーバーを構成しましょう。
Perlをインストールする前に、Perlのサポートを理解する必要があります。公式には、Perlは最後の2つの安定したバージョンとしてのみサポートされています。そのため、開発環境をCentOSバージョンから分離しておく必要があります。
分離の理由は、誰かがPerlのツールをCentOSコミュニティにリリースした場合、CentOSに同梱されているPerlで動作するように変更される可能性が高いためです。ただし、開発目的で最新バージョンをインストールする必要もあります。Pythonと同様に、CentOSは、最先端ではなく信頼性に重点を置いたPerlを出荷しています。
CentOS7で現在のバージョンのPerlを確認してみましょう。
[root@CentOS]# perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
現在、Perl5.16.3を実行しています。この記事の執筆時点での最新バージョンは次のとおりです。perl-5.24.0
コードで最新のPerlモジュールを使用できるように、バージョンをアップグレードしたいと考えています。幸い、Perl環境を維持し、CentOSバージョンのPerlを分離しておくための優れたツールがあります。いわゆるperlbrew。
PerlBrewをインストールしましょう。
[root@CentOS]# curl -L https://install.perlbrew.pl | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 170 100 170 0 0 396 0 --:--:-- --:--:-- --:--:-- 397
100 1247 100 1247 0 0 1929 0 --:--:-- --:--:-- --:--:-- 1929
Perl Brewがインストールされたので、最新バージョンのPerl用の環境を作成しましょう。
まず、perlbrewインストールをブートストラップするために、現在インストールされているバージョンのPerlが必要になります。したがって、CentOSリポジトリから必要なPerlモジュールをいくつか入手しましょう。
Note −利用可能な場合、CentOSPerlインストールではCPANではなくCentOSPerlモジュールを常に使用したいと考えています。
Step 1 − CentOS Perl Make :: Makerモジュールをインストールします。
[root@CentOS]# yum -y install perl-ExtUtils-MakeMaker.noarch
Step 2 −最新バージョンのperlをインストールします。
[root@CentOS build]# source ~/perl5/perlbrew/etc/bashrc
[root@CentOS build]# perlbrew install -n -j4 --threads perl-5.24.1
Perlのインストール用に選択したオプションは次のとおりです。
n −テストなし
j4 −インストールルーチン用に4つのスレッドを並行して実行します(クアッドコアCPUを使用しています)
threads −Perlのスレッドサポートを有効にする
インストールが正常に実行されたら、最新のPerl環境に切り替えましょう。
[root@CentOS]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
A sub-shell is launched with perl-5.24.1 as the activated perl. Run 'exit' to finish it.
[root@CentOS]# perl -v
This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linuxthread-multi
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2017, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the GNU General
Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on this system
using "man perl" or "perldoc perl". If you have access to the Internet, point your
browser at http://www.perl.org/, the Perl Home Page.
[root@CentOS]#
私たちのperlbrew環境のコンテキスト内で実行されているperlバージョンを印刷する単純なperlスクリプト-
[root@CentOS]# cat ./ver.pl
#!/usr/bin/perl
print $^V . "\n";
[root@CentOS]# perl ./ver.pl
v5.24.1
[root@CentOS]#
perlをインストールしたら、perlbrewのcpanm-を使用してcpanモジュールをロードできます。
[root@CentOS]# perl-brew install-cpanm
それでは、cpanmインストーラーを使用して、perlbrewで現在のPerlバージョン5.24.1を使用してLWPモジュールを作成しましょう。
Step 1 −現在のPerlバージョンのコンテキストに切り替えます。
[root@CentOS ~]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
サブシェルは、perl-5.24.1をアクティブ化されたperlとして起動されます。'exit'を実行して終了します。
[root@CentOS ~]#
Step 2 −LWPユーザーエージェントPerlモジュールをインストールします。
[root@CentOS ~]# ~/perl5/perlbrew/bin/cpanm -i LWP::UserAgent
Step 3 −次に、新しいCPANモジュールを使用してPerl環境をテストしましょう。
[root@CentOS ~]# cat ./get_header.pl
#!/usr/bin/perl
use LWP;
my $browser = LWP::UserAgent->new(); my $response = $browser->get("http://www.slcc.edu/"); unless(!$response->is_success) {
print $response->header("Server");
}
[root@CentOS ~]# perl ./get_header.pl
Microsoft-IIS/8.5 [root@CentOS ~]#
あります!Perl Brewを使用すると、perl環境を簡単に分離でき、Perlで得られるベストプラクティスと見なすことができます。
LDAPとして知られています Light Weight Directory Access Protocolディレクトリから知られている企業内のX.500サービスコンテナにアクセスするために使用されるプロトコルです。Windows Serverの管理に精通している人は、LDAPをActiveDirectoryと本質的に非常に似ていると考えることができます。これは、WindowsワークステーションをOpenLDAPCentOSエンタープライズに絡み合わせるという広く使用されている概念ですらあります。一方、CentOS Linuxワークステーションは、リソースを共有し、Windowsドメインの基本機能に参加できます。
LDAPをCentOSにDirectoryServer Agent、Directory System Agent、またはDSA(これらの頭字語はすべて同じ)として展開することは、NDSでDirectoryTree構造を使用する古いNovellNetwareインストールに似ています。
LDAPの簡単な歴史
LDAPは基本的に、エンタープライズリソースを使用してX.500ディレクトリにアクセスするための効率的な方法として作成されました。X.500とLDAPはどちらも同じ特性を共有し、非常に類似しているため、LDAPクライアントはいくつかのヘルパーを使用してX.500ディレクトリにアクセスできます。LDAPには、という独自のディレクトリサーバーもあります。slapd。LDAPとDAPの主な違いは、軽量バージョンはTCP上で動作するように設計されていることです。
一方でDAPは完全なOSIモデルを使用しています。今日のネットワークにおけるインターネット、TCP / IP、およびイーサネットの卓越性の出現により、特定のレガシーコンピューティングモデルの外部でDAPとネイティブX.500エンタープライズディレクトリの両方を使用するディレクトリサービスの移植に遭遇することはめったにありません。
CentOSLinuxのopenldapで使用される主なコンポーネントは次のとおりです。
openldap | LDAPサポートライブラリ |
---|---|
openldap-server | LDAPサーバー |
openldap-クライアント | LDAPクライアントユーティリティ |
openldap-devel | OpenLDAPの開発ライブラリ |
compay-openldap | OpenLDAP共有ライブラリ |
平手打ち | OpenLDAPのディレクトリサーバーデーモン |
slurpd | エンタープライズドメイン全体のLDAPレプリケーションに使用されます |
Note −企業に名前を付けるときは、を使用することをお勧めします .localTLD。.netまたは.comを使用すると、オンラインドメインインフラストラクチャと内部ドメインインフラストラクチャを分離するときに問題が発生する可能性があります。acme.comを外部と内部の両方の運用に使用している企業の余分な作業を想像してみてください。したがって、acme.comまたはacme.netと呼ばれるインターネットリソースを用意することをお勧めします。次に、ローカルネットワークエンタープライズリソースはacme.localとして表されます。これにはDNSレコードの構成が必要ですが、シンプルさ、雄弁さ、セキュリティの面でメリットがあります。
CentOSにOpenLDAPをインストールする
YUMからopenldap、openldap-servers、openldap-clients、migrationstoolsをインストールします。
[root@localhost]# yum -y install openldap openldap-servers openldap-clients
migration tools
Loaded plugins: fastestmirror, langpacks
updates
| 3.4 kB 00:00:00
updates/7/x86_64/primary_db
| 2.2 MB 00:00:05
Determining fastest mirrors
(1/2): extras/7/x86_64/primary_db
| 121 kB 00:00:01
(2/2): base/7/x86_64/primary_db
| 5.6 MB 00:00:16
Package openldap-2.4.40-13.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package openldap-clients.x86_64 0:2.4.40-13.el7 will be installed
---> Package openldap-servers.x86_64 0:2.4.40-13.el7 will be installed
--> Finished Dependency Resolution
base/7/x86_64/group_gz
| 155 kB 00:00:00
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
openldap-clients x86_64
2.4.40-13.el7 base 188 k
openldap-servers x86_64
2.4.40-13.el7 base 2.1 M
Transaction Summary
===============================================================================
===============================================================================
Install 2 Packages
Total download size: 2.3 M
Installed size: 5.3 M
Downloading packages:
Installed:
openldap-clients.x86_64 0:2.4.40-13.el7
openldap-servers.x86_64 0:2.4.40-13.el7
Complete!
[root@localhost]#
それでは、slapdサービスを開始して有効にしましょう-
[root@centos]# systemctl start slapd
[root@centos]# systemctl enable slapd
この時点で、/ etc / openldapにopenldap構造があることを確認しましょう。
root@localhost]# ls /etc/openldap/
certs check_password.conf ldap.conf schema slapd.d
[root@localhost]#
次に、slapdサービスが実行されていることを確認します。
root@centos]# netstat -antup | grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1641/slapd
tcp6 0 0 :::389 :::* LISTEN 1641/slapd
[root@centos]#
次は、私たちの設定でき開き、LDAPのインストールを。
システムLDAPユーザーが作成されていることを確認してください。
[root@localhost]# id ldap
uid=55(ldap) gid=55(ldap) groups=55(ldap)
[root@localhost]#
LDAP資格情報を生成します。
[root@localhost]# slappasswd
New password:
Re-enter new password:
{SSHA}20RSyjVv6S6r43DFPeJgASDLlLoSU8g.a10
[root@localhost]#
slappasswdからの出力を保存する必要があります。
OpenLDAPの設定
Step 1 −ドメインのLDAPを構成し、管理ユーザーを追加します。
まず、openLDAP環境をセットアップします。以下は、ldapmodifyコマンドで使用するテンプレートです。
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: <output from slap
ldapmodifyコマンドを使用して、/ etc / openldap / slapd.d / cn = config / olcDatabase = {1} monitor.ldifに変更を加えます。
[root@localhost]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/rdc/Documents/db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
[root@localhost cn=config]#
変更されたLDAP構成を確認しましょう。
root@linux1 ~]# vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
[root@centos]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 a163f14c
dn: olcDatabase = {2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 1bd9aa2a-8516-1036-934b-f7eac1189139
creatorsName: cn=config
createTimestamp: 20170212022422Z
olcSuffix: dc=vmnet,dc=local
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
olcRootPW:: e1NTSEF1bUVyb1VzZTRjc2dkYVdGaDY0T0k =
entryCSN: 20170215204423.726622Z#000000#000#000000
modifiersName: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20170215204423Z
[root@centos]#
ご覧のとおり、LDAPエンタープライズの変更は成功しました。
次に、OpenLDAP用の自己署名SSL証明書を作成します。これにより、エンタープライズサーバーとクライアント間の通信が保護されます。
Step 2 −OpenLDAPの自己署名証明書を作成します。
opensslを使用して、自己署名SSL証明書を作成します。次の章に進み、Create LDAP SSL Certificate with opensslOpenLDAPとの通信を保護するための手順については。次に、SSL証明書が構成されると、OpenLDAPエンタープライズ構成が完了します。
Step 3 −証明書との安全な通信を使用するようにOpenLDAPを設定します。
次の情報を使用してvimでcerts.ldifファイルを作成します-
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/yourGeneratedCertFile.pem
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/youGeneratedKeyFile.pem
次に、もう一度ldapmodifyコマンドを使用して、変更をOpenLDAP構成にマージします。
[root@centos rdc]# ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
[root@centos]#
最後に、OpenLADP構成をテストしましょう。
[root@centos]# slaptest -u
config file testing succeeded
[root@centos]#
Step 4 −slapdデータベースを設定します。
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG &&
chown ldap:ldap /var/lib/ldap/*
OpenLDAPスキーマを更新します。
コサインおよびnisLDAPスキーマを追加します。
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
最後に、エンタープライズスキーマを作成し、それを現在のOpenLDAP構成に追加します。
以下はvmnetと呼ばれるドメイン用です。ldapadmと呼ばれるLDAP管理者を持つローカル。
dn: dc=vmnet,dc=local
dc: vmnet
objectClass: top
objectClass: domain
dn: cn=ldapadm ,dc=vmnet,dc=local
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou = People,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: People
dn: ou = Group,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: Group
最後に、これを現在のOpenLDAPスキーマにインポートします。
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f ./base.ldif
Enter LDAP Password:
adding new entry "dc=vmnet,dc=local"
adding new entry "cn=ldapadm ,dc=vmnet,dc=local"
adding new entry "ou=People,dc=vmnet,dc=local"
adding new entry "ou=Group,dc=vmnet,dc=local"
[root@centos]#
Step 5 − OpenLDAPEnterpriseユーザーを設定します。
vimまたはお気に入りのテキストエディタを開き、次の形式をコピーします。これは、「vmnet.local」LDAPドメインの「entacct」という名前のユーザー用に設定されています。
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
次に、保存された上記のファイルをOpenLdapスキーマにインポートします。
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f entuser.ldif
Enter LDAP Password:
adding new entry "uid=entacct,ou=People,dc=vmnet,dc=local"
[root@centos]#
ユーザーがLDAPEnterpriseにアクセスする前に、次のようにパスワードを割り当てる必要があります。
ldappasswd -s password123 -W -D "cn=ldapadm,dc=entacct,dc=local" -x "uid=entacct
,ou=People,dc=vmnet,dc=local"
-s ユーザーのパスワードを指定します
-x 更新されたパスワードが適用されるユーザー名です
-D LDAPスキーマに対して認証するための*識別名 "です。
最後に、Enterpriseアカウントにログインする前に、OpenLDAPエントリを確認しましょう。
[root@centos rdc]# ldapsearch -x cn=entacct -b dc=vmnet,dc=local
# extended LDIF
#
# LDAPv3
# base <dc=vmnet,dc=local> with scope subtree
# filter: cn=entacct
# requesting: ALL
#
# entacct, People, vmnet.local
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword:: e2NyeXB0fXg=
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
/ etc / passwdや/ etc / groupsなどをOpenLDAP認証に変換するには、移行ツールを使用する必要があります。これらは、migrationtoolsパッケージに含まれています。次に、/ usr / share / migrationtoolsにインストールします。
[root@centos openldap-servers]# ls -l /usr/share/migrationtools/
total 128
-rwxr-xr-x. 1 root root 2652 Jun 9 2014 migrate_aliases.pl
-rwxr-xr-x. 1 root root 2950 Jun 9 2014 migrate_all_netinfo_offline.sh
-rwxr-xr-x. 1 root root 2946 Jun 9 2014 migrate_all_netinfo_online.sh
-rwxr-xr-x. 1 root root 3011 Jun 9 2014 migrate_all_nis_offline.sh
-rwxr-xr-x. 1 root root 3006 Jun 9 2014 migrate_all_nis_online.sh
-rwxr-xr-x. 1 root root 3164 Jun 9 2014 migrate_all_nisplus_offline.sh
-rwxr-xr-x. 1 root root 3146 Jun 9 2014 migrate_all_nisplus_online.sh
-rwxr-xr-x. 1 root root 5267 Jun 9 2014 migrate_all_offline.sh
-rwxr-xr-x. 1 root root 7468 Jun 9 2014 migrate_all_online.sh
-rwxr-xr-x. 1 root root 3278 Jun 9 2014 migrate_automount.pl
-rwxr-xr-x. 1 root root 2608 Jun 9 2014 migrate_base.pl
Step 6 −最後に、slapdサービスへのアクセスを許可して、リクエストを処理できるようにする必要があります。
firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload
LDAPクライアントアクセスを構成する
LDAPクライアントアクセスを構成するには、クライアントにopenldap、open-ldapクライアント、およびnss_ldapのパッケージが必要です。
クライアントシステムのLDAP認証の構成は少し簡単です。
Step 1 −依存パッケージをインストールする−
# yum install -y openldap-clients nss-pam-ldapd
Step 2−authconfigを使用してLDAP認証を構成します。
authconfig --enableldap --enableldapauth --ldapserver=10.25.0.1 --
ldapbasedn="dc=vmnet,dc=local" --enablemkhomedir --update
Step 3 −nslcdサービスを再起動します。
systemctl restart nslcd
TLSとSSLの背景
TLSは、SSLに続く、ソケット層セキュリティの新しい標準です。TLSは、SSLを進歩させる他のセキュリティおよびプロトコルラッパー機能とともに、より優れた暗号化標準を提供します。多くの場合、TLSとSSLという用語は同じ意味で使用されます。ただし、プロのCentOS管理者として、それぞれを区別する違いと履歴に注意することが重要です。
SSLはバージョン3.0に移行します。SSLは、Netscapeの下で業界標準として開発および宣伝されました。NetscapeがAOL(90年代に人気のあるISP、別名America Online)によって購入された後、AOLはSSLのセキュリティ改善に必要な変更を実際に宣伝することはありませんでした。
バージョン3.1で、SSLテクノロジーはオープンシステム標準に移行し、TLSに変更されました。SSLの著作権はまだAOLが所有していたため、新しい用語が作成されました。TLS - Transport Layer Security。したがって、TLSは実際にはSSLとは異なることを認識することが重要です。特に、古いSSLテクノロジーには既知のセキュリティ問題があり、一部は今日では廃止されていると見なされています。
Note−このチュートリアルでは、テクノロジー3.1以降について話すときにTLSという用語を使用します。次に、SSL SSLテクノロジー3.0と下位に特定のコメント。
SSLとTLSのバージョン管理
次の表は、TLSとSSLのバージョン管理が互いにどのように関連するかを示しています。SSLバージョン3.2に関して話す人が何人かいると聞きました。しかし、彼らはおそらくブログを読んで用語を理解しました。プロの管理者として、私たちは常に標準的な用語を使用したいと考えています。したがって、SSLは、過去のテクノロジーを参照する必要があります。簡単なことで、CentOSの求職者を熟練したCS専攻のように見せることができます。
TLS | SSL |
---|---|
- | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLSは、今日のインターネットのユーザーにとって重要な2つの主要な機能を実行します。1つは、パーティが誰であるかを確認することです。authentication。二、それは提供しますend-to-end encryption このネイティブ機能を欠いている上位レベルのプロトコル(ftp、http、電子メールプロトコルなど)のトランスポート層で。
1つ目は、当事者が誰であり、エンドツーエンドの暗号化としてセキュリティにとって重要であるかを確認します。消費者が支払いを行うことを許可されていないウェブサイトへの暗号化された接続を持っている場合、財務データは依然として危険にさらされています。これは、すべてのフィッシングサイトにないものです。a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA。
適切に署名された証明書がないことを回避するには、2つの方法しかありません。ユーザーをだまして自己署名証明書のWebブラウザーの信頼を許可するか、ユーザーが技術に精通しておらず、信頼できる証明書の重要性を知らないことを望みます。権限(またはCA)。
このチュートリアルでは、自己署名証明書と呼ばれるものを使用します。つまり、この証明書にWebサイトにアクセスするすべてのWebブラウザーで信頼済みのステータスを明示的に付与しないと、ユーザーがサイトにアクセスするのを思いとどまらせるエラーが表示されます。次に、自己署名証明書を使用してサイトにアクセスする前に、ユーザーがいくつかのアクションを実行できるようにします。セキュリティのために、これは良いことであることを忘れないでください。
opensslのインストールと構成
opensslは、TLSのオープンソース実装の標準です。opensslは、Linux、BSDディストリビューション、OS Xなどのシステムで使用され、Windowsもサポートしています。
opensslは、トランスポート層のセキュリティを提供し、開発者向けの認証とエンドツーエンド暗号化の詳細なプログラミングを抽象化するため、重要です。これが、TLSを使用するほぼすべてのオープンソースアプリケーションでopensslが使用される理由です。また、Linuxのすべての最新バージョンにデフォルトでインストールされます。
デフォルトでは、opensslは少なくともバージョン5以降のCentOSにインストールする必要があります。念のため、YUM経由でopensslをインストールしてみましょう。YUMはパッケージがすでにインストールされているかどうかを通知するのに十分インテリジェントなので、installを実行するだけです。互換性の理由で古いバージョンのCentOSを実行している場合、yum -yインストールを実行すると、opensslが半最近のハートブリードの脆弱性に対して更新されます。
インストーラーを実行すると、opensslが実際に更新されていることがわかりました。
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
OpenLDAPの自己署名証明書を作成する
これは、以前のOpenLDAPインストールの自己署名を作成する方法です。
自己署名OpenLDAP証明書を作成します。
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#
これで、OpenLDAP証明書を/ etc / openldap / certs /に配置する必要があります。
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
ご覧のとおり、証明書とキーの両方が/ etc / openldap / certs /ディレクトリにインストールされています。最後に、権限は現在rootユーザーによって所有されているため、それぞれの権限を変更する必要があります。
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#
ApacheWebサーバーの自己署名証明書を作成する
このチュートリアルでは、Apacheがすでにインストールされていることを前提としています。別のチュートリアル(CentOSファイアウォールの構成)でApacheをインストールしました。今後のチュートリアルでは、Apacheの高度なインストールについて説明します。したがって、Apacheをまだインストールしていない場合は、それに従ってください。
次の手順を使用してApacheHTTPdをインストールできるようになったら-
Step 1 − Apachehttpdサーバー用のmod_sslをインストールします。
まず、mod_sslを使用してApacheを構成する必要があります。YUMパッケージマネージャーを使用すると、これは非常に簡単です-
[root@centos]# yum -y install mod_ssl
次に、Apacheデーモンをリロードして、Apacheが新しい構成を使用するようにします。
[root@centos]# systemctl reload httpd
この時点で、ApacheはローカルホストでTLS接続をサポートするように構成されています。
Step 2 −自己署名SSL証明書を作成します。
まず、プライベートTLSキーディレクトリを設定しましょう。
[root@centos]# mkdir /etc/ssl/private
[root@centos]# chmod 700 /etc/ssl/private/
Note−ルートのみがこのディレクトリへの読み取り/書き込みアクセス権を持っていることを確認してください。ワールド読み取り/書き込みアクセスを使用すると、秘密鍵を使用して、盗聴されたトラフィックを復号化できます。
証明書とキーファイルを生成します。
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
Note −ドメイン名が登録されていない場合は、サーバーのパブリックIPアドレスを使用できます。
私たちの証明書を見てみましょう-
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
これは、opensslコマンドで使用した各オプションの説明です-
コマンド | アクション |
---|---|
req -X509 | キー管理にはX.509CSR管理PKI標準を使用します。 |
-ノード | パスフレーズで証明書を保護しないでください。Apacheは、パスフレーズを中断することなく証明書を使用できる必要があります。 |
-2555日 | 証明書の有効期間を7年または2555日に通知します。期間は必要に応じて調整できます。 |
-newkey rsa:2048 | 2048ビット長のRSAを使用してキーと証明書の両方を生成するように指定されています。 |
次に、クライアントとPFSをネゴシエートするためのDiffie-Helimanグループを作成します。
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
これには5〜15分かかります。
Perfect Forward Secrecy−秘密鍵が危険にさらされた場合にセッションデータを保護するために使用されます。これにより、セッションごとに一意のクライアントとサーバー間で使用されるキーが生成されます。
次に、Perfect ForwardSecrecy構成を証明書に追加します。
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
キーファイルと証明書ファイルを使用するようにApacheを構成する
/etc/httpd/conf.d/ssl.confに変更を加えます−
ssl.confに次の変更を加えます。ただし、その前に、元のファイルをバックアップする必要があります。viやemcasなどの高度なテキストエディタで本番サーバーに変更を加える場合は、編集を行う前に常に構成ファイルをバックアップすることをお勧めします。
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
ssl.confの正常に機能するコピーをホームフォルダのルートにコピーした後、編集を続けましょう。
- Locate
- DocumentRootとServerNameの両方を次のように編集します。
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRootこれは、デフォルトのApacheディレクトリへのパスです。このフォルダには、Webサーバーまたはサイトのデフォルトページを要求するHTTPリクエストを表示するデフォルトページがあります。
ServerNameは、サーバーのIPアドレスまたはホスト名のいずれかであるサーバー名です。TLSの場合、ホスト名を使用して証明書を作成することをお勧めします。OpenLdapチュートリアルから、ローカルエンタープライズドメインにcentosのホスト名を作成しました:vmnet.local
ここで、次の行をコメントアウトしたいと思います。
SSLプロトコル
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
次に、証明書と秘密鍵と公開鍵のペアの場所をApacheに知らせます。
自己署名証明書ファイルへのパスを指定します
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
最後に、ポート443を介したhttpsへのインバウンド接続を許可する必要があります。
この章では、Apache HTTPサーバーが誕生した背景について少し学び、CentOS Linux7に最新の安定バージョンをインストールします。
ApacheWebServerの簡単な歴史
Apacheは、長い間使用されてきたWebサーバーです。実際、http自体の存在とほぼ同じくらいです!
Apacheは、NCSAとしても知られるNational Center for SupercomputingApplicationsでのかなり小さなプロジェクトとして始まりました。90年代半ばには、「httpd」と呼ばれるように、インターネット上で群を抜いて最も人気のあるWebサーバープラットフォームであり、市場シェアの約90%以上を占めていました。
当時は簡単なプロジェクトでした。ウェブマスターとして知られる熟練したITスタッフは、ウェブサーバープラットフォームとウェブサーバーソフトウェアの保守、およびフロントエンドとバックエンドの両方のサイト開発を担当していました。httpdの中核は、プラグインまたは拡張機能と呼ばれるカスタムモジュールを使用する機能でした。ウェブマスターはまた、コアサーバーソフトウェアにパッチを書くのに十分なスキルを持っていました。
90年代後半のいつか、httpdのシニア開発者兼プロジェクトマネージャーはNCSAを離れて他のことをしました。これにより、最も人気のあるWebデーモンが停滞した状態になりました。
httpdの使用が非常に広まったため、経験豊富なhttpd Webマスターのグループが、httpdの将来についてサミットを呼びかけました。最高の拡張機能とパッチを調整して、現在の安定したリリースに適用することが決定されました。その後、httpサーバーの現在の祖父が生まれ、ApacheHTTPサーバーと名付けられました。
Little Known Historical Fact− Apacheは、ネイティブアメリカンの戦士の部族にちなんで名付けられていません。それは実際、ひねりを加えて造られ、名前が付けられました:多くの才能のあるコンピューター科学者からの多くの修正(またはパッチ)から作られています:patchy または Apache。
CentOS Linux7に現在の安定バージョンをインストールする
Step 1 −yum経由でhttpdをインストールします。
yum -y install httpd
この時点で、ApacheHTTPサーバーはyum経由でインストールされます。
Step 2 −httpdのニーズに固有のhttpd.confファイルを編集します。
デフォルトのApacheインストールでは、Apacheの構成ファイルの名前はhttpd.confで、/ etc / httpd /にあります。それでは、vimで開きましょう。
httpd.confの最初の数行がvimで開かれました-
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
CentOSインストールがhttpポート80からのhttpリクエストを処理できるように、次の変更を行います。
リスニングホストとポート
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
ここから、特定のポートまたはIPアドレスでリッスンするようにApacheを変更します。たとえば、8080などの代替ポートでhttpdサービスを実行する場合、またはWebサーバーが個別のIPアドレスを持つ複数のインターフェイスで構成されている場合です。
聴く
ApacheがすべてのIPアドレスのすべてのリスニングデーモンに接続するのを防ぎます。これは、IPv6またはIPv4トラフィックのみの指定を停止するのに役立ちます。または、マルチホームホスト上のすべてのネットワークインターフェイスにバインドすることもできます。
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
Listen 10.0.0.25:80
#Listen 80
DocumentRoot
「ドキュメントルート」は、Apacheがサーバーにアクセスしたときにリクエストを処理するためのインデックスファイルを探すデフォルトのディレクトリです。 http://www.yoursite.com/ ドキュメントルートからインデックスファイルを取得して提供します。
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
Step 3 −httpdサービスを開始して有効にします。
[root@centos rdc]# systemctl start httpd && systemctl reload httpd
[root@centos rdc]#
Step 4 −ポート80要求へのアクセスを許可するようにファイアウォールを構成します。
[root@centos]# firewall-cmd --add-service=http --permanent
Maria DBで使用するためにCentOSを構成するときに簡単に触れたように、CentOS 7yumリポジトリにはネイティブMySQLパッケージがありません。これを説明するには、MySQLでホストされるリポジトリを追加する必要があります。
CentOSLinuxでのMariaDBとMySQL
注意すべきことの1つは、MySQLにはMariaDBとは異なる基本依存関係のセットが必要になるということです。また、MySQLを使用すると、CentOSの概念と哲学が破られます。最大の信頼性を実現するように設計された製品パッケージです。
したがって、MariaとMySQLのどちらを使用するかを決定するときは、2つのオプションを検討する必要があります。現在のDBスキーマはMariaで機能しますか?マリアよりもMySQLをインストールするとどのような利点がありますか?
MariaコンポーネントはMySQL構造に対して100%透過的であり、ライセンスが向上することで効率が向上します。やむを得ない理由がない限り、MariaDBを使用するようにCentOSを構成することをお勧めします。
CentOSでMariaを支持する最大の理由は、次のとおりです。
ほとんどの人はMariaDBを使用します。問題が発生した場合は、マリアのサポートが強化されます。
CentOSはMariaで実行するように設計されています。したがって、マリアはより良い安定性を提供します。
MariaはCentOSで正式にサポートされています。
MySQLリポジトリをダウンロードして追加します
MySQLリポジトリを-からダウンロードしてインストールします。
http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
Step 1 −リポジトリをダウンロードします。
リポジトリは、簡単にインストールできるように、rpmパッケージに便利にパッケージ化されています。wget −でダウンロードできます
[root@centos]# wget http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
--2017-02-26 03:18:36-- http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 104.86.98.130
Step 2 −YUMからMySQLをインストールします。
これで、yumパッケージマネージャーを使用してMySQLをインストールできます-
[root@centos]# yum -y install mysql-server
Step 3 −MySQLデーモンサービスを開始して有効にします。
[root@centos]# systemctl start mysql
[root@centos]# systemctl enable mysql
Step 4 −MySQLサービスが稼働していることを確認します。
[root@centos]# netstat -antup | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 6572/mysqld
[root@centos]#
注-ファイアウォールルールの通過は許可されません。MySQLを使用するように構成するのが一般的ですUnix Domain Sockets。これにより、LAMPスタックのWebサーバーのみがローカルでMySQLデータベースにアクセスできるようになり、データベースソフトウェアで攻撃ベクトルの完全な次元が取り出されます。
CentOS 7サーバーから電子メールを送信するには、最新のメール転送エージェント(MTA)を構成するためのセットアップが必要です。Mail Transfer Agentは、SMTPを介してシステムユーザーまたは企業のインターネットドメインに送信メールを送信するデーモンです。
このチュートリアルでは、ローカルで使用するためにデーモンをセットアップするプロセスのみを説明していることに注意してください。業務用のMTAを設定するための高度な構成については詳しく説明しません。これは、DNS、ブラックリストに登録されていない静的なルーティング可能なIPアドレスの取得、高度なセキュリティとサービス設定の構成など、多くのスキルの組み合わせです。つまり、このチュートリアルは、基本的な構成を理解することを目的としています。このチュートリアルは、インターネットに面したホストのMTA構成には使用しないでください。
セキュリティと管理のしやすさの両方に重点を置いて、 PostfixこのチュートリアルのMTAとして。CentOSの古いバージョンにインストールされているデフォルトのMTAはSendmailです。Sendmail素晴らしいMTAです。しかし、作者の謙虚な意見の中で、PostfixはMTAに関する以下の注意事項に取り組むときにスイートスポットになります。CentOSの最新バージョンでは、PostfixがデフォルトのMTAとしてSendmailに取って代わりました。
Postfixは、広く使用され、十分に文書化されたMTAです。それは積極的に維持され、開発されています。最小限の構成を念頭に置いて(これは単なる電子メールです)、システムリソースを効率的に使用できます(これも単なる電子メールです)。
Step 1 − YUM PackageManagerからPostfixをインストールします。
[root@centos]# yum -y install postfix
Step 2 −Postfix設定ファイルを設定します。
Postfix設定ファイルは/etc/postfix/main.cfにあります
単純なPostfix設定では、特定のホストに対して、ホスト名、ドメイン、起点、inet_interfaces、および宛先を設定する必要があります。
Configure the hostname−ホスト名は、Postfixホストの完全修飾ドメイン名です。OpenLDAPの章では、CentOSボックスにドメインvmnet.localのcentosという名前を付けました。この章ではそれを守りましょう。
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
myhostname = centos.vmnet.local
Configure the domain−上記のように、このチュートリアルで使用するドメインはvmnet.localです。
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component. # $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = vmnet.local
Configure the origin −単一のサーバーとドメインを設定する場合は、次のセクションのコメントを解除し、デフォルトのPostfix変数をそのままにしておく必要があります。
# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname, # which is fine for small sites. If you run a domain with multiple # machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# [email protected].
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
myorigin = $myhostname myorigin = $mydomain
Configure the network interfaces− Postfixは、単一のネットワークインターフェイスと、そのインターフェイスに関連付けられているすべてのプロトコルとIPアドレスをリッスンします。これは、Postfixのデフォルト設定を有効のままにしておくだけで実行できます。
# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
# Enable IPv4, and IPv6 if supported
inet_protocols = all
Step 3 −PostfixのSASLサポートを構成します。
SASL認証のサポートがない場合、Postfixはローカルユーザーからのメールの送信のみを許可します。または、ユーザーがローカルドメインから電子メールを送信すると、中継拒否エラーが発生します。
Note − SASL または Simple Application Security Layer Frameworkは、さまざまなアプリケーション層プロトコル間でさまざまな手法をサポートする認証用に設計されたフレームワークです。認証メカニズムをアプリケーション層プロトコルに任せる代わりに、SASL開発者(およびコンシューマー)は、現在の認証プロトコルを活用して、利便性やより安全な認証(セキュリティで保護されたサービスへのアクセスについて言えば)が組み込まれていない可能性のある高レベルのプロトコルを実現します。
「cyrus-sasl *パッケージ」をインストールします
[root@centos]# yum -y install cyrus-sasl
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.forethought.net
* extras: repos.dfw.quadranet.com
* updates: mirrors.tummy.com
Package cyrus-sasl-2.1.26-20.el7_2.x86_64 already installed and latest version
Nothing to do
SASL認証用に/etc/postfix/main.cfを設定します
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
main.confの私のSASLオプション
##Configure SASL Options Entries:
smtpd_sasl_auth_enable = yes
smptd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtp_sasl_type = dovecot
smtp_sasl_path = private/auth/etc
Step 4 −着信SMTPサービスを許可するようにFirewallDを構成します。
[root@centos]# firewall-cmd --permanent --add-service=smtp
success
[root@centos]# firewall-cmd --reload
success
[root@centos]#
次に、CentOSホストがポート25(SMTP)での要求を許可して応答していることを確認しましょう。
Nmap scan report for 172.16.223.132
Host is up (0.00035s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
20/tcp closed ftp-data
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
389/tcp open ldap
443/tcp open https
MAC Address: 00:0C:29:BE:DF:5F (VMware)
ご覧のとおり、SMTPはリッスンしており、デーモンは内部LANからの要求に応答しています。
DovecotIMAPとPOP3サーバーをインストールします
Dovecotは、小規模から大規模の組織の受信メールのニーズを処理するように設計された、安全なIMAPおよびPOP3サーバーです。CentOSでの使用が多いため、CentOSおよびMTASASLプロバイダーの受信メールサーバーをインストールおよび構成する例としてDovecotを使用します。
前述のように、DNSのMXレコードを構成したり、サービスがドメインのメールを処理できるようにする安全なルールを作成したりすることはありません。したがって、これらのサービスをインターネットに面したホストに設定するだけで、SPFレコードのないセキュリティホールの余地が残る可能性があります。
Step 1 −Dovecotをインストールします。
[root@centos]# yum -y install dovecot
Step 2 −dovecotを構成します。
dovecotのメイン設定ファイルは/etc/dovecot.confにあります。まず、メインの構成ファイルをバックアップします。編集を行う前に、常に構成ファイルをバックアップすることをお勧めします。このようにして、id(たとえば)の改行はテキストエディタによって破棄され、何年もの変更が失われます。現在のバックアップを本番環境にコピーするため、元に戻すのは簡単です。
dovecotのプロトコルとデーモンサービスを有効にする
# Protocols we want to be serving.
protocols = imap imaps pop3 pop3s
ここで、dovecotデーモンが起動時にリッスンできるようにする必要があります-
[root@localhost]# systemctl start dovecot
[root@localhost]# systemctl enable dovecot
Dovecotが指定されたポートでローカルでimap、pop3、imapsecured、およびpop3securedをリッスンしていることを確認しましょう。
[root@localhost]# netstat -antup | grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 4368/dovecot
tcp6 0 0 :::110 :::* LISTEN 4368/dovecot
tcp6 0 0 :::143 :::* LISTEN 4368/dovecot
tcp6 0 0 :::993 :::* LISTEN 4368/dovecot
tcp6 0 0 :::995 :::* LISTEN 4368/dovecot
[root@localhost]#
ご覧のとおり、dovecotは指定されたポートでIPv4とIPv4をリッスンしています。
POP3 | 110 |
POP3 | 995 |
IMAP | 143 |
IMAP | 993 |
次に、ファイアウォールルールをいくつか作成する必要があります。
[root@localhost]# firewall-cmd --permanent --add-port=110/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=143/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=995/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=993/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
当社の受信メールサーバは、要求のために受け入れているPOP3、POP3S、IMAP、およびIMAPSをLAN上のホストに。
Port Scanning host: 192.168.1.143
Open TCP Port: 21 ftp
Open TCP Port: 22 ssh
Open TCP Port: 25 smtp
Open TCP Port: 80 http
Open TCP Port: 110 pop3
Open TCP Port: 143 imap
Open TCP Port: 443 https
Open TCP Port: 993 imaps
Open TCP Port: 995 pop3s
CentOSへのFTPのインストールについて詳しく説明する前に、FTPの使用法とセキュリティについて少し学ぶ必要があります。 FTPは、コンピュータシステム間でファイルを転送するための非常に効率的で洗練されたプロトコルです。FTPは、ここ数十年にわたって使用され、改良されてきました。待ち時間のあるネットワークを介してファイルを効率的に転送したり、速度を上げたりするには、FTPが最適です。SAMBAやSMBよりもそうです。
ただし、FTPにはいくつかのセキュリティ問題があります。実際、いくつかの深刻なセキュリティ問題。FTPは、非常に弱いプレーンテキスト認証方法を使用します。このため、認証されたセッションはsFTPまたはFTPSに依存する必要があります。ここで、TLSはログインおよび転送セッションのエンドツーエンド暗号化に使用されます。
上記の警告がありますが、昔ながらのFTPは、今日でもビジネス環境で使用されています。主な用途は、匿名FTPファイルリポジトリです。これは、ファイルをダウンロードまたはアップロードするための認証が保証されていない状況です。匿名FTPの使用例は次のとおりです。
大規模なソフトウェア会社は依然として匿名のftpリポジトリを使用しており、インターネットユーザーはシェアウェアやパッチをダウンロードできます。
インターネットユーザーが公開ドキュメントをアップロードおよびダウンロードできるようにします。
一部のアプリケーションは、暗号化されたアーカイブログまたは構成ファイルをFTP経由でリポジトリに自動的に送信します。
したがって、CentOS管理者として、FTPをインストールして構成できることは、依然として設計されたスキルです。
と呼ばれるFTPデーモンを使用します vsFTP、または非常に安全なFTPデーモン。vsFTPは、しばらくの間開発で使用されてきました。安全で、インストールと構成が簡単で、信頼性が高いという評判があります。
Step 1 − YUM PackageManagerを使用してvsFTPdをインストールします。
[root@centos]# yum -y install vsftpd.x86_64
Step 2 −systemctlを使用して起動時に起動するようにvsFTPを構成します。
[root@centos]# systemctl start vsftpd
[root@centos]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-
user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Step 3 −FTP制御および転送セッションを許可するようにFirewallDを構成します。
[root@centos]# firewall-cmd --add-service=ftp --permanent
success
[root@centos]#
FTPデーモンが実行されていることを確認します。
[root@centos]# netstat -antup | grep vsftp
tcp6 0 0 :::21 :::* LISTEN 13906/vsftpd
[root@centos]#
Step 4 −匿名アクセス用にvsFTPDを構成します。
ルートFTPディレクトリを作成します
[root@centos]# mkdir /ftp
FTPルートの所有者とグループをftpに変更します
[root@centos]# chown ftp:ftp /ftp
Set minimal permissions for FTP root:
[root@centos]# chmod -R 666 /ftp/
[root@centos]# ls -ld /ftp/
drw-rw-rw-. 2 ftp ftp 6 Feb 27 02:01 /ftp/
[root@centos]#
この場合、ルートFTPツリー全体への読み取り/書き込みアクセスをユーザーに許可しました。
/etc/vsftpd/vsftpd.confを構成します」
[root@centos]# vim /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
vsftp.confファイルの次のディレクティブを変更する必要があります。
anon_mkdir_write_enable = YESのコメントを解除して、匿名アップロードを有効にします
アップロードされたファイルをシステムのftpユーザーが所有するようにchownします
chown_uploads = YES
chown_username = ftp
vsftpで使用されるシステムユーザーをftpユーザーに変更します:nopriv_user = ftp
サインインする前にユーザーが読むためのカスタムバナーを設定します。
ftpd_banner =匿名FTPリポジトリへようこそ。すべての接続が監視され、ログに記録されます。
IPv4接続のみを設定しましょう-
リッスン=はい
listen_ipv6 = NO
次に、vsftpサービスを再起動またはHUPして、変更を適用する必要があります。
[root@centos]# systemctl restart vsftpd
FTPホストに接続して、FTPデーモンが応答していることを確認しましょう。
[root@centos rdc]# ftp 10.0.4.34
Connected to localhost (10.0.4.34).
220 Welcome to our Anonymous FTP Repo. All connections are monitored and logged.
Name (localhost:root): anonymous
331 Please specify the password.
Password:
'230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
管理者としてのCentOSでのリモート管理について話すときは、2つの方法を検討します。
- コンソール管理
- GUI管理
リモートコンソール管理
リモートコンソール管理とは、sshなどのサービスを介してコマンドラインから管理タスクを実行することを意味します。CentOS Linuxを効果的に使用するには、管理者として、コマンドラインに習熟している必要があります。Linuxの中心は、コンソールから使用するように設計されています。今日でも、一部のシステム管理者はコマンドの能力を好み、物理端末やGUIがインストールされていない最低限のLinuxボックスを実行することでハードウェアのコストを節約しています。
リモートGUI管理
リモートGUI管理は通常、リモートXセッションまたはVNCなどのGUIアプリケーション層プロトコルの2つの方法で実行されます。それぞれに長所と短所があります。ただし、ほとんどの場合、VNCは管理に最適です。これにより、XWindowsプロトコルをネイティブにサポートしていないWindowsやOSXなどの他のオペレーティングシステムからのグラフィカルな制御が可能になります。
リモートXセッションの使用は、X-WindowのウィンドウマネージャーとXで実行されているDesktopManagerの両方にネイティブです。ただし、Xセッションアーキテクチャ全体は主にLinuxで使用されます。すべてのシステム管理者が、リモートXセッションを確立するためのLinuxラップトップを手元に持っているわけではありません。したがって、VNCサーバーの適合バージョンを使用するのが最も一般的です。
VNCの最大の欠点は次のとおりです。VNCは、リモートXセッションなどのマルチユーザー環境をネイティブにサポートしていません。したがって、エンドユーザーへのGUIアクセスには、リモートXSessionが最適です。ただし、主にCentOSサーバーのリモート管理に関心があります。
複数の管理者とリモートXセッションを使用する数百人のエンドユーザー向けにVNCを構成する方法について説明します。
リモートコンソールアクセス用のSSHによるセキュリティの基盤を築く
ssh または Secure ShellLinuxサーバーをリモート管理するための標準になりました。telnetとは異なりSSHは、通信の信頼性とエンドツーエンド暗号化にTLSを使用します。適切に構成されている場合、管理者はパスワードとサーバーの両方がリモートで信頼されていることをかなり確信できます。
SSHを設定する前に、基本的なセキュリティと最も一般的でないアクセスについて少し話しましょう。SSHがデフォルトのポート22で実行されている場合。遅かれ早かれ、一般的なユーザー名とパスワードに対するブルートフォース辞書攻撃を受けることになります。これはちょうど領土に付属しています。拒否ファイルに追加するホストの数に関係なく、それらは毎日異なるIPアドレスから受信されます。
いくつかの一般的なルールを使用すると、積極的な手順を実行して、悪意のあるユーザーに時間を無駄にすることができます。以下は、本番サーバーでのリモート管理にSSHを使用する際に従うべきセキュリティのいくつかのルールです-
一般的なユーザー名またはパスワードは絶対に使用しないでください。システム上のユーザー名は、システムのデフォルトにしたり、次のように会社の電子メールアドレスに関連付けたりしないでください。[email protected]
SSH経由でルートアクセスまたは管理アクセスを許可しないでください。SSHで認証されたら、一意のユーザー名とsuを使用してrootまたは管理アカウントを作成します。
パスワードポリシーは必須です:「This&IS&a&GUD&P @ ssW0rd&24&me」のような複雑なSSHユーザーパスワード。数か月ごとにパスワードを変更して、ブルートフォース攻撃の影響を受けにくくします。
放棄されたアカウントまたは長期間使用されていないアカウントを無効にします。採用担当マネージャーが、1か月間面接を行わないことを示すボイスメールを持っている場合。たとえば、テクノロジーに精通した個人が多くの時間を費やすことにつながる可能性があります。
毎日ログを監視してください。システム管理者として、システムとセキュリティのログを確認するために、毎朝少なくとも30〜40分を費やしてください。求められた場合は、積極的に行動しない時間がないことを全員に知らせてください。この方法は、問題がエンドユーザーや企業の利益に現れる前に警告の兆候を特定するのに役立ちます。
Note On Linux Security− Linux管理に関心のある人は、現在のサイバーセキュリティのニュースとテクノロジーを積極的に追求する必要があります。他のオペレーティングシステムが侵害されているという話をよく耳にしますが、安全でないLinuxボックスは、サイバー犯罪者にとって求められている宝物です。高速インターネット接続でのLinuxのパワーにより、熟練したサイバー犯罪者はLinuxを使用して他のオペレーティングシステムへの攻撃を利用できます。
リモートアクセス用のSSHをインストールして構成する
Step 1 −SSHサーバーとすべての依存パッケージをインストールします。
[root@localhost]# yum -y install openssh-server
'Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.centos.net
* extras: repos.dfw.centos.com
* updates: centos.centos.com
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:6.6.1p1-33.el7_3 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Step 2 −シェルアクセス用に追加するために安全な定期的な使用を行います。
[root@localhost ~]# useradd choozer
[root@localhost ~]# usermod -c "Remote Access" -d /home/choozer -g users -G
wheel -a choozer
Note− SSHアクセスが認証されると、rootにsuできるようにする新しいユーザーをwheelグループに追加しました。また、一般的な単語リストにはないユーザー名を使用しました。これにより、SSHが攻撃されたときにアカウントがロックアウトされることはありません。
sshdサーバーの構成設定を保持するファイルは/ etc / ssh / sshd_configです。
最初に編集したい部分は-
LoginGraceTime 60m
PermitRootLogin no
Step 3−SSHデーモンsshdをリロードします。
[root@localhost]# systemctl reload sshd
ログアウトの猶予期間を60分に設定することをお勧めします。一部の複雑な管理タスクは、デフォルトの2分を超える場合があります。変更を構成または調査するときにSSHセッションがタイムアウトすることほどイライラすることはありません。
Step 4 −ルート資格情報を使用してログインしてみましょう。
bash-3.2# ssh centos.vmnet.local
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Step 5-私たちは、もはやとssh経由でリモートからログインすることができ、ルート資格情報。それでは、非特権ユーザーアカウントにログインし、rootアカウントにsuしてみましょう。
bash-3.2# ssh [email protected]
[email protected]'s password:
[choozer@localhost ~]$ su root
Password:
[root@localhost choozer]#
Step 6−最後に、SSHDサービスが起動時にロードされ、firewalldが外部SSH接続を許可することを確認しましょう。
[root@localhost]# systemctl enable sshd
[root@localhost]# firewall-cmd --permanent --add-service=ssh
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
これでSSHがセットアップされ、リモート管理の準備が整いました。企業の境界によっては、企業LANの外部でSSHリモート管理を許可するようにパケットフィルタリング境界デバイスを構成する必要がある場合があります。
リモートCentOS管理用にVNCを構成する
CentOS 6〜7でVNCを介してリモートCentOS管理を有効にする方法はいくつかありますが、最も簡単ですが、最も制限的な方法は、vinoというパッケージを使用することです。Vinoは、Gnomeデスクトッププラットフォームを中心に設計されたLinux用の仮想ネットワークデスクトップ接続アプリケーションです。したがって、インストールはGnomeDesktopで完了したと見なされます。Gnomeデスクトップがインストールされていない場合は、続行する前にインストールしてください。Vinoは、デフォルトでGnomeGUIインストールでインストールされます。
GnomeでVinoとの画面共有を構成するには、画面共有のCentOSシステム環境設定に移動します。
Applications->System Tools->Settings->Sharing
VNCデスクトップ共有の構成に関する注意事項-
Disable New Connections must ask for access−このオプションでは、すべての接続をOKするために物理的なアクセスが必要になります。このオプションは、誰かが物理デスクトップにいない限り、リモート管理を防ぎます。
Enable Require a password−これはユーザーパスワードとは別のものです。仮想デスクトップへのアクセスを制御しますが、ロックされたデスクトップにアクセスするにはユーザーパスワードが必要です(これはセキュリティに役立ちます)。
Forward UP&P Ports: If available leave disabled− UP&Pポートを転送すると、レイヤー3デバイスのユニバーサルプラグアンドプレイ要求が送信され、ホストへのVNC接続が自動的に許可されます。これは欲しくない。
vinoがVNCポート5900でリッスンしていることを確認してください。
[root@localhost]# netstat -antup | grep vino
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4873/vino-server
tcp6 0 0 :::5900 :::* LISTEN 4873/vino-server
[root@localhost]#
次に、着信VNC接続を許可するようにファイアウォールを構成しましょう。
[root@localhost]# firewall-cmd --permanent --add-port=5900/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost rdc]#
最後に、ご覧のとおり、CentOS Boxを接続して、WindowsまたはOSXのいずれかのVNCクライアントで管理できます。
SSHについて説明したのと同じVNCのルールに従うことが重要です。SSHと同様に、VNCはIP範囲全体で継続的にスキャンされ、脆弱なパスワードがないかテストされます。コンソールタイムアウトを使用してデフォルトのCentOSログインを有効のままにしておくと、リモートVNCセキュリティに役立つことにも注意してください。攻撃者はVNCとユーザーパスワードを必要とするため、画面共有パスワードが異なり、ユーザーパスワードと同じように推測しにくいことを確認してください。
VNC画面共有パスワードを入力した後、ロックされたデスクトップにアクセスするためのユーザーパスワードも入力する必要があります。
Security Note−デフォルトでは、VNCは暗号化されたプロトコルではありません。したがって、VNC接続は暗号化のためにSSHを介してトンネリングする必要があります。
VNCを介してSSHトンネルを設定する
SSHトンネルを設定すると、VNC接続をトンネリングするためのSSH暗号化のレイヤーが提供されます。もう1つの優れた機能は、SSH圧縮を使用して、VNCGUI画面の更新に別の圧縮レイヤーを追加することです。CentOSサーバーの管理を扱う場合、より安全で高速なことは常に良いことです。
したがって、VNC接続を開始するクライアントから、リモートSSHトンネルを設定しましょう。このデモンストレーションでは、OS Xを使用しています。最初に、rootにsudo-sを実行する必要があります。
bash-3.2# sudo -s
password:
ユーザーパスワードを入力すると、#プロンプトが表示されたルートシェルが作成されます-
bash-3.2#
それでは、SSHトンネルを作成しましょう。
ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
このコマンドを分解してみましょう-
ssh −ローカルのsshユーティリティを実行します
-f −タスクが完全に実行された後、sshはバックグラウンドで実行する必要があります
[email protected] −VNCサービスをホストしているCentOSサーバー上のリモートsshユーザー
-L 2200:192.168.1.143:5900 −トンネルを作成します[ローカルポート]:[リモートホスト]:[VNCサービスのリモートポート]
-N リモートシステムでコマンドを実行したくないことをsshに通知します
bash-3.2# ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
[email protected]'s password:
リモートsshユーザーのパスワードを正常に入力すると、sshトンネルが作成されます。さあ、クールな部分です!接続するには、VNCクライアントをトンネルのポート(この場合はポート2200)のローカルホストに向けます。以下は、MacラップトップのVNCクライアントの構成です。
そして最後に、リモートVNCデスクトップ接続です!
SSHトンネリングの優れた点は、ほとんどすべてのプロトコルに使用できることです。SSHトンネルは通常、ISPによる出力および入力ポートフィルタリングをバイパスし、他のセッション層の監視を回避しながらアプリケーション層IDS / IPSをだますために使用されます。
ISPは、ビジネス以外のアカウントのポート5900をフィルタリングできますが、ポート22でSSHを許可します(または、ポート22がフィルタリングされている場合は、任意のポートでSSHを実行できます)。
アプリケーションレベルのIPSおよびIDSはペイロードを調べます。たとえば、一般的なバッファオーバーフローやSQLインジェクション。エンドツーエンドのSSH暗号化は、アプリケーション層のデータを暗号化します。
SSHトンネリングは、Linux管理者のツールボックスにある優れたツールです。ただし、管理者として、SSHトンネリングにアクセスできる特権の低いユーザーの可用性をロックダウンすることを検討したいと思います。
Administration Security Note− SSHトンネリングの制限は、管理者の側で考える必要があるものです。そもそもユーザーがSSHトンネリングを必要とする理由を評価する。ユーザーがトンネリングを必要とするもの。実際のリスク確率と最悪の場合の影響とともに。
これは、中級レベルの入門書の領域外に広がる高度なトピックです。このトピックに関する調査は、CentOSLinux管理の上位層に到達したい人に推奨されます。
リモートX-WindowsにSSHトンネルを使用する
LinuxでのX-Windowsのデザインは、Windowsのデザインに比べて本当にすっきりしています。別のLinuxボックスからリモートLinuxボックスを制御したい場合は、Xに組み込まれているメカニズムを利用できます。
X-Windows(しばしば単に「X」と呼ばれる)は、あるLinuxボックスから発生したアプリケーションウィンドウを別のLinuxボックス上のXの表示部分に表示するメカニズムを提供します。したがって、SSHを介して、X-Windowsアプリケーションを世界中の別のLinuxボックスのディスプレイに転送するように要求できます。
sshトンネルを介してXアプリケーションをリモートで実行するには、1つのコマンドを実行するだけです。
[root@localhost]# ssh -X [email protected]
The syntax is − ssh -X [user] @ [host]であり、ホストは有効なユーザーでsshを実行している必要があります。
以下は、リモートXWindowssshトンネルを介してUbuntuワークステーションで実行されているGIMPのスクリーンショットです。
別のLinuxサーバーまたはワークステーションからリモートでアプリケーションを実行するのは非常に簡単です。Xセッション全体を開始し、いくつかの方法でデスクトップ環境全体をリモートで使用することもできます。
XDMCP
NXなどのヘッドレスソフトウェアパッケージ
XおよびGnomeやKDEなどのデスクトップマネージャーでの代替ディスプレイとデスクトップの構成
この方法は、物理的なディスプレイがないヘッドレスサーバーで最も一般的に使用されており、実際には中級レベルの入門書の範囲を超えています。ただし、利用可能なオプションを知っておくとよいでしょう。
CentOSトラフィックモニタリングの拡張機能を追加できるサードパーティツールがいくつかあります。このチュートリアルでは、メインのCentOSディストリビューションリポジトリとFedoraEPELリポジトリにパッケージ化されているものに焦点を当てます。
管理者が(何らかの理由で)メインのCentOSリポジトリにツールしか残されていない状況は常にあります。説明されているほとんどのユーティリティは、物理アクセスのシェルを持つ管理者が使用するように設計されています。アクセス可能なWebGUIを使用してトラフィックを監視する場合は、ntop-ngやNagiosなどのサードパーティユーティリティを使用するのが最善の選択です(このような機能を最初から再作成するのではなく)。
構成可能な両方のWebGUIソリューションの詳細については、以下のリンクから調査を開始してください。
LAN / WANシナリオのトラフィック監視
Nagios
Nagiosは長い間存在していたため、試行錯誤されています。かつてはすべて無料でオープンソースでしたが、その後、エンタープライズの高度化の必要性をサポートする有料ライセンスモデルを備えたエンタープライズソリューションに進化しました。したがって、Nagiosでの展開を計画する前に、オープンソースライセンスバージョンがニーズを満たしていることを確認するか、エンタープライズ予算を念頭に置いて支出を計画してください。
ほとんどのオープンソースのNagiosトラフィック監視ソフトウェアは次の場所にあります。 https://www.nagios.org
Nagiousの要約された履歴については、Nagiosの公式履歴ページをご覧ください。 https://www.nagios.org/about/history/
ntopng
WebGUIを介した帯域幅とトラフィックの監視を可能にするもう1つの優れたツールは、ntopngと呼ばれます。ntopngはUnixユーティリティntopに似ており、LANまたはWAN全体のデータを収集できます。管理、構成、およびグラフ作成用のWeb GUIを提供すると、IT部門全体で簡単に使用できるようになります。
Nagiousと同様に、ntopngにはオープンソースバージョンと有料エンタープライズバージョンの両方があります。詳細についてはntopng、ウェブサイトをご覧ください。http://www.ntop.org/
FedoraEPELリポジトリのインストール─エンタープライズLinux用の追加パッケージ
トラフィック監視に必要なツールのいくつかにアクセスするには、EPELリポジトリを使用するようにCentOSシステムを構成する必要があります。
EPELリポジトリは、CentOSによって公式に維持またはサポートされていません。ただし、CentOS、Fedora Core、またはRed Hat LinuxEnterpriseのいずれにも含まれていないEnterpriseLinuxプロフェッショナルによって一般的に使用されるパッケージに対処するために、FedoraCoreボランティアのグループによって維持されています。
Caution −
EPELリポジトリはCentOSの公式ではなく、一般的な依存関係を持つ本番サーバーの互換性と機能を損なう可能性があることに注意してください。このことを念頭に置いて、システムクリティカルボックスに展開する前に、本番環境と同じサービスを実行している非本番サーバーで常にテストすることをお勧めします。
実際、CentOSで他のサードパーティリポジトリよりもEHELリポジトリを使用する最大の利点は、バイナリが汚染されていないことを確認できることです。信頼できないソースからのリポジトリを使用しないことがベストプラクティスと見なされます。
とはいえ、公式のEPELリポジトリはCentOSと非常に一般的であるため、YUMを介して簡単にインストールできます。
[root@CentOS rdc]# yum -y install epel-release
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repo1.dal.innoscale.net
* extras: repo1.dal.innoscale.net
* updates: mirror.hmc.edu
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
--{ condensed output }--
EPELリポジトリをインストールした後、更新する必要があります。
[root@CentOS rdc]# yum repolist
Loaded plugins: fastestmirror, langpacks
epel/x86_64/metalink
| 11 kB 00:00:00
epel
| 4.3 kB 00:00:00
(1/3): epel/x86_64/group_gz
| 170 kB 00:00:00
(2/3): epel/x86_64/updateinfo
| 753 kB 00:00:01
(3/3): epel/x86_64/primary_db
--{ condensed output }--
この時点で、EPELリポジトリが構成され、使用できるようになっているはずです。インターフェイス帯域幅監視用のnloadをインストールすることから始めましょう。
このチュートリアルで焦点を当てるツールは次のとおりです。
- nload
- ntop
- ifstst
- iftop
- vnstat
- ネットホッグ
- Wireshark
- TCPダンプ
- Traceroute
これらはすべて、Linuxエンタープライズのトラフィックを監視するための標準です。それぞれの使用法は単純なものから高度なものまであるため、WiresharkやTCPDumpなどのツールについて簡単に説明します。
nloadをインストールして使用する
CentOSにEPELリポジトリをインストールして構成すると、nloadをインストールして使用できるようになります。このユーティリティは、インターフェイスごとの帯域幅をリアルタイムでグラフ化するように設計されています。
他のほとんどの基本インストールと同様に、nloadはYUMパッケージマネージャーを介してインストールされます。
[root@CentOS rdc]# yum -y install nload
Resolving Dependencies
--> Running transaction check
---> Package nload.x86_64 0:0.7.4-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
nload x86_64
0.7.4-4.el7 epel 70 k
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 70 k
Installed size: 176 k
Downloading packages:
--{ condensed output }--
これでnloadがインストールされ、使用は非常に簡単です。
[root@CentOS rdc]# nload enp0s5
nloadは、指定されたインターフェイスを監視します。この場合、enp0s5は、ネットワークトラフィックの負荷と総帯域幅の使用量について、端末からリアルタイムでイーサネットインターフェイスを提供します。
ご覧のとおり、nloadは、ハッシュマーク「#」を使用してデータフローの物理的表現を提供するとともに、指定されたインターフェイスからの受信データと送信データの両方をグラフ化します。
描かれているスクリーンショットは、バックグラウンドデーモントラフィックがロードされている単純なWebページです。
nloadの一般的なコマンドラインスイッチは次のとおりです。
コマンド | アクション |
---|---|
-a | 期間 |
-t | ミリ秒単位の時間更新間隔。デフォルトは500です。 |
-u | トラフィック測定値の表示を設定しますh |
-U | -uと同じオプションで合計イン/アウトトラフィック測定単位を設定します |
nloadの標準構文は次のとおりです。
nload [options] <interface>
インターフェイスが指定されていない場合、nloadは最初のイーサネットインターフェイスを自動的に取得します。総データの入出力をメガバイトで、現在のデータ転送速度をメガビットで測定してみましょう。
[root@CentOS rdc]# nload -U M -u m
現在のインターフェースに出入りするデータはメガビット/秒で測定され、出入りするデータの合計を表す各「Ttl」行はメガバイトで表示されます。
nloadは、管理者がインターフェイスを通過したデータの量と、指定したインターフェイスに現在出入りしているデータの量を確認するのに役立ちます。
nloadを閉じずに他のインターフェイスを表示するには、左/右矢印キーを使用するだけです。これにより、システムで使用可能なすべてのインターフェースが循環します。
-mスイッチ-を使用して、複数のインターフェイスを同時に監視することができます。
[root@CentOS rdc]# nload -u K -U M -m lo -m enp0s5
2つのインターフェースを同時に負荷監視(loおよびenp0s5)−
systemdは、CentOSLinuxのシステムログの管理方法を変更しました。システム上のすべてのデーモンがログを個々の場所に配置する代わりに、ログエントリを並べ替えてフィルタリングする主な方法としてtailやgrepなどのツールを使用します。journald システムログの分析に単一の管理ポイントをもたらしました。
systemdロギングの背後にある主なコンポーネントは、journal、jounralctl、journald.confです。
journaldはメインのロギングデーモンであり、journald.confを編集して構成され、journalctlはjournaldによってログに記録されたイベントを分析するために使用されます。
journaldによってログに記録されるイベントには、カーネルイベント、ユーザープロセス、およびデーモンサービスが含まれます。
正しいシステムタイムゾーンを設定する
journalctlを使用する前に、システム時刻が正しい時刻に設定されていることを確認する必要があります。これを行うには、timedatectlを使用します。
現在のシステム時刻を確認しましょう。
[root@centos rdc]# timedatectl status
Local time: Mon 2017-03-20 00:14:49 MDT
Universal time: Mon 2017-03-20 06:14:49 UTC
RTC time: Mon 2017-03-20 06:14:49
Time zone: America/Denver (MDT, -0600)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2017-03-12 01:59:59 MST
Sun 2017-03-12 03:00:00 MDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2017-11-05 01:59:59 MDT
Sun 2017-11-05 01:00:00 MST
[root@centos rdc]#
現在、システムはローカルタイムゾーンに対して正しいです。システムがそうでない場合は、正しいタイムゾーンを設定しましょう。設定を変更した後、CentOSは現在のタイムゾーンからのタイムゾーンオフセットを自動的に計算し、システムクロックをすぐに調整します。
timedatectl −を使用してすべてのタイムゾーンを一覧表示しましょう。
[root@centos rdc]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
これは、timedatectllist-timezonesからの競合する出力です。特定のローカルタイムゾーンを見つけるには、grepコマンドを使用できます-
[root@centos rdc]# timedatectl list-timezones | grep -i "america/New_York"
America/New_York
[root@centos rdc]#
CentOSで使用されるラベルは通常、スペースではなくアンダースコアが付いた国/地域です(New_Yorkと "New York")。
それでは、タイムゾーンを設定しましょう-
[root@centos rdc]# timedatectl set-timezone "America/New_York"
[root@centos rdc]# date
Mon Mar 20 02:28:44 EDT 2017
[root@centos rdc]#
システムクロックは自動的に時間を調整する必要があります。
journalctlを使用してログを分析する
journalctlを使用する場合の一般的なコマンドラインスイッチ-
スイッチ | アクション |
---|---|
-k | カーネルメッセージのみを一覧表示します |
-u | 特定のユニット(httpd、sshdなど)ごとのリスト |
-b | ラベルオフセットを起動します |
-o | 出力形式をログに記録します |
-p | ログタイプ(名前または番号)でフィルタリングします |
-F | フィールド名またはフィールド名値 |
- UTC | UTCオフセットでの時間 |
-以来 | 時間枠でフィルタリング |
ブートログを調べる
まず、CentOSLinuxでブートログを調べて構成します。最初に気付くのは、CentOSはデフォルトで、再起動後も永続するブートログを保存しないことです。
再起動インスタンスごとのブートログを確認するには、次のコマンドを発行できます-
[root@centos rdc]# journalctl --list-boots
-4 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-3 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-2 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-1 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
0 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:07:36 MDT
[root@centos rdc]#
システムを再起動すると、別のエントリが表示されます。
[root@centos rdc]# journalctl --list-boots
-5 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-4 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-3 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-2 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
-1 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:09:57 MDT
0 aa6aaf0f0f0d4fcf924e17849593d972 Mon 2017-03-20 01:10:07 MDT—Mon 2017-03-20 01:12:44 MDT
[root@centos rdc]#
それでは、最後のブートログインスタンスを調べてみましょう-
root@centos rdc]# journalctl -b -5
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Mon 2017-03-20 01:20:27 MDT. --
Mar 19 22:01:57 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M
(max allowed 108.4M
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuset
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpu
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
Mar 19 22:01:57 localhost.localdomain kernel: Linux version 3.10.0514.6.2.el7.x86_64
([email protected].
Mar 19 22:01:57 localhost.localdomain kernel: Command line:
BOOT_IMAGE=/vmlinuz-3.10.0-514.6.2.el7.x86_64 ro
Mar 19 22:01:57 localhost.localdomain kernel: Disabled fast string operations
Mar 19 22:01:57 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
上記は、前回の起動からの要約出力です。また、数時間、数日、数週間、数か月、さらには数年のブートログを参照することもできます。ただし、デフォルトでは、CentOSは永続的なブートログを保存しません。ブートログを永続的に保存できるようにするには、いくつかの構成変更を行う必要があります-
- ブートログの中央ストレージポイントを作成します
- 新しいログフォルダに適切な権限を付与します
- 永続ログ用にjournald.confを構成します
永続的なブートログのブート場所を構成する
journaldが永続的なブートログを保存する最初の場所は/ var / log / journalです。これはデフォルトでは存在しないので、作成しましょう-
[root@centos rdc]# mkdir /var/log/journal
それでは、ディレクトリに適切な権限を与えましょう。journaldデーモンアクセス-
systemd-tmpfiles --create --prefix /var/log/journal
最後に、ジャーナルに永続的なブートログを保存するように伝えましょう。でvimのか、お好きなテキストエディタ、オープン/etc/systemd/jounrald.conf」。
# See journald.conf(5) for details.
[Journal]=Storage=peristent
私たちが関わっている行は、Storage =です。最初にコメント#を削除してから、に変更しますStorage = persistent上に描かれているように。CentOSシステムを保存して再起動し、journalctllist-bootsを実行するときに複数のエントリが存在するように注意してください。
Note− VPSプロバイダーからのような絶えず変化するマシンIDにより、journaldが永続的なブートログの保存に失敗する可能性があります。このようなシナリオには多くの回避策があります。もっともらしいVPS回避策を見つけた人からの信頼できるアドバイスに従うよりも、CentOS管理フォーラムに投稿された現在の修正を熟読するのが最善です。
特定のブートログを調べるには、journald --list-bootsを使用して各オフセットを取得し、-bスイッチを使用する必要があります。したがって、2番目のブートログを確認するために使用します-
journalctl -b -2
ブートログオフセットが指定されていない-bのデフォルトは、最後の再起動後の現在のブートログになります。
ログタイプによるログの分析
ジャーナルからのイベントには番号が付けられ、7つの異なるタイプに分類されます-
0 - emerg :: System is unusable
1 - alert :: Action must be taken immediatly
2 - crit :: Action is advised to be taken immediatly
3 - err :: Error effecting functionality of application
4 - warning :: Usually means a common issue that can affect security or usilbity
5 - info :: logged informtation for common operations
6 - debug :: usually disabled by default to troubleshoot functionality
したがって、すべての警告を確認したい場合は、journalctl −を介して次のコマンドを発行できます。
[root@centos rdc]# journalctl -p 4
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Wed 2017-03-22 22:33:42 MDT. --
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: RSDP 00000000000f6a10 00024
(v02 PTLTD )
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: XSDT 0000000095eea65b 0005C
(v01 INTEL 440BX 06040000 VMW 01
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACP 0000000095efee73 000F4
(v04 INTEL 440BX 06040000 PTL 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: DSDT 0000000095eec749 1272A
(v01 PTLTD Custom 06040000 MSFT 03
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACS 0000000095efffc0 00040
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: BOOT 0000000095eec721 00028
(v01 PTLTD $SBFTBL$ 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: APIC 0000000095eeb8bd 00742 (v01 PTLTD ? APIC 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: MCFG 0000000095eeb881 0003C (v01 PTLTD $PCITBL$ 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: SRAT 0000000095eea757 008A8
(v02 VMWARE MEMPLUG 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: HPET 0000000095eea71f 00038
(v01 VMWARE VMW HPET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: WAET 0000000095eea6f7 00028
(v01 VMWARE VMW WAET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: Zone ranges:
Mar 19 22:01:57 localhost.localdomain kernel: DMA [mem 0x000010000x00ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: DMA32 [mem 0x010000000xffffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Normal empty
Mar 19 22:01:57 localhost.localdomain kernel: Movable zone start for each node
Mar 19 22:01:57 localhost.localdomain kernel: Early memory node ranges
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x000010000x0009dfff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x001000000x95edffff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x95f000000x95ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Built 1 zonelists in Node order,
mobility grouping on. Total pages: 60
Mar 19 22:01:57 localhost.localdomain kernel: Policy zone: DMA32
Mar 19 22:01:57 localhost.localdomain kernel: ENERGY_PERF_BIAS: Set to
'normal', was 'performance'
上記は、システム上の過去4日間のすべての警告を示しています。
systemdを使用してログを表示および閲覧する新しい方法は、慣れるためにほとんど練習や調査を必要としません。ただし、出力形式が異なり、パッケージ化されたすべてのデーモンログをユニバーサルにすることに特に注意する必要があるため、採用する価値があります。journaldは、従来のログ分析方法に比べて優れた柔軟性と効率を提供します。
標準のバックアップ計画を展開するためのCentOSに固有の方法を検討する前に、まず、標準レベルのバックアップポリシーの一般的な考慮事項について説明します。私たちが最初に慣れたいのは3-2-1 backup rule。
3-2-1バックアップ戦略
業界全体で、3-2-1バックアップモデルという用語をよく耳にします。これは、バックアップ計画を実装するときに生きるための非常に優れたアプローチです。3-2-1は次のように定義されます。3データのコピー; たとえば、作業コピーがある場合があります。rsyncを使用して冗長性を確保するように設計されたCentOSサーバーに配置されたコピー。ローテーションされたオフサイトUSBバックアップは、バックアップサーバー上のデータから作成されます。2さまざまなバックアップメディア。この場合、実際には3つの異なるバックアップメディアがあります。ラップトップまたはワークステーションのSSD上の作業コピー、RADI6アレイ上のCentOSサーバーデータ、およびUSBドライブに配置されたオフサイトバックアップです。1オフサイトでのデータのコピー。USBドライブを毎晩オフサイトでローテーションしています。もう1つの最新のアプローチは、クラウドバックアッププロバイダーです。
システムの回復
ベアメタル計画を復元するには、単にそのまま全てのデータをオンラインに不可欠なシステムを取得するためにCentOSの管理者がレイアウトされた計画です。100%のシステム障害と過去のすべてのシステムハードウェアの損失を想定すると、管理者は、最小限のダウンタイムで、完全なユーザーデータでアップタイムを達成する計画を立てる必要があります。Linuxで使用されるモノリシックカーネルは、実際には、Windowsよりもシステムイメージを使用したベアメタル復元をはるかに簡単にします。Windowsがマイクロカーネルアーキテクチャを使用している場合。
完全なデータ復元とベアメタル回復は、通常、主要な運用サーバーの動作中の構成済み実稼働ディスクイメージ、3-2-1ルールに準拠したユーザーデータの冗長バックアップなどの方法を組み合わせて実行されます。信頼できる会社の担当者へのアクセスが制限された、安全で耐火性の金庫に保管されている可能性のある一部の機密ファイルですら。
ネイティブCentOSツールを使用したマルチフェーズベアメタル復元およびデータリカバリ計画は、次のもので構成されます。
構成済みサーバーの実稼働ディスクイメージを作成および復元するためのdd
すべてのユーザーデータの増分バックアップを作成するrsync
管理者からのパスワードとメモを含むファイルの暗号化されたバックアップを保存するためのtarとgzip。通常、これはUSBドライブに配置し、暗号化して、上級管理職がアクセスできる金庫にロックすることができます。また、これにより、現在の管理者が宝くじに当選し、どこかの日当たりの良い島に姿を消した場合に、他の誰かが重要なセキュリティ資格情報を知ることができます。
ハードウェア障害または災害が原因でシステムがクラッシュした場合、以下は操作の復元のさまざまなフェーズになります-
構成済みのベアメタルイメージを使用して稼働中のサーバーを構築する
バックアップから稼働中のサーバーにデータを復元する
最初の2つの操作を実行するために必要な資格情報に物理的にアクセスできる
ファイルレベルのバックアップにrsyncを使用する
rsyncは、ファイルのディレクトリをローカルまたは別のサーバーに同期するための優れたユーティリティです。rsyncはシステム管理者によって何年も使用されてきたため、データをバックアップする目的で非常に洗練されています。著者の意見では、同期の最も優れた機能の1つは、コマンドラインからスクリプトを作成できることです。
このチュートリアルでは、rsyncについてさまざまな方法で説明します-
- いくつかの一般的なオプションを調べて話し合う
- ローカルバックアップを作成する
- SSH経由でリモートバックアップを作成する
- ローカルバックアップを復元する
rsyncはその目的にちなんで名付けられました:リモート同期であり、強力で柔軟性があります。
以下は、sshを介した基本的なrsyncリモートバックアップです。
MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/
[email protected]:home/rdc/ Documents/RemoteStuff/
[email protected]'s password:
sending incremental file list
6,148 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=23/25)
2017-02-14 16_26_47-002 - Veeam_Architecture001.png
33,144 100% 31.61MB/s 0:00:00 (xfr#2, to-chk=22/25)
A Guide to the WordPress REST API | Toptal.pdf
892,406 100% 25.03MB/s 0:00:00 (xfr#3, to-chk=21/25)
Rick Cardon Technologies, LLC..webloc
77 100% 2.21kB/s 0:00:00 (xfr#4, to-chk=20/25)
backbox-4.5.1-i386.iso
43,188,224 1% 4.26MB/s 0:08:29
sent 2,318,683,608 bytes received 446 bytes 7,302,941.90 bytes/sec
total size is 2,327,091,863 speedup is 1.00
MiNi:~ rdc$
次の同期により、LANを介して約2.3GBのデータが送信されました。rsyncの利点は、ファイルごとにブロックレベルで段階的に機能することです。つまり、1MBのテキストファイルで2文字だけを変更すると、次の同期で1つまたは2つのブロックだけがLANを介して転送されます。
さらに、増分機能を無効にして、CPU使用率を下げるために使用されるネットワーク帯域幅を増やすことができます。これは、1Gb専用のバックアップLANで10分ごとに複数の10MBデータベースファイルを絶えずコピーする場合に推奨される場合があります。理由は次のとおりです。これらは常に変化し、10分ごとに段階的に送信され、リモートCPUの負荷に負担がかかる可能性があります。転送の合計負荷は5分を超えないため、データベースファイル全体を同期したい場合があります。
以下は、最も一般的なスイッチですrsyncを-
rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path
スイッチ | アクション |
---|---|
-a | アーカイブモードで、-r、-p、-t、-g、-lを想定しています |
-d | ディレクトリツリーのみを同期し、ファイルは同期しません |
-r | ディレクトリへの再帰 |
-l | シンボリックリンクをシンボリックリンクとしてコピーする |
-p | 権限を保持する |
-g | グループを保存 |
-v | 冗長出力 |
-z | ネットワークリンクを介して圧縮 |
-バツ | 拡張属性を保持する |
-A | ACLを保持する |
-t | タイムスタンプを保持する |
-W | インクリメンタルブロックではなく、ファイル全体を転送する |
-u | ターゲット上のファイルを上書きしないでください |
- 進捗 | 転送の進行状況を表示する |
-削除 | ターゲット上の古いファイルを削除します |
-最大サイズ= XXX | 同期する最大ファイルサイズ |
いつrsyncを使用するか
私の個人的なrsyncの好みは、ソースホストからターゲットホストにファイルをバックアップするときです。たとえば、データリカバリ用のすべてのホームディレクトリ、またはディザスタリカバリ用のオフサイトおよびクラウドへのディレクトリ。
rsyncを使用したローカルバックアップ
あるホストから別のホストにファイルを転送する方法はすでに見てきました。同じ方法を使用して、ディレクトリとファイルをローカルで同期できます。
rootユーザーのディレクトリに/ etc /の手動増分バックアップを作成しましょう。
まず、同期バックアップ用に〜/ rootからディレクトリを作成する必要があります-
[root@localhost rdc]# mkdir /root/etc_baks
次に、十分な空きディスク容量があることを確認します。
[root@localhost rdc]# du -h --summarize /etc/
49M /etc/
[root@localhost rdc]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 43G 15G 28G 35% /
/ etc /ディレクトリ全体を同期するのに適しています-
rsync -aAvr /etc/ /root/etc_baks/
同期された/ etc /ディレクトリ-
[root@localhost etc_baks]# ls -l ./
total 1436
drwxr-xr-x. 3 root root 101 Feb 1 19:40 abrt
-rw-r--r--. 1 root root 16 Feb 1 19:51 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Feb 27 19:06 aliases.db
drwxr-xr-x. 2 root root 51 Feb 1 19:41 alsa
drwxr-xr-x. 2 root root 4096 Feb 27 17:11 alternatives
-rw-------. 1 root root 541 Mar 31 2016 anacrontab
-rw-r--r--. 1 root root 55 Nov 4 12:29 asound.conf
-rw-r--r--. 1 root root 1 Nov 5 14:16 at.deny
drwxr-xr-x. 2 root root 32 Feb 1 19:40 at-spi2
--{ condensed output }--
それでは、インクリメンタルrsyncを実行しましょう-
[root@localhost etc_baks]# rsync -aAvr --progress /etc/ /root/etc_baks/
sending incremental file list
test_incremental.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1145/1282)
sent 204620 bytes received 2321 bytes 413882.00 bytes/sec
total size is 80245040 speedup is 387.77
[root@localhost etc_baks]#
test_incremental.txtファイルのみがコピーされました。
rsyncを使用したリモート差分バックアップ
バックアップ計画が展開されているサーバーに最初のrsync完全バックアップを実行してみましょう。この例では、実際にはMac OSXワークステーション上のフォルダをCentOSサーバーにバックアップしています。rsyncのもう1つの優れた点は、rsyncが移植されたすべてのプラットフォームで使用できることです。
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
A Guide to the WordPress REST API | Toptal.pdf
Rick Cardon Tech LLC.webloc
VeeamDiagram.png
backbox-4.5.1-i386.iso
dhcp_admin_script_update.py
DDWRT/
DDWRT/.DS_Store
DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
DDWRT/ddwrt_mod_notes.docx
DDWRT/factory-to-ddwrt.bin
open_ldap_config_notes/
open_ldap_config_notes/ldap_directory_a.png
open_ldap_config_notes/open_ldap_notes.txt
perl_scripts/
perl_scripts/mysnmp.pl
php_scripts/
php_scripts/chunked.php
php_scripts/gettingURL.php
sent 2,318,281,023 bytes received 336 bytes 9,720,257.27 bytes/sec
total size is 2,326,636,892 speedup is 1.00
MiNi:~ rdc$
これで、ワークステーションから、ローテーションされたディザスタリカバリメディアがオフサイトに保存されたRAID6ボリュームを実行しているサーバーにフォルダがバックアップされました。rsyncを使用すると、標準の3-2-1バックアップが得られ、1台のサーバーだけに高価な冗長ディスクアレイとローテーション差分バックアップがあります。
次に、test_file.txtという名前の新しいファイルが1つ追加された後、rsyncを使用して同じフォルダーの別のバックアップを実行しましょう。
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
test_file.txt
sent 814 bytes received 61 bytes 134.62 bytes/sec
total size is 2,326,636,910 speedup is 2,659,013.61
MiNi:~ rdc$
ご覧のとおり、新しいファイルのみがrsyncを介してサーバーに配信されました。差分比較は、ファイルごとに行われました。
注意すべき点は次のとおりです。変更が加えられた唯一のファイルであるため、これは新しいファイルtest_file.txtのみをコピーします。rsyncはsshを使用します。どちらのマシンでもrootアカウントを使用する必要はありませんでした。
シンプルで強力かつ効果的なrsyncは、フォルダー全体とディレクトリ構造をバックアップするのに最適です。ただし、rsync自体はプロセスを自動化しません。ここで、ツールボックスを掘り下げて、その仕事に最適で小さくてシンプルなツールを見つける必要があります。
cronjobsを使用してrsyncバックアップを自動化するには、認証にSSHキーを使用してSSHユーザーを設定することが不可欠です。これをcronjobsと組み合わせると、rsyncを一定の間隔で自動的に実行できます。
ブロックごとのベアメタル回復画像にDDを使用する
DDは、LinuxカーネルがGNUユーティリティと出会うことの黎明期から存在しているLinuxユーティリティです。
ddは、簡単に言うと、選択したディスク領域のイメージをコピーします。次に、物理ディスクの選択したブロックをコピーする機能を提供します。したがって、バックアップがない限り、ddがディスクに書き込むと、すべてのブロックが置き換えられます。以前のデータの損失は、高額な専門家レベルのデータ回復の回復能力を超えています。
ddを使用して起動可能なシステムイメージを作成するための全体的なプロセスは次のとおりです。
- 起動可能なLinuxディストリビューションを使用してCentOSサーバーから起動する
- イメージ化するブータブルディスクの指定を見つけます
- リカバリイメージを保存する場所を決定します
- ディスクで使用されているブロックサイズを見つけます
- ddイメージ操作を開始します
このチュートリアルでは、時間と単純さのために、CentOS仮想マシンからマスターブートレコードのISOイメージを作成します。その後、この画像をオフサイトに保存します。MBRが破損して復元する必要がある場合は、同じプロセスを起動可能なディスクまたはパーティション全体に適用できます。ただし、必要な時間とディスク容量は、このチュートリアルでは実際には少しやり過ぎです。
CentOS管理者は、テスト環境で完全に起動可能なディスク/パーティションを復元し、ベアメタル復元を実行することに習熟することをお勧めします。これにより、最終的にはマネージャーと数十人のエンドユーザーがダウンタイムをカウントする実際の状況で練習を完了する必要がある場合に、多くのプレッシャーが軽減されます。そのような場合、物事を理解するための10分間は永遠のように見え、1つの汗をかきます。
Note− ddを使用するときは、ソースボリュームとターゲットボリュームを混同しないように注意してください。バックアップの場所をブートドライブにコピーすることで、データとブート可能なサーバーを破棄できます。または、DDを使用して非常に低いレベルでデータをコピーすることにより、データを永久に破壊する可能性があります。
以下は、dd −の一般的なコマンドラインスイッチとパラメータです。
スイッチ | アクション |
---|---|
if = | コピーするファイルまたはソース内 |
of = | アウトファイルまたはインファイルのコピー |
bs | 入力ブロックサイズと出力ブロックサイズの両方を設定します |
obs | 出力ファイルのブロックサイズを設定する |
IBS | 入力ファイルのブロックサイズを設定する |
カウント | コピーするブロック数を設定する |
コンバージョン | イメージング用に追加する追加オプション |
Noerror | エラーの処理を停止しないでください |
同期 | エラーまたはミスアライメントが発生した場合に、適合していない入力ブロックをパッドします |
Note on block size−ddのデフォルトのブロックサイズは512バイトです。これは、低密度ハードディスクドライブの標準ブロックサイズでした。今日の高密度HDDは、1TB以上のディスクに対応できるように4096バイト(4kB)のブロックサイズに拡大されています。したがって、新しい大容量のハードディスクでddを使用する前に、ディスクブロックサイズを確認する必要があります。
このチュートリアルでは、ddを使用して本番サーバーで作業する代わりに、VMWareで実行されているCentOSインストールを使用します。また、起動可能なUSBスティックを使用する代わりに、起動可能なLinuxISOイメージを起動するようにVMWareを構成します。
まず、CentOS GnomeISOというタイトルのCentOSイメージをダウンロードする必要があります。これはほぼ3GBであり、起動可能なUSBサムドライブを作成し、トラブルシューティングやベアメタルイメージのために仮想サーバーインストールで起動するために、常にコピーを保持することをお勧めします。
他の起動可能なLinuxディストリビューションも同様に機能します。Linux Mintは、優れたハードウェアサポートと、メンテナンス用の洗練されたGUIディスクツールを備えているため、起動可能なISOに使用できます。
CentOS GNOME Liveブータブルイメージは、次の場所からダウンロードできます。 http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso
Linuxのブート可能イメージから起動するようにVMWareWorkstationのインストールを構成しましょう。手順はOSX上のVMWare向けです。ただし、Linux、Windows、さらにはVirtualBox上のVMWareWorkstationでも同様です。
Note− VirtualBoxやVMWareWorkstationなどの仮想デスクトップソリューションを使用することは、CentOS管理タスクを学習するためのラボシナリオを設定するための優れた方法です。複数のCentOSインストールをインストールする機能を提供します。ハードウェア構成がほとんどないため、管理に集中できません。また、変更を加える前にサーバーの状態を保存することもできます。
まず、仮想CD-ROMを構成し、仮想CentOSサーバーのインストールの代わりに起動するISOイメージを添付しましょう-
ここで、起動ディスクを設定します-
これで、起動時に、仮想マシンがCentOSブータブルISOイメージから起動し、以前に構成されたVirtualCentOSサーバー上のファイルにアクセスできるようになります。
ディスクをチェックして、MBRのコピー元を確認しましょう(要約された出力は次のとおりです)。
MiNt ~ # fdisk -l
Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
物理ディスクの両方(sdaとsdb)を見つけました。それぞれのブロックサイズは512バイトです。したがって、ddコマンドを実行して、SDA1のMBRの最初の512バイトをコピーします。
これを行うための最良の方法は-
[root@mint rdc]# dd if=/dev/sda bs=512 count=1 | gzip -c >
/mnt/sdb/images/mbr.iso.gz
1+0 records in
1+0 records out
512 bytes copied, 0.000171388 s, 3.0 MB/s
[root@mint rdc]# ls /mnt/sdb/
mbr-iso.gz
[root@mint rdc]#
ちょうどそのように、マスターブートレコードの完全なイメージがあります。ブートドライブをイメージ化するのに十分なスペースがあれば、システム全体のブートイメージを簡単に作成できます。
dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c >
/mnt/sdb/boot-server-centos-image.iso.gz
CONV =同期はバイトは、物理媒体のために整列されなければならない場合に使用されます。この場合、正確な4Kアライメントが読み取られないと、ddでエラーが発生する可能性があります(たとえば、3Kしかないが、ディスク上で4Kブロックを1つ以上取得する必要があるファイル。または、読み取りエラーが発生し、 ddでファイルを読み取ることはできません。)したがって、conv = sync、noerrorを指定したddは、3Kに些細な、しかし有用なデータを4Kブロックアライメントの物理メディアにパディングします。大規模な操作を終了する可能性のあるエラーは表示されませんが。
ディスクからのデータを処理するときは、常に次のものを含めます:conv = sync、noerrorパラメーター。
これは、ディスクがTCPデータのようなストリームではないためです。それらは、特定のサイズに整列されたブロックで構成されています。たとえば、512バイトのブロックがある場合でも、300バイトしかないファイルには512バイトのディスクスペースが必要です(アクセス許可やその他のファイルシステム情報などのiノード情報用に2ブロックの場合があります)。
安全な保管のためにgzipとtarを使用する
gzipとtarは、CentOS管理者が使い慣れなければならない2つのユーティリティです。これらは、単にアーカイブを解凍する以外にも多くの目的で使用されます。
CentOSLinuxでのGnuTarの使用
Tarは、Windowsのwinrarに似たアーカイブユーティリティです。tarと略されるその名前TapeArchiveは、ユーティリティをほぼ要約しています。tarはファイルを取得し、論理的な便宜のためにアーカイブに配置します。したがって、/ etcに保存されている数十のファイルの代わりに。バックアップとストレージの利便性のために、それらをアーカイブに「タール」することができます。
tarは、アーカイブされたファイルをUnixおよびLinuxに保存するための標準として長年使用されてきました。したがって、tarをgzipまたはbzipと一緒に使用することは、各システムのアーカイブのベストプラクティスと見なされます。
以下は、tar-で使用される一般的なコマンドラインスイッチとオプションのリストです。
スイッチ | アクション |
---|---|
-c | 新しい.tarアーカイブを作成します |
-C | 別のディレクトリに抽出します |
-j | bzip2圧縮を使用 |
-z | gzip圧縮を使用 |
-v | 詳細なショーのアーカイブの進行状況 |
-t | アーカイブの内容を一覧表示します |
-f | アーカイブのファイル名 |
-バツ | tarアーカイブを抽出します |
以下は、tarアーカイブを作成するための基本的な構文です。
tar -cvf [tar archive name]
Note on Compression mechanisms with tar− tarを使用するときは、gzipとbzip2の2つの一般的な圧縮スキームのいずれかを使用することをお勧めします。gzipファイルはCPUリソースをあまり消費しませんが、通常はサイズが大きくなります。bzip2は圧縮に時間がかかりますが、より多くのCPUリソースを使用します。ただし、最終ファイルサイズは小さくなります。
ファイル圧縮を使用する場合、アーカイブを抽出するために必要な圧縮スキームを(試行錯誤ではなく)自分自身を含むすべての人に知らせる標準のファイル拡張子を常に使用する必要があります。
bzip2 | .tbz |
bzip2 | .tar.tbz |
bzip2 | .tb2 |
gzip | .tar.gz |
gzip | .tgz |
WindowsボックスまたはWindowsで使用するためにアーカイブを抽出する必要がある場合は、.tar.tbzまたは.tar.gzを使用することをお勧めします。これは、ほとんどの3文字の単一拡張子がWindowsとWindowsのみの管理者を混乱させるためです(ただし、時には望ましい結果)
Macワークステーションからコピーしたリモートバックアップからgzip圧縮されたtarアーカイブを作成しましょう-
[rdc@mint Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[rdc@mint Documents]$ ls -ld RemoteStuff.tgz
-rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz
Note−すべてのファイルをアーカイブに直接追加する代わりに、RemoteStuffフォルダー全体をアーカイブしました。これが最も簡単な方法です。抽出されると、ディレクトリ全体RemoteStuffが抽出され、現在の作業ディレクトリ内のすべてのファイルが./currentWorkingDirectory/RemoteStuff/として抽出されます。
次に、/ root /ホームディレクトリ内のアーカイブを抽出しましょう。
[root@centos ~]# tar -zxvf RemoteStuff.tgz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[root@mint ~]# ping www.google.com
上記のように、すべてのファイルは、現在の作業ディレクトリ内の包含ディレクトリに単純に抽出されました。
[root@centos ~]# ls -l
total 2262872
-rw-------. 1 root root 1752 Feb 1 19:52 anaconda-ks.cfg
drwxr-xr-x. 137 root root 8192 Mar 9 04:42 etc_baks
-rw-r--r--. 1 root root 1800 Feb 2 03:14 initial-setup-ks.cfg
drwxr-xr-x. 6 rdc rdc 4096 Mar 10 22:20 RemoteStuff
-rw-r--r--. 1 root root 2317140451 Mar 12 07:12 RemoteStuff.tgz
-rw-r--r--. 1 root root 9446 Feb 25 05:09 ssl.conf [root@centos ~]#
gzipを使用してファイルバックアップを圧縮する
前述のように、tarからbzip2またはgzipのいずれかを使用できます。 -j または -zコマンドラインスイッチ。gzipを使用して個々のファイルを圧縮することもできます。ただし、bzipまたはgzipを単独で使用しても、tarと組み合わせた場合ほど多くの機能は提供されません。
gzipを使用する場合、デフォルトのアクションは元のファイルを削除し、それぞれを圧縮バージョンに置き換えて.gz拡張子を追加することです。
gzipの一般的なコマンドラインスイッチは次のとおりです。
スイッチ | アクション |
---|---|
-c | アーカイブに配置した後、ファイルを保持します |
-l | 圧縮アーカイブの統計を取得する |
-r | ディレクトリ内のファイルを再帰的に圧縮します |
-1から9 | 1から9のスケールで圧縮レベルを指定します |
gzipは、一部のWindows O / S zipユーティリティのようにアーカイブベースではなく、ファイルごとに機能します。これの主な理由は、tarがすでに高度なアーカイブ機能を提供していることです。gzipは、圧縮メカニズムのみを提供するように設計されています。
したがって、gzipについて考えるときは、単一のファイルについて考えてください。複数のファイルについて考えるときは、tarアーカイブについて考えてください。以前のtarアーカイブでこれを調べてみましょう。
Note −経験豊富なLinuxの専門家は、tarを使用したアーカイブをtarballと呼ぶことがよくあります。
rsyncバックアップから別のtarアーカイブを作成しましょう。
[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/
[root@centos Documents]# ls
RemoteStuff.tar RemoteStuff/
デモの目的のために、のは、聞かせてgzipで圧縮新しく作成されたtarballを、と言うGZIP古いファイルを維持します。デフォルトでは、-cオプションを指定しないと、gzipはtarアーカイブ全体を.gzファイルに置き換えます。
[root@centos Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz
We now have our original directory, our tarred directory and finally our gziped tarball.
gzipで-lスイッチをテストしてみましょう。
[root@centos Documents]# gzip -l RemoteStuff.tar.gz
compressed uncompressed ratio uncompressed_name
2317140467 2326661120 0.4% RemoteStuff.tar
[root@centos Documents]#
gzipがWindowsZipユーティリティとどのように異なるかを示すために、テキストファイルのフォルダでgzipを実行してみましょう。
[root@centos Documents]# ls text_files/
file1.txt file2.txt file3.txt file4.txt file5.txt
[root@centos Documents]#
次に、-rオプションを使用して、ディレクトリ内のすべてのテキストファイルを再帰的に圧縮しましょう。
[root@centos Documents]# gzip -9 -r text_files/
[root@centos Documents]# ls ./text_files/
file1.txt.gz file2.txt.gz file3.txt.gz file4.txt.gz file5.txt.gz
[root@centos Documents]#
見る?一部の人が予想していたことではありません。元のテキストファイルはすべて削除され、それぞれが個別に圧縮されました。この動作のため、単一のファイルで作業する必要がある場合は、gzipのみを考えるのが最善です。
作業tarボール、私たちの解凍せrsynced新しいディレクトリにtarballを。
[root@centos Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
上記のように、tarballを抽出して/ tmpディレクトリに解凍しました。
[root@centos Documents]# ls /tmp
hsperfdata_root
RemoteStuff
TarBallアーカイブを暗号化する
災害復旧の場合に、組織の他の従業員がアクセスする必要がある可能性のある安全なドキュメントを保存するためにtarballアーカイブを暗号化することは、難しい概念になる可能性があります。これを行うには、基本的に3つの方法があります。GnuPGを使用するか、opensslを使用するか、サードパーティのユーティリティを使用します。
GnuPGは主に非対称暗号化用に設計されており、パスフレーズではなくIDの関連付けを念頭に置いています。確かに、対称暗号化で使用できますが、これはGnuPGの主な強みではありません。したがって、元の人よりも多くの人がアクセスする必要がある場合(たとえば、管理者が王国のすべての鍵を活用することから保護したい場合など)、物理的なセキュリティでアーカイブを保存するためにGnuPGを割引します。
GnuPGのようなOpensslは、私たちが望むことを実行でき、CentOSに同梱されています。しかし、繰り返しになりますが、私たちが望むことを実行するように特別に設計されているわけではなく、暗号化はセキュリティコミュニティで疑問視されています。
私たちの選択はと呼ばれるユーティリティです 7zip。7zipはgzipのような圧縮ユーティリティですが、さらに多くの機能を備えています。Gnu Gzipと同様に、7zipとその標準はオープンソースコミュニティにあります。EHELリポジトリから7zipをインストールする必要があります(次の章では、拡張エンタープライズリポジトリのインストールについて詳しく説明します)。
Centosに7zipをインストールする
7zipは、EHELリポジトリがCentOSにロードされ、構成された後の簡単なインストールです。
[root@centos Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
epel/x86_64/metalink
| 13 kB 00:00:00
epel
| 4.3 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo
| 756 kB 00:00:04
(2/2):
epel/x86_64/primary_db
| 4.6 MB 00:00:18
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package p7zip.x86_64 0:16.02-2.el7 will be installed
---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
そのように単純で、7zipがインストールされ、tarballアーカイブの256ビットAES暗号化ですぐに使用できます。
次に、7zを使用して、gzip圧縮されたアーカイブをパスワードで暗号化します。そのための構文は非常に単純です-
7z a -p <output filename><input filename>
どこ、 a: アーカイブに追加し、 -p: パスフレーズの暗号化とプロンプト
[root@centos Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R)
Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI)
Scanning the drive:
1 file, 2317140467 bytes (2210 MiB)
Creating archive: RemoteStuff.tgz.7z
Items to compress: 1
Enter password (will not be echoed):
Verify password (will not be echoed) :
Files read from disk: 1
Archive size: 2280453410 bytes (2175 MiB)
Everything is Ok
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz RemoteStuff.tgz.7z slapD
text_files
[root@centos Documents]#
これで、gzip圧縮されたtarballを256ビットAESで暗号化する.7zアーカイブができました。
Note− 7zipは、パスワードとカウンターのSHA-256ハッシュを使用したAES 256ビット暗号化を使用し、キーの導出のために最大512K回繰り返されます。複雑なキーを使用する場合、これは十分に安全である必要があります。
アーカイブをさらに暗号化および再圧縮するプロセスは、アーカイブが大きくなると時間がかかる場合があります。
7zipは、gzipやbzip2よりも多くの機能を備えた高度な製品です。ただし、CentOSやLinuxの世界では標準ではありません。したがって、他のユーティリティをできるだけ頻繁に使用する必要があります。
CentOS7システムは3つの方法で更新できます-
- Manually
- Automatically
- 主要なセキュリティ問題について手動で更新し、自動更新を構成します
実稼働環境では、実稼働サーバー用に手動で更新することをお勧めします。または、少なくとも更新計画を確立して、管理者が業務に不可欠なサービスを保証できるようにします。
単純なセキュリティ更新により、管理者によるアップグレードと再構成が必要な一般的なアプリケーションで再帰的な問題が発生する可能性があります。したがって、開発サーバーとデスクトップで最初にテストする前に、本番環境で自動更新をスケジュールすることにうんざりしてください。
CentOS7を手動で更新する
CentOS 7を更新するには、yumコマンドについて理解しておく必要があります。yumCentOS7でパッケージリポジトリを処理するために使用されます。yumは一般的に使用されるツールです。
- CentOS 7Linuxシステムを更新します
- パッケージを検索する
- パッケージをインストールする
- パッケージに必要な依存関係を検出してインストールします
更新にyumを使用するには、CentOSサーバーがインターネットに接続されている必要があります。ほとんどの構成では、基本システムをインストールしてから、yumを使用してメインのCentOSリポジトリにパッケージ内の追加機能を照会し、システム更新を適用します。
すでにyumを使用していくつかのパッケージをインストールしています。yumを使用する場合は、常にrootユーザーとして使用する必要があります。または、rootアクセス権を持つユーザー。それでは、nanoと呼ばれる使いやすいテキストエディタを検索してインストールしましょう。
[root@centos rdc]# yum search nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.rackspace.com
* epel: mirror.chpc.utah.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
======================================================================
N/S matched: nano
======================================================================
nano.x86_64 : A small text editor
nodejs-nano.noarch : Minimalistic couchdb driver for Node.js
perl-Time-Clock.noarch : Twenty-four hour clock object with nanosecond precision
Name and summary matches only, use "search all" for everything.
[root@centos rdc]#
それでは、nanoテキストエディタをインストールしましょう。
[root@centos rdc]# yum install nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch
Version Repository Size
================================================================================
Installing:
nano x86_64
2.3.1-10.el7 base 440 k
Transaction Summary
Install 1 Package
Total download size: 440 k
Installed size: 1.6 M
Is this ok [y/d/N]: y
Downloading packages:
nano-2.3.1-10.el7.x86_64.rpm
| 440 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : nano-2.3.1-10.el7.x86_64
1/1
Verifying : nano-2.3.1-10.el7.x86_64
1/1
Installed:
nano.x86_64 0:2.3.1-10.el7
Complete!
[root@centos rdc]#
nanoテキストエディタをインストールしました。この方法であるIMOは、Webサイトでユーティリティを検索し、インストーラーを手動で実行するよりもはるかに簡単です。また、リポジトリはデジタル署名を使用してパッケージを検証し、yumを使用して信頼できるソースからのものであることを確認します。新しいリポジトリを信頼するときに信頼性を検証するのは管理者の責任です。これが、サードパーティのリポジトリにうんざりすることがベストプラクティスと見なされる理由です。
Yumを使用してパッケージを削除することもできます。
[root@centos rdc]# yum remove nano
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
それでは、更新を確認しましょう。
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Updated Packages
NetworkManager.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-17.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
audit-libs.x86_64 2.6.5-3.el7_3.1 updates
audit-libs-python.x86_64
示されているように、インストールが保留されている数十の更新があります。実際には、自動更新をまだ構成していないため、合計で約100の更新があります。したがって、保留中のすべての更新をインストールしましょう。
[root@centos rdc]# yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* epel: pubmirror1.math.uh.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.4.0-14.el7_3 will be updated
---> Package NetworkManager.x86_64 1:1.4.0-17.el7_3 will be an update
selinux-policy noarch 3.13.1102.el7_3.15 updates 414 k
selinux-policy-targeted noarch 3.13.1102.el7_3.15 updates 6.4 M
systemd x86_64 21930.el7_3.7 updates 5.2 M
systemd-libs x86_64 21930.el7_3.7 updates 369 k
systemd-python x86_64 21930.el7_3.7 updates 109 k
systemd-sysv x86_64 21930.el7_3.7 updates 63 k
tcsh x86_64 6.18.01-13.el7_3.1 updates 338 k
tzdata noarch 2017a1.el7 updates 443 k
tzdata-java noarch 2017a1.el7 updates 182 k
wpa_supplicant x86_64 1:2.021.el7_3 updates 788 k
Transaction Summary
===============================================================================
Install 2 Packages
Upgrade 68 Packages
Total size: 196 M
Total download size: 83 M
Is this ok [y/d/N]:
「y」キーを押すと、CentOS7のアップデートが始まります。更新時にyumが実行する一般的なプロセスは次のとおりです。
- 現在のパッケージをチェックします
- リポジトリで更新されたパッケージを探します
- 更新されたパッケージに必要な依存関係を計算します
- アップデートをダウンロード
- アップデートをインストールします
それでは、システムが最新であることを確認しましょう。
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* updates: mirror.compevo.com
[root@centos rdc]#
ご覧のとおり、更新はリストされていません。
YUMの自動更新を構成する
エンタープライズ環境では、前述のように、自動更新がインストールの推奨される方法である場合とそうでない場合があります。yumを使用して自動更新を構成する手順を見ていきましょう。
まず、yum-cronというパッケージをインストールします。
[root@centos rdc]# yum -y install yum-cron
Install 1 Package
Total download size: 61 k
Installed size: 51 k
Downloading packages:
yum-cron-3.4.3-150.el7.centos.noarch.rpm
| 61 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Verifying : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Installed:
yum-cron.noarch 0:3.4.3-150.el7.centos
Complete!
[root@centos rdc]#
デフォルトでは、yum-cronはアップデートのみをダウンロードし、インストールしません。更新を自動的にインストールするかどうかは、管理者にあります。最大の注意点は、一部の更新ではシステムの再起動が必要になることです。また、一部の更新では、サービスが再び動作可能になる前に構成の変更が必要になる場合があります。
依存関係を更新すると、次の状況で再帰的な問題が発生する可能性があります-
特定のライブラリについては、yumが更新を推奨しています
ライブラリはApacheServer 2.4のみをサポートしますが、サーバー2.3があります
私たちのコマースサイトは特定のバージョンのPHPに依存しています
ライブラリ用にインストールされたApacheの新しいバージョンでは、PHPをアップグレードする必要があります
当社の本番Webアプリケーションは、新しいPHPバージョンではまだテストされていません。
Yumは、設定されていない限り、通知なしにApacheとPHPを自動的にアップグレードする場合があります。
5つのシナリオすべてが実行されると、朝の大きな頭痛の種から、ユーザーデータを公開する可能性のあるセキュリティ侵害まで、あらゆる結果が生じる可能性があります。前述の例はある種の完全な嵐ですが、そのようなシナリオを実行したくはありません。
アップデートの再起動と再構成によるダウンタイムの可能性が原因で、サービスの復元に必要な時間から収益が失われる可能性のあるシナリオにアクセスするのは、管理者の責任です。この慣行は、たとえば、数百万の顧客がいる1日あたり数百万ドルのeコマースサイトには十分に保守的ではない可能性があります。
それでは、システムアップデートを自動的にインストールするようにyum-cronを設定しましょう。
[root@centos rdc]# vim /etc/yum/yum-cron.conf
# Whether updates should be applied when they are available. Note
# that download_updates must also be yes for the update to be applied.
apply_updates = yes
apply_updates = noをapply_updates = yesに変更します。それでは、yum-cronの更新間隔を設定しましょう。
繰り返しになりますが、自動更新を使用してオンデマンドで更新をインストールするかどうかは両刃の剣である可能性があり、管理者はそれぞれの固有の状況について検討する必要があります。
Bashシェルの概要
GNU Linuxのフレーバーと同様に、シェルにはさまざまな種類があり、互換性も異なります。CentOSのデフォルトのシェルは、BashまたはBourne AgainShellとして知られています。Bashシェルは、StephenBourneによって開発されたBourneShellの現代の修正バージョンです。Bashは、KenThompsonとDennisRitchieによってBellLabsで開発されたUnixオペレーティングシステム上の元のThompsonShellの直接の代替品でした(StephenBourneはBellLabsにも採用されていました)
誰もが好きなシェルを持っており、それぞれに長所と難しさがあります。しかし、ほとんどの場合、BashはすべてのLinuxディストリビューションでデフォルトのシェルになり、最も一般的に利用可能になります。経験を積むと、誰もが自分に最適なシェルを探索して使用したいと思うでしょう。ただし、同時に、誰もがBashシェルをマスターしたいと思うでしょう。
その他のLinuxシェルには、Tcsh、Csh、Ksh、Zsh、およびFishが含まれます。
エキスパートレベルでLinuxシェルを使用するスキルを開発することは、CentOS管理者にとって非常に重要です。前述したように、Windowsとは異なり、Linuxの中心はコマンドラインオペレーティングシステムです。シェルは、管理者(またはユーザー)がオペレーティングシステムにコマンドを発行できるようにする単なるユーザーインターフェイスです。Linuxシステム管理者が航空会社のパイロットである場合、シェルを使用することは、飛行機を自動操縦から外し、より機動性の高い飛行のために手動制御をつかむことに似ています。
BashのようなLinuxシェルは、コンピュータサイエンスの用語では次のように知られています。 Command Line Interpreter。Microsoft Windowsには、DOS(元のDOSオペレーティングシステムと混同しないでください)とPowerShellと呼ばれる2つのコマンドラインインタープリターもあります。
Bashのような最新のシェルは constructsより複雑なシェルスクリプトで、一般的なタスクと複雑なタスクの両方を自動化できます。
構成には次のものが含まれます-
- スクリプトフロー制御(ifthenおよびelse)
- 論理比較演算(より大きい、より小さい、等しい)
- Loops
- Variables
- 操作を定義するパラメーター(コマンド付きスイッチと同様)
シェルスクリプトとスクリプト言語の使用
タスクの実行について考えるとき、管理者はよく自問します。シェルスクリプト、またはPerl、Ruby、Pythonなどのスクリプト言語を使用する必要がありますか?
ここには決まったルールはありません。シェルとスクリプト言語の間には、典型的な違いしかありません。
シェル
Shellを使用すると、Linuxオペレーティングシステムでsed、grep、tee、catなどのLinuxコマンドやその他すべてのコマンドラインベースのユーティリティを使用できます。実際、ほとんどすべてのコマンドラインLinuxユーティリティをシェルでスクリプト化できます。
シェルを使用する良い例は、DNS解決のためにホストのリストをチェックする簡単なスクリプトです。
DNS名をチェックするための簡単なBashスクリプト-
#!/bin/bash
for name in $(cat $1); do host $name.$2 | grep "has address"
done
exit
DNS解決をテストするための小さなワードリスト-
dns
www
test
dev
mail
rdp
remote
google.comドメインに対する出力-
[rdc@centos ~]$ ./dns-check.sh dns-names.txt google.com
-doing dns
dns.google.com has address 172.217.6.46
-doing www
www.google.com has address 172.217.6.36
-doing test
-doing dev
-doing mail
googlemail.l.google.com has address 172.217.6.37
-doing rdp
-doing remote
[rdc@centos ~]$
シェルで単純なLinuxコマンドを利用して、単語リストからDNS名を監査する単純な5行のスクリプトを作成することができました。これは、適切に実装されたDNSライブラリを使用している場合でも、Perl、Python、またはRubyではかなりの時間がかかります。
スクリプト言語
スクリプト言語を使用すると、シェルの外部をより細かく制御できます。上記のBashスクリプトは、Linuxホストコマンドのラッパーを使用していました。もっと多くのことをして、ホストのような独自のアプリケーションをシェルの外部と相互作用させたい場合はどうなりますか?ここで、スクリプト言語を使用します。
また、高度に維持されたスクリプト言語を使用すると、ほとんどの場合、アクションがさまざまなシステムで機能することがわかります。たとえば、Python 3.5は、同じライブラリがインストールされているPython3.5を実行している他のシステムで動作します。LinuxとHP-UXの両方でBASHスクリプトを実行する場合は、そうではありません。
スクリプト言語と強力なシェルの間の境界線がぼやけることがあります。Python、Perl、またはRubyを使用してCentOSLinux管理タスクを自動化することができます。そうすることは本当にごく当たり前のことです。また、裕福なシェルスクリプト開発者は、Bashでシンプルでありながら機能的なWebサーバーデーモンを作成しました。
スクリプト言語とシェルでのタスクの自動化の経験があるCentOS管理者は、問題を解決する必要があるときにどこから始めればよいかをすばやく判断できます。シェルスクリプトを使用してプロジェクトを開始することは非常に一般的です。次に、プロジェクトがより複雑になるにつれて、スクリプト(またはコンパイル)言語に進みます。
また、プロジェクトのさまざまな部分にスクリプト言語とシェルスクリプトの両方を使用することもできます。例としては、WebサイトをスクレイプするPerlスクリプトがあります。次に、シェルスクリプトを使用して、sed、awk、およびegrepを使用して解析およびフォーマットします。最後に、PHPスクリプトを使用して、WebGUIを使用してフォーマットされたデータをMySQLデータベースに挿入します。
シェルの背後にあるいくつかの理論を使用して、CentOSのBashシェルからタスクを自動化するための基本的な構成要素から始めましょう。
入出力とリダイレクト
別のコマンドへのstdoutの処理-
[rdc@centos ~]$ cat ~/output.txt | wc -l
6039
[rdc@centos ~]$
上記では、パイプ文字で処理するためにcat'sstoudをwcに渡しました。次に、wcはcatからの出力を処理し、output.txtの行数を端末に出力します。パイプ文字は、次のコマンドで処理される、あるコマンドからの出力を渡す「パイプ」と考えてください。
以下は、コマンドリダイレクトを処理するときに覚えておくべき重要な概念です。
数 | ファイル記述子 | キャラクター |
---|---|---|
0 | 標準入力 | < |
1 | 標準出力 | >> |
2 | 標準誤差 | |
stdoutを追加 | >> | |
リダイレクトを割り当てる | & | |
stdoutをstdinにパイプします | | |
これについては、リダイレクトやリダイレクトの割り当てについてあまり話さずに、第1章で紹介しました。Linuxでターミナルを開くと、シェルが-のデフォルトのターゲットとして表示されます。
- 標準入力<0
- 標準出力> 1
- 標準誤差2
これがどのように機能するか見てみましょう-
[rdc@centos ~]$ lsof -ap $BASHPID -d 0,1,2 COMMAND PID USER **FD** TYPE DEVICE SIZE/OFF NODE NAME bash 13684 rdc **0u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **1u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **2u** CHR 136,0 0t0 3 /dev/pts/0 [rdc@centos ~]$
/ dev / pts / 0は疑似端末です。CentOS Linuxはこれを見て、シリアルインターフェイスを介してプラグインされたキーボードとディスプレイを備えた実際の端末のようなオープン端末アプリケーションを考えます。ただし、ハイパーバイザーがハードウェアをオペレーティングシステムに抽象化するように、/ dev / ptsは端末をアプリケーションに抽象化します。
上記のlsofコマンドから、FD3つのファイル記述子すべてが仮想端末(0,1,2)に設定されている列。これで、コマンドを送信できます。コマンド出力、およびコマンドに関連するエラーを確認してください。
以下は、STDINおよびSTDOUTの例です。
STDOUT
[root@centosLocal centos]# echo "I am coming from Standard output or STDOUT." >
output.txt && cat output.txt
I am coming from Standard output or STDOUT.
[root@centosLocal centos]#
stdoutとstderrの両方を別々のファイルに送信することも可能です-
bash-3.2# find / -name passwd 1> good.txt 2> err.txt
bash-3.2# cat good.txt
/etc/pam.d/passwd
/etc/passwd
bash-3.2# cat err.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
bash-3.2#
ファイルシステム全体を検索すると、2つのエラーが発生しました。それぞれが後で閲覧するために別々のファイルに送信され、返された結果は別々のテキストファイルに配置されました。
stderrをテキストファイルに送信すると、アプリケーションのコンパイルなど、端末に大量のデータを出力する場合に役立ちます。これにより、端末のスクロールバック履歴から失われる可能性のあるエラーを精査できます。
STDOUTをテキストファイルに渡すときの1つの注意点は、 >> そして >。二重の「>>」はファイルに追加されますが、単数形はファイルを上書きして新しいコンテンツを書き込みます(したがって、以前のデータはすべて失われます)。
STDIN
[root@centosLocal centos]# cat < stdin.txt
Hello,
I am being read form Standard input, STDIN.
[root@centosLocal centos]#
上記のコマンドでは、テキストファイルstdin.txtがcatコマンドにリダイレクトされ、その内容がSTDOUTにエコーされました。
パイプ文字「|」
パイプ文字は、最初のコマンドからの出力を受け取り、それを入力として次のコマンドに渡し、2番目のコマンドが出力に対して操作を実行できるようにします。
それでは、猫の標準出力を別のコマンドに「パイプ」してみましょう-
[root@centosLocal centos]# cat output.txt | wc -l
2
[root@centosLocal centos]#
上記のwcは、パイプから渡されたcatからの出力に対して計算を実行します。以下からの出力をフィルタリングするときにパイプコマンドが特に有用であるのgrepまたはegrepの-
[root@centosLocal centos]# egrep "^[0-9]{4}$" /usr/dicts/nums | wc -l
9000
[root@centosLocal centos]#
上記のコマンドでは、egrepフィルターを通過した65535からのすべての数値を含むテキストファイルから、4桁ごとの数値をwcに渡しました。
&を使用した出力のリダイレクト
出力は、を使用してリダイレクトできます &キャラクター。STDOUTとSTDERRの両方の出力を同じファイルに送信する場合は、次のように実行できます。
[root@centosLocal centos]# find / -name passwd > out.txt 2>&1
[root@centosLocal centos]# cat out.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/etc/passwd
[root@centosLocal centos]#
を使用したリダイレクト &文字は次のように機能します。最初に、出力はout.txtにリダイレクトされます。次に、STDERRまたはファイル記述子2が、STDOUTと同じ場所(この場合はout.txt)に再割り当てされます。
リダイレクトは非常に便利で、大きなテキストファイルの操作、ソースコードのコンパイル、シェルスクリプトでの出力のリダイレクト、複雑なLinuxコマンドの発行時に発生する問題を解決する際に役立ちます。
強力ですが、新しいCentOS管理者にとってリダイレクトは複雑になる可能性があります。Linuxフォーラム(Stack Overflow Linuxなど)への練習、調査、および時折の質問は、高度なソリューションの解決に役立ちます。
Bashシェルコンストラクト
Bashシェルがどのように機能するかについての良いアイデアが得られたので、スクリプトを作成するために一般的に使用されるいくつかの基本的な構造を学びましょう。このセクションでは、以下について説明します。
- Variables
- Loops
- Conditionals
- ループ制御
- ファイルの読み取りと書き込み
- 基本的な数学演算
BASHトラブルシューティングのヒント
BASHは、専用のスクリプト言語と比較して少し注意が必要です。BASHスクリプトの最大のハングアップのいくつかは、シェルに渡されるスクリプト操作を誤ってエスケープするか、エスケープしないことによるものです。スクリプトを数回調べても期待どおりに機能しない場合は、心配しないでください。これは、BASHを使用して複雑なスクリプトを毎日作成する人にもよく見られます。
Googleをすばやく検索するか、専門家のLinuxフォーラムにサインアップして質問をすると、迅速な解決につながります。誰かが正確な問題に遭遇し、それがすでに解決されている可能性が非常に高いです。
BASHスクリプトは、管理タスクの自動化から便利なツールの作成まで、あらゆるものに対応する強力なスクリプトをすばやく作成するための優れた方法です。エキスパートレベルのBASHスクリプト開発者になるには、時間と練習が必要です。したがって、可能な限りBASHスクリプトを使用してください。これは、CentOS管理ツールボックスに含めるのに最適なツールです。
CentOSでのパッケージ管理は、端末からとグラフィカルユーザーインターフェイスからの2つの方法で実行できます。
多くの場合、CentOS管理者の時間の大部分は端末を使用します。CentOSのパッケージの更新とインストールも同じです。これを念頭に置いて、最初にターミナルでのパッケージ管理について説明し、次にCentOSが提供するグラフィカルなパッケージ管理ツールの使用について説明します。
YUMパッケージマネージャー
YUMは、CentOSのパッケージ管理用に提供されているツールです。前の章でこのトピックに簡単に触れました。この章では、CentOSのクリーンインストールから作業します。最初にインストールを完全に更新してから、アプリケーションをインストールします。
YUMは、Linuxでのソフトウェアのインストールと管理を長い道のりでもたらしました。YUMは、古いパッケージに加えて、古い依存関係を「自動的に」チェックします。これにより、ソースコードからすべてのアプリケーションをコンパイルする昔と比較して、CentOS管理者の負荷が大幅に軽減されました。
yumcheck-update
候補を更新できるパッケージをチェックします。このチュートリアルでは、パッケージをアップグレードする前にDevOpsでテストする必要のある本番アプリケーションがなく、インターネットに面している本番システムを想定しています。更新された候補をシステムにインストールしましょう。
[root@localhost rdc]# yum check-update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
NetworkManager.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-19.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
vim-common.x86_64 2:7.4.160-1.el7_3.1 updates
vim-enhanced.x86_64 2:7.4.160-1.el7_3.1 updates
vim-filesystem.x86_64 2:7.4.160-1.el7_3.1 updates
vim-minimal.x86_64 2:7.4.160-1.el7_3.1 updates
wpa_supplicant.x86_64 1:2.0-21.el7_3 updates
xfsprogs.x86_64 4.5.0-9.el7_3 updates
[root@localhost rdc]#
yumアップデート
これにより、更新されたすべての候補がインストールされ、CentOSのインストールが最新になります。新規インストールでは、インストールとインターネット接続速度によっては、これに少し時間がかかる場合があります。
[root@localhost rdc]# yum update
vim-minimal x86_64 2:7.4.160-1.el7_3.1 updates 436 k
wpa_supplicant x86_64 1:2.0-21.el7_3 updates 788 k
xfsprogs x86_64 4.5.0-9.el7_3 updates 895 k
Transaction Summary
======================================================================================
Install 2 Packages
Upgrade 156 Packages
Total download size: 371 M
Is this ok [y/d/N]:
YUM経由でソフトウェアをインストールする
CentOSシステムの更新に加えて、YUMパッケージマネージャーはソフトウェアをインストールするための頼りになるツールです。ネットワーク監視ツール、ビデオプレーヤー、テキストエディターなど、すべてをYUMを使用して中央リポジトリからインストールできます。
いくつかのソフトウェアユーティリティをインストールする前に、いくつかのYUMコマンドを見てみましょう。日常業務の場合、CentOS管理者によるYUMの使用の90%は、約7つのコマンドを使用します。YUMを日常的に使いこなせるレベルでの運用に慣れることを願って、それぞれを見ていきます。ただし、ほとんどのLinuxユーティリティと同様に、YUMは、マニュアルページから探索するのに常に最適な高度な機能を豊富に備えています。Linuxユーティリティでなじみのない操作を実行するための最初のステップは、常にmanyumを使用することです。
最も一般的なYUMコマンド
以下は、一般的に使用されるYUMコマンドです。
コマンド | アクション |
---|---|
インストールされているリスト | YUMを介してインストールされたパッケージを一覧表示します |
すべてリストする | 現在利用可能なすべてのパッケージを一覧表示します |
グループリスト | グループ化されたパッケージを一覧表示します |
情報 | パッケージに関する詳細情報を提供します |
探す | パッケージの説明と名前を検索します |
インストール | パッケージをインストールします |
localinstall | ローカルrpmパッケージをインストールします |
削除する | パッケージを削除してインストールします |
すべてをきれいにする | / var / cache / yumをクリーンアップしてディスクスペースを解放します |
man yum | すべてのLinuxコマンドと同様に、ヘルプファイル |
YUMを使用してソフトウェアをインストールする
次に、というテキストベースのWebブラウザをインストールします。 Lynx。インストールする前に、まずLynxWebブラウザーを含むパッケージ名を取得する必要があります。デフォルトのCentOSリポジトリがLynxWebブラウザ用のパッケージを提供するかどうかさえ100%確信していないので、検索して見てみましょう-
[root@localhost rdc]# yum search web browser
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
=================================================================
N/S matched: web, browser
==================================================================
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser
plug-in and Web Start implementation
elinks.x86_64 : A text-mode Web browser
firefox.i686 : Mozilla Firefox Web browser
firefox.x86_64 : Mozilla Firefox Web browser
lynx.x86_64 : A text-based Web browser
Full name and summary matches only, use "search all" for everything.
[root@localhost rdc]#
ご覧のとおり、CentOSはリポジトリでLynxWebブラウザを提供しています。パッケージに関する詳細情報を見てみましょう。
[root@localhost rdc]# lynx.x86_64
bash: lynx.x86_64: command not found...
[root@localhost rdc]# yum info lynx.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Packages
Name : lynx
Arch : x86_64
Version : 2.8.8
Release : 0.3.dev15.el7
Size : 1.4 M
Repo : base/7/x86_64
Summary : A text-based Web browser
URL : http://lynx.isc.org/
License : GPLv2
Description : Lynx is a text-based Web browser. Lynx does not display any images,
: but it does support frames, tables, and most other HTML tags. One
: advantage Lynx has over graphical browsers is speed; Lynx starts and
: exits quickly and swiftly displays web pages.
[root@localhost rdc]#
いいね!バージョン2.8は十分に最新なので、Lynxをインストールしましょう。
[root@localhost rdc]# yum install lynx
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Resolving Dependencies
--> Running transaction check
---> Package lynx.x86_64 0:2.8.8-0.3.dev15.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
lynx x86_64
2.8.80.3.dev15.el7 base 1.4 M
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 1.4 M
Installed size: 5.4 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for base
lynx-2.8.8-0.3.dev15.el7.x86_64.rpm
| 1.4 MB 00:00:10
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Verifying : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Installed:
lynx.x86_64 0:2.8.8-0.3.dev15.el7
Complete!
[root@localhost rdc]#
次に、Lynxが実際に正しくインストールされたことを確認しましょう。
[root@localhost rdc]# yum list installed | grep -i lynx
lynx.x86_64 2.8.8-0.3.dev15.el7 @base
[root@localhost rdc]#
すごい!Lynxを使用して、「いいね」やきれいな写真なしでWebがどのように見えるかを見てみましょう。
[root@localhost rdc]# lynx www.tutorialpoint.in
これで、本番サーバー用のWebブラウザーができました。これは、Web上で起動されるリモートエクスプロイトを心配することなく使用できます。これは本番サーバーにとっては良いことです。
ほぼ完成しましたが、最初に開発者がアプリケーションをテストできるようにこのサーバーを設定する必要があります。したがって、彼らが彼らの仕事に必要なすべてのツールを持っていることを確認しましょう。すべてを個別にインストールすることもできますが、CentOSとYUMによってこれが大幅に高速化されました。開発グループパッケージをインストールしましょう。
[root@localhost rdc]# yum groups list
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Groups:
Compatibility Libraries
Console Internet Tools
Development Tools
Graphical Administration Tools
Legacy UNIX Compatibility
Scientific Support
Security Tools
Smart Card Support
System Administration Tools
System Management
Done
[root@localhost rdc]#
これは、CentOSが提供するパッケージグループの小さなリストです。「開発グループ」に含まれるものを見てみましょう。
[root@localhost rdc]# yum group info "Development Tools"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Group: Development Tools
Group-Id: development
Description: A basic development environment.
Mandatory Packages:
autoconf
automake
binutils
bison
出力の最初の画面は上記のとおりです。このリスト全体はかなり包括的です。ただし、このグループは通常、時間が経つにつれて全体をインストールする必要があります。開発グループ全体をインストールしましょう。
[root@localhost rdc]# yum groupinstall "Development Tools"
これはより大きなインストールになります。完了すると、サーバーにはPerl、Python、C、およびC ++用のほとんどの開発ライブラリとコンパイラが含まれます。
CentOSでのグラフィカルなパッケージ管理
Gnome Desktopは、と呼ばれるグラフィカルなパッケージ管理ツールを提供します Software。使い方はかなり簡単で簡単です。CentOS用のGnomeパッケージ管理ツールであるソフトウェアは、[アプリケーション]→[システムツール]→[ソフトウェア]に移動すると見つかります。
ソフトウェアパッケージ管理ツールはグループに分かれており、管理者はインストールするパッケージを選択できます。このツールはエンドユーザーにとって使いやすさとシンプルさには優れていますが、YUMははるかに強力であり、おそらく管理者によってより多く使用されるでしょう。
以下は、ソフトウェアパッケージ管理ツールのスクリーンショットですが、実際にはシステム管理者向けに設計されたものではありません。
Logical Volume Management (LVM)Linuxが異なる物理ハードディスク全体のストレージボリュームを管理するために使用する方法です。これをRAIDと混同しないでください。ただし、RAID0またはJ-Bodと同様の概念で考えることができます。LVMを使用すると、(たとえば)それぞれ1TBの物理ディスクを3つ作成し、次に/ dev / sdbなどの論理ボリュームを約3TBにすることができます。または、1.5TBの2つの論理ボリューム、500GBの5つのボリューム、または任意の組み合わせです。1つのディスクを論理ボリュームのスナップショットに使用することもできます。
Note−論理ボリュームを使用すると、正しく構成されている場合、実際にはディスクI / Oが増加します。これは、別々のディスクにまたがるRAID0ストライピングデータと同じように機能します。
LVMを使用したボリューム管理について学習するときは、LVMの各コンポーネントが何であるかを知っていると簡単です。次の表を調べて、各コンポーネントをしっかりと把握してください。必要に応じて、Googleを使用して学習してください。論理ボリュームの各部分を理解することは、それらを管理するために重要です。
PV | 物理ボリューム | sda |
PP | 物理パーティション | sda1、sda2 |
VG | ボリュームグループ | プールされた物理リソース |
LV | 論理ボリューム | オペレーティングシステムのストレージ施設と見なされます |
A physical volume/ dev / sda、/ dev / sdbとして表示されます。Linuxによって検出された物理ディスク。
A physical partitionfdiskなどのディスクユーティリティによってパーティション化されたディスクのセクションになります。ほとんどの一般的なLVMセットアップでは、物理パーティションは推奨されないことに注意してください。例:ディスク/ dev / sdaは、/ dev / sda1と/ dev / sda1の2つの物理パーティションを含むようにパーティション化されています
それぞれ1TBの物理ディスクが2つある場合、2つの間にほぼ2TBのボリュームグループを作成できます。
ボリュームグループから、ボリュームグループの合計サイズを超えない任意のサイズの3つの論理ボリュームを作成できます。
従来のLinuxディスク管理ツール
CentOS 7のLVM管理用の最新かつ最も優れた機能を備えたツールに精通する前に、まずLinuxディスク管理に使用されてきた従来のツールを調べる必要があります。これらのツールは便利であり、System Storage Manager(lsblk、parted、mkfs.xfs)などの今日の高度なLVMツールでも引き続き使用できます。
ここで、システムに1つまたは2つのディスクを追加したと仮定して、Linuxによって検出されたディスクを列挙する必要があります。破壊的と見なされる操作を実行する前に、毎回ディスクを列挙することをお勧めします。lsblkディスク情報を取得するための優れたツールです。CentOSが検出するディスクを見てみましょう。
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
sdc 8:32 0 4G 0 disk
sr0 11:0 1 1024M 0 rom
ご覧のとおり、このシステムにはsda、sdb、sdcの3つのディスクがあります。
Disk sdaには動作中のCentOSインストールが含まれているため、sdaをいじくり回したくありません。このチュートリアルでは、sdbとsdcの両方がシステムに追加されました。これらのディスクをCentOSで使用できるようにしましょう。
ディスクラベルを作成する
[root@localhost rdc]# parted /dev/sdb mklabel GPT
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this
disk will be lost. Do you want to continue?
Yes/No? Yes
[root@localhost rdc]#
これで、1つのディスクにラベルが付けられました。sdcでも同じ方法でpartedコマンドを実行するだけです。
ディスク上にパーティションを作成する
各ディスクに1つのパーティションのみを作成します。パーティションを作成するには、partedコマンドを再度使用します。
[root@localhost rdc]# parted -a opt /dev/sdb mkpart primary ext4 0% 100%
Warning − 0.00Bから6442MB(セクター0..12582911)のパーティションを要求しました。
管理できる最も近い場所は、17.4kBから1048kB(セクター34..2047)です。
これはまだあなたに受け入れられますか?
はい・いいえ?番号
[root@localhost rdc]# parted -a opt /dev/sdc mkpart primary ext4 0% 100%
Information − / etc / fstabを更新する必要がある場合があります。
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part / boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
└─sdb1 8:17 0 6G 0 part
sdc 8:32 0 4G 0 disk
└─sdc1 8:33 0 4G 0 part
sr0 11:0 1 1024M 0 rom
[root@localhost rdc]#
lsblkの出力からわかるように、2つのパーティションがあり、それぞれがsdbとsdcにあります。
ファイルシステムを作成する
最後に、ボリュームをマウントして使用する前に、ファイルシステムを追加する必要があります。XFSファイルシステムを使用します。
root@localhost rdc]# mkfs.xfs -f /dev/sdb1
meta-data = /dev/sdb1 isize = 512 agcount = 4, agsize = 393088 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1572352, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]# mkfs.xfs -f /dev/sdc1
meta-data = /dev/sdc1 isize = 512 agcount = 4, agsize = 262016 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1048064, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]#
それぞれに使用可能なファイルシステムがあることを確認しましょう。
[root@localhost rdc]# lsblk -o NAME,FSTYPE
NAME FSTYPE
sda
├─sda1 xfs
└─sda2 LVM2_member
├─cl-root xfs
└─cl-swap swap
sdb
└─sdb1 xfs
sdc
└─sdc1 xfs
sr0
[root@localhost rdc]#
現在、それぞれがXFSファイルシステムを使用しています。それらをマウントし、マウントを確認して、それぞれにファイルをコピーしましょう。
[root@localhost rdc]# mount -o defaults /dev/sdb1 /mnt/sdb
[root@localhost rdc]# mount -o defaults /dev/sdc1 /mnt/sdc
[root@localhost ~]# touch /mnt/sdb/myFile /mnt/sdc/myFile
[root@localhost ~]# ls /mnt/sdb /mnt/sdc
/mnt/sdb:
myFile
/mnt/sdc:
myFile
この時点で、2つの使用可能なディスクがあります。ただし、手動でマウントした場合にのみ使用できます。それぞれを起動時にマウントするには、fstabファイルを編集する必要があります。また、新しいディスクへのアクセスが必要なグループにアクセス許可を設定する必要があります。
ボリュームグループと論理ボリュームの作成
CentOS 7への最大の追加の1つは、System StorageManagerまたはssmと呼ばれるユーティリティが含まれていることでした。System Storage Manager LinuxでLVMプールとストレージボリュームを管理するプロセスを大幅に簡素化します。
CentOSで単純なボリュームプールと論理ボリュームを作成するプロセスを実行します。最初のステップは、System StorageManagerをインストールすることです。
[root@localhost rdc]# yum install system-storage-manager
ssmlistコマンドを使用してディスクを見てみましょう。
上記のように、合計3つのディスクがシステムにインストールされています。
/sdba1 −CentOSインストールをホストします
/sdb1 − / mnt / sdbにマウント
/sdc1 − / mnt / sdcにマウント
私たちがやりたいのは、2つのディスク(sdbとsdc)を使用してボリュームグループを作成することです。次に、3つの3GB論理ボリュームをシステムで使用できるようにします。
ボリュームグループを作成しましょう。
[root@localhost rdc]# ssm create -p NEW_POOL /dev/sdb1 /dev/sdc1
デフォルトでは、ssmはプールの10GB全体を拡張する単一の論理ボリュームを作成します。これは必要ないので、削除しましょう。
[root@localhost rdc]# ssm remove /dev/NEW_POOL/lvol001
Do you really want to remove active logical volume NEW_POOL/lvol001? [y/n]: y
Logical volume "lvol001" successfully removed
[root@localhost rdc]#
最後に、3つの論理ボリュームを作成しましょう。
[root@localhost rdc]# ssm create -n disk001 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk002 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk003 --fs xfs -s 3GB -p NEW_POOL
それでは、新しいボリュームを確認しましょう。
これで、2つの物理ディスクパーティションにまたがる3つの個別の論理ボリュームができました。
論理ボリュームは、CentOSLinuxに組み込まれた強力な機能です。これらの管理については、表面に触れました。マスタリングプールと論理ボリュームには、TutorialsPointからの練習と拡張学習が付属しています。今のところ、CentOSでのLVM管理の基本を学び、単一のホスト上に基本的なストライプ論理ボリュームを作成する機能を備えています。