Linuxサービスログおよびアクセス制御
1、rsyslog
イベント:システム起動、アプリケーション起動、アプリケーション、特にサービスクラスアプリケーションの実行中のイベント.システムログサービス:syslogd(syslogd:system,klogd:kernel)イベントフォーマットが簡単な場合、syslogによって統一的に記録することができる:イベントが発生した日時、ホスト、プロセス[pid]、イベント内容はC/Sアーキテクチャをサポートし、UDPまたはTCPプロトコルを通じてログ記録サービスを提供することができる;rsyslog(rsyslogd).特性:マルチスレッドログサービス;UDP、TCP、SSL、TLS、RELPなどのプロトコルのログを記録することができ、MySQL、PGSQL、Oracleなどのデータ管理システムにログ情報を格納することができ、強力なフィルタで、ログ情報の任意の部分の内容をフィルタリングし、出力フォーマットをカスタマイズすることができる.rsyslogログ収集器の重要な用語:(1)facility:施設、機能またはプログラムからログ収集を分類する;auth、authpriv、cron、daemon、kern、lpr、mail、mark、news、security、user、uucp、local 0-local 7、syslog;(2)priority:優先度、ログレベル;debug、info、notice、warn(warning)、err(error)、crit(critical)、alert、emerg(panic);(3)指定レベル*:すべてのレベル;none:レベルなし;priority:このレベルおよびそれ以上のすべてのレベル;=priority:このレベルのみ;(4)プログラム環境メインプログラム:rsyslogd;メインプロファイル:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf;サービススクリプト(centos 6):/etc/rc.d/init.d/rsyslog; Unit File(CentOS 7):/usr/lib/systemd/system/rsyslog.service; プロファイル形式rsyslog.confは、主にMODULES、GLOBAL DRICTIVES、RULESの3つの部分から構成されています.RULES:facilty.priority target target:ファイル:指定したファイルにログイベントを記録します.通常は/var/logディレクトリの下にある必要があります.ファイルパスの前の"-"は非同期書き込みを表します.≪ユーザー|User|ldap≫:指定したユーザーにログ・イベントを通知します.システムに登録されたユーザの端末に情報を送信することによって行われる.ログサーバ:@host,ログを指定したサーバホストに送る;host:すなわち、tcpまたはudpプロトコルの514ポートを傍受してサービスを提供するログサーバアドレスである.パイプ:|COMMANDその他ログファイル:/var/log/wtmp:現在のシステムが正常にシステムにログインしたログは、lastコマンドを使用して表示する必要があります./var/log/btmp:現在のシステムがシステムにログインしようとした失敗に関連するログは、lastbコマンドを使用して表示する必要があります.Lastlog:現在のシステム上のすべてのユーザーが最後にシステムにログインした時間を表示します./var/log/dmesg:システム起動中のログ情報は、dmesgコマンドを使用して表示することもできます.rsyslogサーバ:
ログをmysqlに記録する:(1)MySQLサーバで:MySQLサーバを用意し、ユーザーを作成し、Syslogデータベースへのすべてのアクセスを許可する;(2)rsyslogホストで:rsyslog-mysqlパッケージをインストールする;(3)rsyslogホストで:createDB.sqlスクリプトをインポートして依存するデータベースおよびテーブルを作成する;
注意:rsyslogサービスを再起動します.(5)webディスプレイインタフェース:loganalyzer(a)構成lamp組合せ:httpd,php,php-mysql,php-gd(b)インストールloganalyzer
URLからアクセス:http://HOST/loganalyzer
2、nsswitch and pam
(1)nsswitch:name service switch汎用フレームワーク、様々なタイプのストレージとインタラクティブな共通実装;実装:/usr/lib 64/libnss*、/lib 64/libnss*フレームワーク:libnss駆動:libnss_files-解析ライブラリに使用されるアプリケーションごとに構成によってその位置を定義する:/etc/nsswitch.conf db:store 1 store 2...例えば:
解析ライブラリ:ファイル、リレーショナルデータ管理システム(MySQL)、NIS、LDAP、DNS.各記憶における検索結果状態:
3、tcp_wrapper
tcp_wrapperはtcp包装器で、ライブラリファイル:libwrapを使用する.so,プロファイル:/etc/hosts.allow,/etc/hosts.deny. あるサービスがtcp_wrapperによるアクセス制御方法:1)動的コンパイル:lddコマンド:
4、sudo
su:switch user、ユーザー切り替え.
このファイルをコンパイルするための専用コマンド:visudo認可項目:
users:username,#uid,%groupname,%#gid,user_aliasは、複数のユーザを1組のユーザとして定義することをサポートし、ユーザ別名、すなわちuser_と呼ぶalias; hosts:ip,hostname,NetAddr,host_alias runas:unas_alias commands:command,directory,sudoedit(sudoパーミッションを他のユーザに付与するために使用可能な特殊なパーミッション)、cmnd_alias;エイリアスを定義する方法:
sudoコマンド改札メカニズム:成功した認証結果を記録できる時間は、デフォルトでは5分です.指定されたコマンドをsudoで実行します.
常用ラベル:NOPASWD、PASWD.
イベント:システム起動、アプリケーション起動、アプリケーション、特にサービスクラスアプリケーションの実行中のイベント.システムログサービス:syslogd(syslogd:system,klogd:kernel)イベントフォーマットが簡単な場合、syslogによって統一的に記録することができる:イベントが発生した日時、ホスト、プロセス[pid]、イベント内容はC/Sアーキテクチャをサポートし、UDPまたはTCPプロトコルを通じてログ記録サービスを提供することができる;rsyslog(rsyslogd).特性:マルチスレッドログサービス;UDP、TCP、SSL、TLS、RELPなどのプロトコルのログを記録することができ、MySQL、PGSQL、Oracleなどのデータ管理システムにログ情報を格納することができ、強力なフィルタで、ログ情報の任意の部分の内容をフィルタリングし、出力フォーマットをカスタマイズすることができる.rsyslogログ収集器の重要な用語:(1)facility:施設、機能またはプログラムからログ収集を分類する;auth、authpriv、cron、daemon、kern、lpr、mail、mark、news、security、user、uucp、local 0-local 7、syslog;(2)priority:優先度、ログレベル;debug、info、notice、warn(warning)、err(error)、crit(critical)、alert、emerg(panic);(3)指定レベル*:すべてのレベル;none:レベルなし;priority:このレベルおよびそれ以上のすべてのレベル;=priority:このレベルのみ;(4)プログラム環境メインプログラム:rsyslogd;メインプロファイル:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf;サービススクリプト(centos 6):/etc/rc.d/init.d/rsyslog; Unit File(CentOS 7):/usr/lib/systemd/system/rsyslog.service; プロファイル形式rsyslog.confは、主にMODULES、GLOBAL DRICTIVES、RULESの3つの部分から構成されています.RULES:facilty.priority target target:ファイル:指定したファイルにログイベントを記録します.通常は/var/logディレクトリの下にある必要があります.ファイルパスの前の"-"は非同期書き込みを表します.≪ユーザー|User|ldap≫:指定したユーザーにログ・イベントを通知します.システムに登録されたユーザの端末に情報を送信することによって行われる.ログサーバ:@host,ログを指定したサーバホストに送る;host:すなわち、tcpまたはudpプロトコルの514ポートを傍受してサービスを提供するログサーバアドレスである.パイプ:|COMMANDその他ログファイル:/var/log/wtmp:現在のシステムが正常にシステムにログインしたログは、lastコマンドを使用して表示する必要があります./var/log/btmp:現在のシステムがシステムにログインしようとした失敗に関連するログは、lastbコマンドを使用して表示する必要があります.Lastlog:現在のシステム上のすべてのユーザーが最後にシステムにログインした時間を表示します./var/log/dmesg:システム起動中のログ情報は、dmesgコマンドを使用して表示することもできます.rsyslogサーバ:
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
ログをmysqlに記録する:(1)MySQLサーバで:MySQLサーバを用意し、ユーザーを作成し、Syslogデータベースへのすべてのアクセスを許可する;(2)rsyslogホストで:rsyslog-mysqlパッケージをインストールする;(3)rsyslogホストで:createDB.sqlスクリプトをインポートして依存するデータベースおよびテーブルを作成する;
mysql -uUSER -hHOST -pPASSWORD < /usr/share/doc/rsyslog-mysql-VERSION/createDB.sql
(4)rsyslogを構成ommysqlモジュールを使用する### MODULES ####
$ModLoad ommysql
#### RULES ####
facility.priority :ommysql:DBHOST,DB,DBUSER,DBUSERPASS
注意:rsyslogサービスを再起動します.(5)webディスプレイインタフェース:loganalyzer(a)構成lamp組合せ:httpd,php,php-mysql,php-gd(b)インストールloganalyzer
# tar xf loganalyzer-3.6.5.tar.gz
# cp -r loganalyzer-3.6.5/src /var/www/html/loganalyzer
# cp -r loganalyzer-3.6.5/contrib/*.sh /var/www/html/loganalyzer/
# cd /var/www/html/loganalyzer/
# chmod +x *.sh
# ./configure.sh
# ./secure.sh
# chmod 666 config.php
URLからアクセス:http://HOST/loganalyzer
2、nsswitch and pam
(1)nsswitch:name service switch汎用フレームワーク、様々なタイプのストレージとインタラクティブな共通実装;実装:/usr/lib 64/libnss*、/lib 64/libnss*フレームワーク:libnss駆動:libnss_files-解析ライブラリに使用されるアプリケーションごとに構成によってその位置を定義する:/etc/nsswitch.conf db:store 1 store 2...例えば:
passwd: files
hosts: files dns
解析ライブラリ:ファイル、リレーショナルデータ管理システム(MySQL)、NIS、LDAP、DNS.各記憶における検索結果状態:
STATSU => success | notfound | unavail | tryagain
各状態結果に対応する動作(action):return | continue
例:hosts: files nis [NOTFOUND=return] dns
getentコマンド:getent DATABASE [key]
(2)pam:pluggable authentication module多種の種類のストレージ:ファイル、関係型データ管理システム、LDAP、NIS;pam:汎用フレームワーク、各種の種類のストレージとインタラクティブな共通実現、及び多種の補助類の機能を提供する:/lib 64/security/*配置ファイル:pamを呼び出した各種のアプリケーションにその専用配置を提供する;汎用プロファイル:/etc/pam.confは、pamを呼び出して認証機能を完了するアプリケーションごとに構成を提供することができる.専用プロファイル:/etc/pam.d/*は、通常、特定のアプリケーションの構成に特化しています.通常、各アプリケーションは個別のプロファイルを使用します.プロファイルフォーマット:汎用プロファイル:アプリケーション、type、control、module-path、module-arguments専用プロファイル:type、control、module-path、module-arguments type:チェックの機能カテゴリauth:アカウントの認証と認可;Account:アカウント管理に関連する非認証クラスの機能;password:ユーザーがパスワードを変更する際のパスワード複雑度検査メカニズム;session:ユーザーはサービスを取得する前に、またはサービスを使用して完了した後に、いくつかの付加的な操作を行う必要があります.コントロール:同じ機能の複数のチェックの間でどのように組み合わせるか.2つの実現メカニズム:1)簡単な実現:1つのキーワードを使用して定義する;2)詳細な実装:1つ以上の「status=action」を使用する.簡単な実装:required:チェックに合格する必要があります.そうでなければ、失敗です.成功しても失敗しても、後続の同じ機能の他のモジュールで検査を継続する必要があります.requisite:一票否決;検出失敗は直接失敗に戻る.検出に成功すると、後続の同種機能の他のモジュールによって検査される.sufficient:一票が通過すると、検査に成功したら直接成功に戻る.検出に失敗すると、後続の同種機能の他のモジュールによって検査される.optional:オプション、参照制御メカニズム;include:他のプロファイル内の同種の機能を呼び出す検出メカニズム;詳細実装:[status 1=action 1,status 2=action 2,...]status:ステータスを返します.Action:ok,done,die,bad,ignore,...module-path:モジュールファイルパス;相対パス:/lib 64/security/ディレクトリに対して;絶対パス:任意のアクセス可能パスに配置できます.module-arguments:モジュールの専用パラメータ;モジュール例:1)pam_limits.so:リソース制限ユーザーレベルで使用可能なリソースの制限を実現します.例えば、開くことができるファイルの数、実行可能なプロセスの数、使用可能なメモリ領域などです.変更制限の実現方法:(a)ulimitコマンド(b)プロファイル:/etc/security/limits.conf,/etc/security/limits.d/*.confプロファイル:行ごとに1つの定義; -
:どのオブジェクトに適用されますか.username@group*:すべてのユーザー
:制限のタイプ;ソフト:ソフトリミット、一般ユーザー自身で修正できます;hard:rootユーザーによって設定され、kernelによって強制的に有効になります.-:ソフトとハードの使用は同じ制限です.
:制限されたリソースタイプnofile:同時に開くことができる最大ファイル数;デフォルトは1024です.nproc:同時に実行できるプロセスの最大数.デフォルトは1024です.ulimitコマンド:ソフトリミットを調整します.-n:最大オープンファイル記述子数-u:最大ユーザプロセス数-S:soft(ソフト)リソース使用制限-H:hard(ハード)リソース使用制限3、tcp_wrapper
tcp_wrapperはtcp包装器で、ライブラリファイル:libwrapを使用する.so,プロファイル:/etc/hosts.allow,/etc/hosts.deny. あるサービスがtcp_wrapperによるアクセス制御方法:1)動的コンパイル:lddコマンド:
ldd $(which COMMAND) | grep libwrap
)静的コンパイル:stringsコマンドアプリケーションファイルが表示され、その結果hosts.ここにいるよdenyファイル;サービスはlibwrapに基づいてアクセス制御を完了するプロセス:まず/etc/hostsをチェックする.allowファイルに現在のリクエスト者へのアクセスを明示的に許可していますか:はい:クライアントへのアクセスを直接許可します.いいえ:次に/etc/hostsをチェックします.denyファイルに現在のリクエスト者のアクセスが明示的に拒否されているかどうか:はい:現在のリクエスト者のアクセスを直接拒否します.No:リクエスト者のアクセスを許可します.プロファイル構文:daemon_list: client_list [:options]
daemon_List:1)サービス名ではなく、単一のアプリケーションのファイル名.2)カンマで区切られたアプリケーションファイル名のリスト.たとえば、sshd、vsftpd;3)ALL:全て受け入れtcp_wrapper制御のプログラム;client_List:IPアドレス;ホスト名;≪ネットワーク・アドレス|Network Address|emdw≫:完全なフォーマットのマスクを使用する必要があります.接頭辞フォーマットのマスクは使用できません.短いフォーマットのネットワークアドレス:例えば172.16.172.16を表す.0.0/255.255.0.0;ALL:すべてのホスト;KNOWN;UNKNOWN;PARANOID; EXCEPT:以外;options:deny:拒否、主にhosts.allowファイル;allow:許可、主にhostsに使用する.denyファイル;spawn:指定したアプリケーションを起動します.vsftpd: ALL :spawn /bin/echo $(date) login attempt from %c to %s, %d >> /var/log/vsftpd.deny.log
%c: client ip; %s: daemon@serve_ ip; %d: daemon name; 例えば、vsftpdは172.16にのみ開放する.0.0/255.255.0.0のホストアクセスsshdは172.16にのみ開放する.0.0/255.255.0.0のホストアクセスですが、172.16は含まれません.100.6: /etc/hosts.allow:
sshd: 172.16. EXCEPT 172.16.100.6
/etc/hosts.deny:
sshd: ALL
4、sudo
su:switch user、ユーザー切り替え.
su -l user
su -l user -c 'COMMAND'
sudoは、許可を受けたユーザに別のユーザとして指定されたコマンドを実行させることができる.ライセンスメカニズム:ライセンスファイル/etc/sudoersroot ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
このファイルをコンパイルするための専用コマンド:visudo認可項目:
who where=(whom) commands
users hosts=(runas) commands
users:username,#uid,%groupname,%#gid,user_aliasは、複数のユーザを1組のユーザとして定義することをサポートし、ユーザ別名、すなわちuser_と呼ぶalias; hosts:ip,hostname,NetAddr,host_alias runas:unas_alias commands:command,directory,sudoedit(sudoパーミッションを他のユーザに付与するために使用可能な特殊なパーミッション)、cmnd_alias;エイリアスを定義する方法:
ALIAS_TYPE NAME=item1, item2, item3, ...
NAME:エイリアス名、フル大文字を使用する必要があります;ALIAS_TYPE:User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias例:User_Alias NETADMIN=tom, jerry
Cmnd_Alias NETCMND=ip, ifconfig, route
NETADMIN localhost=(root) NETCMND
sudoコマンド改札メカニズム:成功した認証結果を記録できる時間は、デフォルトでは5分です.指定されたコマンドをsudoで実行します.
sudo [options] COMMAND
-l[l]command:ユーザーが実行できるコマンドをリストします.-k:以前キャッシュされたユーザの成功した認証結果を消去する./etc/sudoersの適用例:Cmnd_Alias USERADMINCMNDS = /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd [a-z]*, !/usr/bin/passwd root
User_Alias USERADMIN = bob, alice
USERADMIN ALL=(root) USERADMINCMNDS
常用ラベル:NOPASWD、PASWD.