○ Security_tips

*CentOS 5.5 の場合です
*selinux,exec-shield,RPM-GPG-KEY,su,at,batch,cron,root,shell
*libwrap,bash.history,hushlogin,vlock,setuid,setgid,mkpasswd

*ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
*設定ファイルで "#" で始まる行はコメントとして解釈されます

○selinuxのモード変更

:/etc/selinux/configで設定

# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled- SELinux is fully disabled.
SELINUX=enforcing

*再起動

:kernel起動時にオプションを付ける (SELINUX=enforcingの場合)

*selinuxを無効にする

title CentOS (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ selinux=0
initrd /initrd-2.6.18-194.el5.img

*permissiveモードにする

title CentOS (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ enforcing=0
initrd /initrd-2.6.18-194.el5.img

:setenforceコマンドで設定

*マシンを再起動した場合、/etc/selinux/configの内容で設定されます

$ su -
password:
# getenforce
Enforcing

*permissiveモードにする

# setenforce 0

*確認

# getenforce
Permissive

*enforcingモードにする

# setenforce 1

*確認

# getenforce
Enforcing

○exec-shieldの設定

*CentOS 5.5ではexec-shieldが有効になっています
*(デフォルト値は CentOSの設定では 1 になっています)
*メモリオーバーフローを制御します
*exec-shield= 0 - always-disabled
*exec-shield= 1 - default disabled, except binaries that enable it
*exec-shield= 2 - default enabled, except binaries that disable it

/etc/sysctl.confで設定します

kernel.exec-shield = 2

*修正後

# sysctl -p

*exec-shieldの設定を間違って、kernelが起動しなくなった場合
*grubの起動画面で kernelのオプションに exec-shield=0 を与えます

*ファイルごとにexec-shieldを有効・無効に設定できます
*execstackコマンドを使います
*$ man execstackでマニュアルを読みましょう

# execstack [OPTION...] [FILES]
# execstack -s filename (execstackをsetするとexec-shieldが無効になる)
# execstack -c filename(execstackをclearするとexec-shieldが有効になる)
# execstack -q filename (確認 X 無効 - 有効)

○RPM-GPG-KEYのインストール・アンインストール

:RPM-GPG-KEYのインストール(例)

# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

:RPM-GPG-KEYのインストールの確認

# rpm -qa |grep gpg-pubkey
gpg-pubkey-e8562897-459f07a4

:RPM-GPG-KEYのアンインストール(例)

# rpm -e gpg-pubkey-e8562897-459f07a4

*同名のkeyを複数登録している場合

# rpm -e --allmatches gpg-pubkey-e8562897-459f07a4

○RPMコマンドでファイル改竄のチェック

*例 /sbin/initを調べる

# rpm -V `rpm -qf /sbin/init`

*なにか表示されたら変更があった可能性がある

Sファイルサイズが異なっている
5MD5チェックサムが異なる
Lシンボリックリンクが変更されている
Tファイルの更新時刻が変更されている
Dデバイスファイルが変更されている
Uファイルの所有者が変更されている
Gファイルの所有グループが変更されている
Mファイルのパーミッションが変更されている

○suログインの制限

:wheelグループにユーザ (sola) を追加します

# gpasswd -a sola wheel

:/etc/pam.d/suファイルの修正(変更追加分)

auth required pam_wheel.so use_uid

:/etc/login.defsファイルに追加します

SU_WHEEL_ONLY yes

○at、batch実行ユーザの制限

*"root"と"sola"にat、batchの実行を許可します
*at.allowが存在する場合 at.denyは無視されます

# echo sola >> /etc/at.allow

○cron実行ユーザの制限

*"root"と"sola"にcronの実行を許可します
*cron.allowが存在する場合 cron.denyは無視されます

# echo sola >> /etc/cron.allow

○rootログインできる端末の制限

*/etc/securetty ファイルを修正します
*(Xで仮想端末を使う場合は、制限しない)

console
tty1
tty2

○ログインshellでアクセス制限

*CentOSの場合
*useraddまたはusermodコマンドの-sオプションで指定します
*(デフォルトは/bin/bash)

ログインshell コンソールログイン FTPログイン
/bin/bash Yes Yes
/sbin/nologin No Yes(パスワード要)
/bin/false No No

○libwrapによるアクセス制限の設定

*libwrapをリンクして作られているコマンドはhosts.allow、hosts.denyで制御できます
*設定したその時点で有効になります

*/etc/hosts.allow ファイルを編集します

ALL: 127.0.0.1
vsftpd: 192.168.0.
sendmail: 192.168.0.
sshd: ALL

*/etc/hosts.deny ファイルを編集します

ALL: ALL

*ライブラリの動的リンクの確認(例 sshd)

# ldd /usr/local/sbin/sshd | grep libwrap

○bash.historyに履歴を保存しない(ユーザsolaの場合)

*/home/sola/.bash_profileに変数を追加します

HISTFILESIZE=0
export HISTFILESIZE

○ログイン時に、最終ログインの記録を表示させない

*ユーザーのホームディレクトリ直下に .hushlogin ファイルを作成

$ touch ~/.hushlogin

○仮想コンソール画面をロックする

*opensshログイン画面では使わない?
*vlockパッケージを使います

[root@venus:~]# vlock
This TTY is now locked.
Use Alt-function keys to swith to other virtual consoles.
Please enter the password to unlock.
root's Password:

○/procのプロセス数とpsコマンドのプロセス数を比較する

*マシンをhackされる場合、psコマンドを改竄される場合が多い
*procファイルを改竄することは難しいので、プロセス数を比較して変化を確かめる

# ls -d /proc/* | grep [0-9] | wc -l
# ps ax | wc -l

○setuid/setgidされたバイナリファイルの検出

*setuid/setgidが設定されていると、user以外が実行してもuser/groupが実行したことになる
*setuid rootが設定されていると、一般userでもrootとして実行したのと同じになります。

# find / -perm +6000 -type f 2> /dev/null | xargs ls -al

*省略*

-rwsr-xr-x 1 root root     35864 Mar 15  2007 /bin/ping
-rwsr-xr-x 1 root root     31244 Mar 15  2007 /bin/ping6

*一般ユーザがpingする必要がないならば、setuidを無効にします

# chmod a-s /usr/bin/{ping,ping6}

○パスワードの作成

*ランダムなパスワードを作成したい場合、mkpasswdコマンドを利用できます
*expectパッケージに含まれています
*-l(エル)オプションで桁数(デフォルトは9桁)を指示できます
*覚えにくいのが難点です。

[sola@venus sola]$ mkpasswd -l 20
gf0pzbqqy@stnjq4ISxl

○ Copyright(c) 528p.com All Rights Reserved.