RPM コマンド一覧

パッケージをインストールする

# rpm -ivh <パッケージ名>

パッケージをアップグレードする

# rpm -Uvh <パッケージ名>

パッケージを削除する

# rpm -e <パッケージ名>

インストールされているrpmパッケージを表示する

$ rpm -qa <パッケージ名>

インストールされているパッケージの情報を表示する

$ rpm -qi <パッケージ名>

パッケージによりインストールされているファイル一覧を表示する

$ rpm -ql <パッケージ名>

ファイルがどのパッケージにふくまれるのかを表示する

$ rpm -qf <ファイル名>

手元のパッケージの情報を表示する

$ rpm -qip <ローカルのパッケージ名>

パッケージによりインストールされるファイル一覧を表示する

$ rpm -qlp <パッケージ名>

使用しているrpmのバージョンを表示する

# rpm --version

RPMヘルプを表示する

# rpm --help

ping コマンド一覧

導通の確認

$ ping 接続先IPアドレスまたはホスト名

pingの回数を設定する

$ ping -c 回数 接続先IPアドレスまたはホスト名

pingの間隔を設定する

$ ping -i 間隔 接続先IPアドレスまたはホスト名

pingの試験するパケット内容を設定する

$ ping -p 送信したいパケット内容 接続先IPアドレスまたはホスト名

pingの試験するパケットサイズを設定する

$ ping -s パケットサイズ 接続先IPアドレスまたはホスト名

pingの試験するTTLの数を設定する

$ ping -t TTLの数 接続先IPアドレスまたはホスト名

指定したインターフェイスからpingを実行する

$ ping -I インターフェイス 相手先のホスト名(IPアドレス)

指定したホストへの通過点(ゲートウェイ)を指定する

$ ping hop1(ゲートウェイ1) hop2(ゲートウェイ2) ... 相手先のホスト名(IPアドレス)

指定したホストへ直接接続を行う

$ ping -r 相手先のホスト名(IPアドレス)

ping実行時のタイムアウト値を指定する

$ ping -w タイムアウト値(秒) 相手先のホスト名(IPアドレス)

ping実行時のループバックを抑制する

$ ping -L 相手先のホスト名(IPアドレス)

ping実行時の開始時・終了時のメッセージのみ出力させる

$ ping -q 相手先のホスト名(IPアドレス)

ネットワークのルートを表示する

$ ping -R 対象のホスト名(IPアドレス)

vi コマンド一覧

viコマンド(起動) コマンドの詳細
vi ファイル名 編集対象のファイルを開く(複数ファイルも可)
vi +n ファイル名 n行目から表示する
vi + ファイル名 最後一画面を表示する
vi + /文字列 ファイル名 文字列が存在する行から表示する
vi -r ファイル名 壊れたファイルをリカバリする

viコマンド(カーソル移動) コマンドの詳細
h, BS 1文字左へ移動(←)
j, Ctrl + N 1行下へ移動(↓)
k, Ctrl + P 1行上へ移動(↑)
l, SPACE 1文字右に移動(→)
H 画面の最上行に移動
M 画面の中央行に移動
L 画面の最下行に移動
1G 文頭へ
G ファイルの最終行に移動
nG ファイルのn行目に移動
0 行の頭へ移動
$ 行の最後へ移動
Ctrl + F 1ページ下へ
Ctrl + B 1ページ上へ
Ctrl + D 半ページ下へ
Ctrl + U 半ページ上へ
w カーソルを1語進める
b カーソルを1語戻す
e カーソルを単語末尾へ
^ カーソルを行頭へ
Enter 次行の行頭へ

viコマンド(入力・編集) コマンドの詳細
ESC コマンドモードへ移行
a カーソルの右から入力開始
A 行末から入力開始
i カーソルの左から入力開始
I 行頭から入力開始
o 現在の行の下に1行挿入し、その行頭から入力開始
O 現在の行の上に1行挿入し、その行頭から入力開始
J 次の行と現在の行とを結合する
3J 下の2行を現在の行とを結合する
c系 対象文字列を消して文字を挿入(つまり、変更)
C カーソル位置から行末までを消して文字を挿入

viコマンド(削除) コマンドの詳細
x カーソルの1文字削除
X カーソルの左の文字を1文字削除
dd 現在の行を削除(バッファにコピーされる)
d0 行頭からカーソルの直前までの削除
ndd n行、削除
dl 1文字の削除(3文字の削除はd3l, 3dlのどちらでも可)
dw カーソル上の一語を削除
df 字 カーソル位置から指定した字までを削除
d$ カーソル位置から行の最後までを削除
d^ カーソル位置から行の行頭までを削除
:行1,行2 d 行1から行2を削除
:g/文字列/d 指定文字列のある行を全て削除

viコマンド(検索) コマンドの詳細
/<文字列> 文字列を検索する
?<文字列> 文字列を検索する(逆方向)
n 順方向へ検索する
N 逆方向へ検索する
f 文字 文字を検索(右方向へ)
F 文字 文字を検索(左方向へ)
; 次の検索
% (,[に対して対応する ),]や}を検索

viコマンド(置換) コマンドの詳細
r カーソル上の1文字を他の1文字に置換
R カーソル上の文字からEscが押されるまでの文字列を置換
s カーソルのある1文字を他の文字列で置換
S 現在の行を他の文字列で置換
cw カーソル位置からこの語の最後までを置換
c$ カーソル位置から行末まで変更
cf 字 カーソル位置から指定した字までを置換
C カーソル位置から行の最後までを置換
:&, & 直前のsコマンドの繰り返し
:%s/置換え前/置換え後 置換え前の文字列を、置換え後の文字列で置換
もっとも近くにある文字列一つに対してのみ実行
:%s/置換え前/置換え後/g ファイルの中すべての文字列に対して、置換えを行う
~(チルダ) 大文字/小文字を変更する
:1,$s/文字列A/文字列B/g 文字列Aを全て文字列Bに置換
:s/文字列A/文字列B/ 文字列Aを文字列Bに置換
(カーソルのある行で、最初に合致するパターンのみ置換)
:s/文字列A/文字列B/g カーソル行の文字列Aを全て文字列Bに置換
:s/文字列A/文字列B/c 文字列Aを文字列Bに置換
(カーソルのある行で、最初に合致するパターンのみ置換)
(置換前に確認:yで置換、nで置換なし)
:10,50s/文字列A/文字列B/g 文字列Aを文字列Bに置換
(10行目から50行目までの間で、合致するパターン全てを置換)
:10,$s/文字列A/文字列B/g 文字列Aを文字列Bに置換
(10行目から最終行までの間で、合致するパターン全てを置換)

viコマンド(カット&ペースト) コマンドの詳細
yy 現在の行をバッファにコピー
nyy n行分をバッファにコピー
yl 1文字のコピー(3文字のコピーはy3l, 3ylのどちらでも可)
yw 単語をバッファにコピー
y0 行頭からカーソルの直前までのコピー
y$ カーソルの位置から行末までのコピー
p バッファ内のテキストを挿入
(文字、単語はカーソルの右に、行は現在の行の下に挿入される)
P バッファ内のテキストを挿入
(挿入位置はpの逆。文字、単語はカーソルの左に、行は現在の行の上に挿入される)

viコマンド(ウインドウ操作) コマンドの詳細
:sp [ファイル] ウインドウを横に分割
:vs [ファイル] ウインドウを縦に分割
: q, :only カーソルのあるウインドウ以外を全部閉じる
:new 空の横ウインドウを開く
:vnew 空の縦ウインドウを開く
Ctrl-w w 次のウインドウに移動
Ctrl-w p 前のウインドウに移動
Ctrl-w o 現在のウインドウ以外を閉じる

viコマンド(Undo・Redo) コマンドの詳細
u 直前の操作を取りやめる
U 行全体の操作を取りやめる
.(ドット) 直前の変更操作の繰り返し
Ctrl-R 取り消しの取り消し

viコマンド(ファイル操作) コマンドの詳細
:w 上書き保存
:w [ファイル名] 現在のファイル(指定ファイル)に保存
:w![ファイル名] 書き込みを強行
:行1,行2 ファイル名 行1から行2のテキストをファイルに保存
:w >> ファイル名 現行ファイルの最後に書き加える
:r ファイル名 現行の行の次の行にファイルを読み込み、挿入する
:r! xxx OSのxxxコマンドを実行し、その結果を次の行に挿入。
:r 現在の行の次の行に現在のファイルを読み込み、挿入する
:args 編集ファイルの一覧を表示する
:n 複数個のファイル編集時、次のファイルを編集対象とする
:e# 一つ前の編集ファイルに戻る
:e!% 現在のファイルを再ロードして、最初から編集をやり直す
:e ファイル名 指定ファイルを編集対象とする
:rewind 現在のファイルの変更内容を保存して、リストの最初から編集をやり直す
:rewind! 現在のファイルの変更内容を保存しないで、リストの最初から編集をやり直す
:rew 最後のファイル→先頭のファイル(rewind)

viコマンド(終了) コマンドの詳細
ZZ viを終了(内容が変更されている場合は保存)
:wq ファイルに保存してvi終了
:#,# w #行目から#行目までを保存
:q viを終了(内容が変更されている場合は警告)
:wq 別ファイル名 別名で保存して終了
:q! viの強制終了(内容が変更されていても保存されない)

viコマンド(バッファ) コマンドの詳細
:ls バッファリストの表示
:b バッファ バッファを表示
:bn 次のバッファを表示
:bp 前のバッファを表示

viコマンド(UNIXコマンドの実行) コマンドの詳細
:!<コマンド> <コマンド>を実行する
:!! 直前の<コマンド>を再実行する
:sh 一時的にシェルに戻る。exitでviに戻る。

viコマンド(コマンドのフィルタリング) コマンドの詳細
!<コマンド> <コマンド>を実行して結果を挿入
!!date dateの結果の挿入
!!tr A-Z a-z カーソル行の大文字を小文字に変換

viコマンド(テキスト入力の暗記) コマンドの詳細
:ab<文字列><置換え文字列> <文字列>と入力すると<置換え文字列>に置き換えるように設定する
:unab<文字列> <文字列>の置き換え設定を解除する
:ab 一覧表示

viコマンド(その他) コマンドの詳細
Ctrl + G ファイル名、修正の有無、現在の行数などの情報が表示されます
Ctrl + L 画面を再表示
[n] Shift-g ファイル内のn行に移動(nが無ければファイル末に移動)
Shift + Q exで編集をする
vi exからviに戻る
:h 日本語マニュアルを表示
:! [外部コマンド] 外部シェルコマンドが実行

viコマンド コマンドの詳細
:set number, :set nu 行番号を表示する
:set no number, :set nonu 行番号の表示をやめる
:set showmode 現在のモードを表示する
:set showmatch ()や{}の対応の報告をするようになる
:set ignorecase 大文字/小文字の区別なく検索する
:set autoindent 自動インデントモード
:set noautoindent 自動インデントモードをやめる
:set all すべてのオプションを表示する
:set ruler ルーラー(右下に表示される行・列の番号)を表示する
:set tabstop=数値 タブの大きさを半角スペース数で指定
:set nowrap 折り返し表示しない
:set history=数値 コマンド履歴の保存数
:set backup ファイルを保存する時にバックアップファイルを作成する
:set nobackup バックアップファイルを作成しない
:syntax on off |カラー表示のオンまたはオフ
:Tutorial 30分程度のVi利用方法のチュートリアル
:vert diffsplit [ファイル] 今のファイルと、他のファイルとの差分を取るコマンド

SSHサーバー構築(OpenSSH)

SSHサーバーは、Telnet同様にクライアントからサーバーへリモート接続して、遠隔地からサーバーを操作することができるようにするためのサーバー。
ただし、Telnetが暗号化しないでそのままデータを送受信するのに対して、SSHでは通信内容を暗号化するため、通信内容を盗み見られても問題ない。
ここでは、内部からだけではなく外部からも安全にサーバーにリモート接続できるようにするため、鍵方式によるログインのみを許可することにより、クラッカーによるパスワードアタックで不正にSSHサーバーへログインされてしまわないようにする。
また、SSHサーバーへの接続方式にはSSH1とSSH2があるが、より安全なSSH2による接続のみ許可することとする。
さらに、SSHログインしたユーザーが自身のホームディレクトリ以外を参照できないようにする。

なお、SSHサーバーを外部に開放せず、内部ユーザーも信頼できる場合は、SSHサーバーの設定はデフォルトのままで、パスワード方式によるログイン方式でもよい。

(1)Telnetサーバーインストール

OpenSSHをインストールするのにSSHサーバーを削除する必要があるが、SSHサーバーを削除してしまうとWindowsからリモート接続できなくなってしまうので、代替手段として一時的にTelnetでWindowsからリモート接続できるようにする。

[root @ホスト名 ~]# yum -y install telnet-server ← Telnetサーバーインストール

[root @ホスト名 ~]# chkconfig telnet on ← Telnetサーバー有効化

[root @ホスト名 ~]# /etc/rc.d/init.d/xinetd restart ← Xinetd再起動(Telnetサーバー起動)

(2)Telnetサーバーへログイン

TeraTermでTelnetサーバーへログインする。
「ホスト」⇒サーバーIPアドレス
「サービス」⇒Telnet
「OK」ボタン押下

login: ← ユーザー名応答
Password: ← パスワード応答(表示はされない)

[一般ユーザー名 @ホスト名 ~]# ← Telnetでログインした

[一般ユーザー名 @ホスト名 ~]# su – ← rootにスイッチ
Password: ← rootパスワード応答(表示はされない)

[root @ホスト名 ~]# ← rootになった
※Telnetサーバーへはrootで直接ログインできないので、管理者用の一般ユーザーでログインしてrootにスイッチする

(3)SSHサーバーアンインストール

OpenSSHを新規にインストールするため、既にインストールされて起動しているSSHサーバーをアンインストールする。
[root @ホスト名 ~]# /etc/rc.d/init.d/sshd stop ← SSHサーバー停止

[root @ホスト名 ~]# yum -y remove openssh ← openssh関連パッケージアンインストール

(4)SSHサーバーインストール

CentOS標準のOpenSSHはバージョンが古くchroot機能が含まれていないため、本家からソースを入手してRPMパッケージを作成してインストールする。
[root @ホスト名 ~]# yum -y install pam-devel ← opensshのRPM作成に必要なパッケージをインストール

[root @ホスト名 ~]# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-5.3p1.tar.gz ← opensshダウンロード
※最新版のURLではありません。

[root @ホスト名 ~]# tar zxvf openssh-5.3p1.tar.gz ← openssh展開

[root @ホスト名 ~]# vi openssh-5.3p1/contrib/redhat/openssh.spec ← specファイル編集
%define no_x11_askpass 0

%define no_x11_askpass 1 ← x11_askpassの無効化

%define no_gnome_askpass 0

%define no_gnome_askpass 1 ← gnome_askpassの無効化

%configure ¥
    Configure –without-zlib-version-check ¥ ← 追加(zlibのバージョンチェック無効化)
    –sysconfdir=%{_sysconfdir}/ssh ¥

[root @ホスト名 ~]# rm -rf openssh-5.3p1/contrib/aix/ ← RedHat以外のディレクトリを削除

[root @ホスト名 ~]# rm -rf openssh-5.3p1/contrib/hpux/ ← RedHat以外のディレクトリを削除

[root @ホスト名 ~]# rm -rf openssh-5.3p1/contrib/caldera/ ← RedHat以外のディレクトリを削除

[root @ホスト名 ~]# rm -rf openssh-5.3p1/contrib/suse/ ← RedHat以外のディレクトリを削除

[root @ホスト名 ~]# rm -rf openssh-5.3p1/contrib/cygwin/ ← RedHat以外のディレクトリを削除

[root @ホスト名 ~]# rm -rf openssh-5.3p1/contrib/solaris/ ← RedHat以外のディレクトリを削除

[root @ホスト名 ~]# tar czvf openssh-5.3p1.tar.gz openssh-5.3p1/ ← openssh展開先ディレクトリ再圧縮

[root @ホスト名 ~]# rm -rf openssh-5.3p1 ← openssh展開先ディレクトリ削除

[root @ホスト名 ~]# rpmbuild -tb –clean openssh-5.3p1.tar.gz ← RPMパッケージ作成

※rpmbuildが「ビルド依存性の失敗」で異常終了した場合

[root @ホスト名 ~]# rpmbuild -tb –clean courier-authlib-0.60.2.tar.bz2
エラー: ビルド依存性の失敗:
openldap-devel は courier-authlib-0.60.2-1.fc8.i386 に必要とされています

rpmbuildで上記のようなエラーメッセージが出力された場合は、該当RPMを作成するのに必要なパッケージがインストールされていないことが原因なので、不足しているパッケージをyumでインストールしてからrpmbuildを再実行する。

上記例の場合はcourier-authlibのRPM作成に必要なopenldap-develがインストールされていないことを示しているので、yum -y install openldap-develでopenldap-develをインストールしてから
rpmbuildを再実行すればよい

[root @ホスト名 ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/openssh-5.3p1-1.i386.rpm ← 作成したopensshのRPMパッケージをインストール

[root @ホスト名 ~]# rmp -Uvh /usr/src/redhat/RPMS/i386/openssh-server-5.3p1-1.i386.rpm ← 作成したopenssh-serverのRPMパッケージをインストール

[root @ホスト名 ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/openssh-clients-5.3p1-1.i386.rpm ← 作成したopenssh-clientsのRPMパッケージをインストール

[root @ホスト名 ~]# rm -f /usr/src/redhat/RPMS/i386/openssh-* ← 作成したRPMを削除

[root @ホスト名 ~]# rm -f openssh-5.3p1.tar.gz ← ダウンロードしたファイルを削除

NTPサーバー構築(ntpd)

NTPサーバーを構築して、サーバーのシステム時刻を日本標準時間に合わせる。

(1)NTPサーバーインストール

[root @ホスト名 ~]# yum -y install ntp ← NTPサーバーインストール

(2)NTPサーバー設定

[root @ホスト名 ~]# vi /etc/ntp.conf ← ntp設定ファイル編集

上の画像の行の下に「restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap」と記述する。記述されていれば改めて記述する必要はない。(内部からの時刻同期を許可)

上の画像の下3行を以下のように書き換えましょう。

↓ 時刻同期先NTPサーバーを変更
server ntp.nict.jp # 日本標準時を提供しているNTPサーバー(stratum 1)
server ntp.jst.mfeed.ad.jp # 上記サーバーと直接同期しているNTPサーバー(stratum 2)
server プロバイダのNTPサーバー名 # プロバイダのNTPサーバー※

※自分が契約しているプロバイダがNTPサーバーを提供している場合はプロバイダのNTPサーバーを指定する。

(3)NTPサーバー起動

NTPサーバー起動時に大幅に時刻がずれているとNTPサーバーが起動できないので、いったん、手動で時刻を合わせる
[root @ホスト名 ~]# ntpdate ntp.nict.jp ← 手動で時刻を合わせる

[root @ホスト名 ~]# /etc/rc.d/init.d/ntpd start ← NTPサーバー起動※CentOS6,5の場合

[root @ホスト名 ~]# chkconfig ntpd on ← NTPサーバー自動起動設定※CentOS6,5の場合

(4)NTPサーバー確認

[root @ホスト名 ~]# ntpq -p ← NTPサーバーへの時刻同期状態確認

※NTPサーバー名の前が空白の場合は時刻同期中の状態

[root @ホスト名 ~]# ntpq -p ← 約10分後、再度NTPサーバーへの時刻同期状態確認

※NTPサーバー名の前に*または+が表示されれば時刻同期完了の状態

ファイアウォール構築(iptables)

Linuxサーバー上にファイアウォールを構築する。
ここでは、Linuxのパケットフィルタリング機能であるiptablesを使用して、Web等外部に公開するサービス以外のポートへのアクセスをブロックするようにする。

※通常はルーター側にもファイアウォール機能があるため、Linuxサーバー上でファイアウォールを構築後にポートを開放する場合は、ルーター側とLinuxサーバー側の2箇所でポート開放を行う必要があることに注意

(1)iptables設定

[root @ホスト名 ~]# vi iptables.sh ← ファイアウォール設定スクリプト作成

上の4枚の画像は上から順につながっていてこの4枚でviでの1つの記述です。もし記述がされていなければ記述しましょう。

(2)IPアドレスリスト更新チェック

IPアドレスリストは頻繁に更新されるので、毎日自動でIPアドレスリストの更新有無をチェックし、更新がある場合はファイアウォール設定スクリプトを再起動するようにする。

[root @ホスト名 ~]# vi /etc/cron.daily/iplist_check.sh
↑ IPアドレスリストチェックスクリプト作成

上の画像のような記述が書かれていなければ書きましょう。

[root @ホスト名 ~]# chmod +x /etc/cron.daily/iplist_check.sh
↑ IPアドレスチェックスクリプトに実行権限付加

※CRONより/root/iptables.sh not executed.という内容のメールが届いた場合の対処
なんらかの理由で、http://nami.jp/ipv4bycc/から取得した最新のIPアドレスリストと、前回取得したIPアドレスリストとの差分が100件を超えたため、iptables設定スクリプトを実行しなかったことを示す。
サーバーを長時間停止していた等、前回取得したIPアドレスリストとの差分が100件を超える理由が明確な場合には、「/etc/cron.daily/iplist_check.sh 0」と実行することにより強制的にiptables設定スクリプトを実行する。

(3)iptables起動

[root @ホスト名 ~]# sh iptables.sh ← ファイアウォール設定スクリプト実行

[root @ホスト名 ~]# chkconfig iptables on ← iptables自動起動設定※CentOS6,5の場合

アンチウイルスソフト導入(Clam AntiVirus)

Linux用のフリーのアンチウイルスソフトであるClam AntiVirusを導入する。

(1)Clam AntiVirusインストール

※もし、EPELリポジトリ導入(EPEL)がすんでいなければ先に導入を行いましょう。

[root @ホスト名 ~]# yum -y install clamd ← Clam AntiVirusインストール

(2)ウイルス定義ファイル最新化

[root @ホスト名 ~]# vi /etc/freshclam.conf ← ウイルス定義ファイル更新設定ファイル編集

「# Comment or remove the line below.」という行の下に「#Example」と記述する。もし記述があれば、行頭に#を追加してコメントアウトすること。(ウイルス定義ファイル更新機能の有効化)


上の画像の行の下に「NotifyClamd /etc/clamd.conf」と記述する。記述されていれば改めて記述する必要はない。(ウイルス定義ファイル更新をclamdに通知する)また、画像の行では行頭に#がついているが追加する行にはつける必要はない。

[root @ホスト名 ~]# freshclam ← ウイルス定義ファイル最新化

※以後のウイルス定義ファイルのアップデートは、/etc/cron.daily/freshclamにより毎日自動で行われる

(3)Clam AntiVirus設定

[root @ホスト名 ~]# vi /etc/clamd.conf ← clamd設定ファイル編集


上の画像の行の下に「#User clamav」と記述する。もし記述されていれば、行頭に#を追加(root権限で動作するようにする)

(4)Clam AntiVirus起動

[root @ホスト名 ~]# /etc/rc.d/init.d/clamd start ← clamd起動

[root @ホスト名 ~]# chkconfig clamd on ← clamd自動起動設定

(5)ウイルススキャンテスト

[root @ホスト名 ~]# clamscan –infected –remove –recursive
↑ ウイルススキャンテスト(ウイルスなしの場合)

Infected files: 0 ← ウイルスは検知されなかった

[root @ホスト名 ~]# wget http://www.eicar.org/download/eicar.com
↑ テスト用ウイルスをダウンロード

[root @ホスト名 ~]# wget http://www.eicar.org/download/eicar.com.txt
↑ テスト用ウイルスをダウンロード

[root @ホスト名 ~]# wget http://www.eicar.org/download/eicar.com.zip
↑ テスト用ウイルスをダウンロード

[root @ホスト名 ~]# wget http://www.eicar.org/download/eicarcom2.zip
↑ テスト用ウイルスをダウンロード

[root @ホスト名 ~]# clamscan –infected –remove –recursive
↑ ウイルススキャンテスト(ウイルスありの場合)

/root/eicarcom2.zip: Eicar-Test-Signature FOUND ← ウイルス検知
/root/eicarcom2.zip: Removed ← ウイルス削除
/root/eicar.com.txt: Eicar-Test-Signature FOUND ← ウイルス検知
/root/eicar.com.txt: Removed ← ウイルス削除
/root/eicar_com.zip: Eicar-Test-Signature FOUND ← ウイルス検知
/root/eicar_com.zip: Removed ← ウイルス削除
/root/eicar.com: Eicar-Test-Signature FOUND ← ウイルス検知
/root/eicar.com: Removed ← ウイルス削除

Infected files: 4 ← 4つのウイルスを検知した

(5)ウイルススキャン定期自動実行設定

[root @ホスト名 ~]# vi virusscan ← ウイルススキャン実行スクリプト作成


上の画像のような記述が書かれていなければ書きましょう。

[root @ホスト名 ~]# chmod +x virusscan
↑ ウイルススキャン実行スクリプトへ実行権限付加

[root @ホスト名 ~]# echo “/backup/backup.tar.bz2” >> clamscan.exclude
↑ 例として/backup/backup.tar.bz2をスキャン対象外にする

[root @ホスト名 ~]# echo “/proc/” >> clamscan.exclude
↑ 例として/procディレクトリをスキャン対象外にする

[root @ホスト名 ~]# echo “/sys/” >> clamscan.exclude
↑ 例として/sysディレクトリをスキャン対象外にする
※ディレクトリを除外する場合は末尾に「/」を付加すること

[root @ホスト名 ~]# mv virusscan /etc/cron.daily/
↑ ウイルススキャン実行スクリプトを毎日自動実行されるディレクトリへ移動

これで、毎日定期的に全ファイルのウイルススキャンが行われ、ウイルスを検知した場合のみroot宛にメールが送られてくるようになる。
※Clam AntiVirusインストールディレクトリにテスト用ウイルスがあるので、インストール後の全体スキャンでは必ずウイルス検知メールがくる

(6)ウイルス検知後の対応

ウイルス検知メールが送られてきた場合、内容を確認し、ウイルスであると確認できた場合、当該ファイルを退避先(ウイルス検知メール件名に記載)から削除する。
ウイルスでない(ClamAVによる誤検知)と確認できた場合、当該ファイルを退避先から復元し、次回以降、誤検知しないように当該ファイルをスキャン対象外リスト(clamscan.exclude)に追加する。

rootkit検知ツール導入(chkrootkit)

(1)chkrootkitインストール

※なぜchkrootkitをインストールするのかというと、chkrootkitというrootkit検知ツールを
 導入して、rootkitがLinuxサーバーにインストールされてしまっていないかチェックする
 ためです。

※なお、chkrootkitが検知できるのは既知のrootkitのみであり、新たなrootkitの検知はでき
 ない。また、rootkitが設置されていないにもかかわらず、chkrootkitが誤ってrootkitを検
 知したとアラームをあげる場合もあるので、chkrootkitによるrootkitの検知結果は参考程
 度としておく。

【CentOS6,5の場合、EPELリポジトリ導入(EPEL)をまずはすませましょう。】

[root @ホスト名 ~]# yum -y install chkrootkit ← chkrootkitインストール

(2)chkrootkit確認

[root @ホスト名 ~]# chkrootkit | grep INFECTED ← chkrootkit実行
上記chkrootkit実行結果として”INFECTED”という行が表示されなければ問題なし

(3)chkrootkit定期自動実行設定

[root @ホスト名 ~]# vi /etc/cron.daily/chkrootkit
↑ chkrootkit実行スクリプトを毎日自動実行されるディレクトリへ作成

[root @ホスト名 ~]# chmod 700 /etc/cron.daily/chkrootkit
↑ chkrootkit実行スクリプトへ実行権限付加

これで毎日定期的にrootkitがインストールされていないかチェックされ、インストールされていた場合はroot宛にメールが届くようになる。また、chkrootkitの実行結果は/var/log/messagesに保存される。

(4)chkrootkitで使用する安全なコマンドの確保

chkrootkitが使用するコマンド群が既に改竄されていた場合、rootkitを正常に検出できなくなるので、chkrootkitが使用するコマンド群をコピーしておき、必要な場合はそのコマンド群を使用してchkrootkitを実行する。

[root @ホスト名 ~]# mkdir chkrootkitcmd
↑ chkrootkit使用コマンド退避先ディレクトリ作成


↑ chkrootkit使用コマンドを退避先ディレクトリへコピー

[root @ホスト名 ~]# chkrootkit -p /root/chkrootkitcmd|grep INFECTED
↑退避したchkrootkit使用コマンドを使用してchkrootkit実行

[root @ホスト名 ~]# zip -r chkrootkitcmd.zip chkrootkitcmd/
↑ chkrootkit使用コマンド退避先ディレクトリ圧縮

[root @ホスト名 ~]# rm -rf chkrootkitcmd
↑ chkrootkit使用コマンド退避先ディレクトリ削除

[root @ホスト名 ~]# yum -y install sharutils
↑ mailコマンドでzipファイル添付メールを送信するのに必要なuuencodeコマンドインス
 トール

[root @ホスト名 ~]# uuencode chkrootkitcmd.zip chkrootkitcmd.zip|mail root
↑ chkrootkit使用コマンド(圧縮版)をroot宛にメール送信

[root @ホスト名 ~]# rm -f chkrootkitcmd.zip ← chkrootkit使用コマンド(圧縮版)削除

ファイル改竄検知システム導入(Tripwire)

クラッカーによるLinuxサーバーのファイルの改竄を検知するシステムTripwireを導入する。

Tripwireインストールの前にEPELリポジトリ導入(EPEL)

※なぜEPELリポジトリを導入するのかというと、CentOS標準のリポジトリでは提供されていないパッケージを、yumコマンドでインストールすることを可能にするためです。

[root @ホスト名 ~]# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest6.noarch.rpm
↑ EPELリポジトリインストール※CentOS6の場合

[root @ホスト名 ~]# yum -y install yum-plugin-versionlock
↑ バージョンロックプラグインインストール※CentOS7,6の場合

[root @ホスト名 ~]# rpm -q openvpn >> /etc/yum/pluginconf.d/versionlock.list
↑ (例) openvpnパッケージをバージョンロックする

EPELリポジトリ導入はここまで

ここからTripwireインストール

[root @ホスト名 ~]# yum -y install tripwire ← tripwireインストール

[root @ホスト名 ~]# tripwire-setup-keyfiles ← tripwire初期設定

Enter the site keyfile passphrase:
↑ 任意のサイトパスフレーズ応答(ただのパスワードの設定です)

Verify the site keyfile passphrase:
↑ 任意のサイトパスフレーズ応答(確認)(上で決めたパスワードを改めて入力する場所)

※パスワードは入力しても*など何も表示されないので注意。ちゃんと入力できています。

Enter the local keyfile passphrase: ← 任意のローカルパスフレーズ応答(ただのパスワード設定ですが、こちらはローカルパスフレーズで上で設定したものとはまた別の設定)

Verify the site keyfile passphrase: ← 任意のローカルパスフレーズ応答(確認)

Please enter your site passphrase: ← サイトパスフレーズ応答(上で設定したであろうサイトパスフレーズを入力。ローカルパスフレーズではないので注意)

Please enter your site passphrase: ← サイトパスフレーズ応答

(1)Tripwire設定

[root @ホスト名 ~]# vi /etc/tripwire/twcfg.txt ← Tripwire設定ファイル(テキスト版)作成

viエディタに遷移

LOOSEDIRECTORYCHECKING =true
↑ ファイル変更時に所属ディレクトリの変更を通知しないようにする

REPORTLEVEL =4 ← リポートレベルを変更する

※:wqでエディタを閉じないと保存されないので注意

[root @ホスト名 ~]# twadmin -m F -c /etc/tirpwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
↑ Tripwire設定ファイル(暗号署名版)作成

Please enter your site passphrase: ← サイトパスフレーズ応答

[root @ホスト名 ~]# rm -f /etc/tripwire/twcfg.txt ← Tripwire設定ファイル(テキスト版)削除

※Tripwire設定ファイル(テキスト版)を復元する場合
[root @ホスト名 ~]# twadmin -m f -c /etc/tripwire/tw.cfg > /etc/tripwire/twcfg.txt

(2)ポリシーファイル設定

Tripwireは、ポリシーファイルを元に作成したデータベースと、現在のファイル状態を比較することにより、ファイルが変更されたかどうかを検知するが、デフォルトのポリシーファイルでは存在しないファイルのチェックが有効になっていたり、逆に存在するファイルのチェックが無効になっていたりするため、存在しないファイルのチェックを無効に、存在するファイルのチェックを有効にするPerlスクリプトを作成して、ポリシーファイルを最適化する。

[root @ホスト名 ~]# vi /etc/tripwire/twpolmake.pl
↑ ポリシーファイル最適化スクリプト作成

※viエディタに遷移すると記述が何もされていないと思うので、上記の記述を追加する
※:wqでエディタを閉じないと保存されないので注意

[root @ホスト名 ~]# perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt > /etc/tripwire/twpol.txt.new
↑ ポリシーファイル最適化


↑ Tripwireデータベース自体をチェック対象外にする

[root @ホスト名 ~]# echo ! “/tmp/tripwire.log ;” >> /etc/tripwire/twpol.txt.new
↑ Tripwireログをチェック対象外にする※後述のTripwire定期自動実行スクリプトで使用

[root @ホスト名 ~]# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
↑ 最適化済ポリシーファイルを元にポリシーファイル(暗号署名版)作成

Please enter your site passphrase: ← サイトパスフレーズ応答

[root @ホスト名 ~]# rm -f /etc/tripwire/twpol.txt* ← ポリシーファイル(テキスト版)削除

※ポリシーファイル(テキスト版)を復元する場合
[root @ホスト名 ~]# twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt

(3)データベース作成

[root @ホスト名 ~]# tripwire -m i -s -c /etc/tripwire/tw.cfg ← Tripwireデータベース作成
Please enter your local passphrase: ← ローカルパスフレーズ応答

(4)Tripwire確認

[root @ホスト名 ~]# tripwire -m c -s -c /etc/tripwire/tw.cfg ← Tripwireチェック実行
Total violations found: 0 ← 変更がないと0、変更があると変更の数だけ+1されていく。

[root @ホスト名 ~]# echo test > test.txt ← 試しにテストファイルを作成する

[root @ホスト名 ~]# tripwire -m c -s -c /etc/tripwire/tw.cfg ← Tripwireチェック再実行
Total violations found: 1 ← 1件の変更を検知した 上で述べたのはこのこと

[root @ホスト名 ~]# twprint -m r –report-level 1 -c /etc/tripwire/tw.cfg -r /var/lib/tripwire/report/ホスト名-20170123-184023.twr
↑ チェック結果サマリ参照

Added: “/root/test.txt” ← /root/test.txtの追加を検知した

[root @ホスト名 ~]# rm -f test.txt ← テストファイル削除(後始末)

(5)Tripwire定期自動実行設定

[root @ホスト名 ~]# vi tripwire.sh ← Tripwire定期自動実行スクリプト作成

[root @ホスト名 ~]# chmod 700 tripwire.sh
↑ Tripwire定期自動実行スクリプトへ実行権限付加

[root @ホスト名 ~]# echo “0 3 * * * root /root/tripwire.sh” > /etc/cron.d/tripwire
↑ Tripwire定期自動実行設定追加※毎日3:00にTripwire定期実行スクリプトを実行する

(6)ポリシーファイルメンテナンス

日々のチェック結果より、あらかじめ変更がわかっているディレクトリやファイルについては検知されないようにする。

[root @ホスト名 ~]# twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt
↑ ポリシーファイル(テキスト版)作成

[root @ホスト名 ~]# echo ‘!/var/log/sa ;’ >> /etc/tripwire/twpol.txt
↑ 例としてディレクトリ/var/log/saをチェック対象外にする

[root @ホスト名 ~]# echo ‘!/etc/sysconfig/iptables ;’ >> /etc/tripwire/twpol.txt
↑ 例としてファイル/etc/sysconfig/iptablesをチェック対象外にする

[root @ホスト名 ~]# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
↑ 最適化済ポリシーファイルを元にポリシーファイル(暗号署名版)作成

Please enter your site passphrase: ← サイトパスフレーズ応答

[root @ホスト名 ~]# rm -f /etc/tripwire/twpol.txt /etc/tripwire/tw.pol.bak
↑ ポリシーファイル(テキスト版&バックアップ)削除

[root @ホスト名 ~]# rm -f /var/lib/tripwire/.twd ; tripwire -m i -s -c /etc/tripwire/tw.cfg
↑ Tripwireデータベース更新

Please enter your local passphrase: ← ローカルパスフレーズ応答

CentOS6初期設定

(1)rootでのログイン&ログアウト

ホスト名 login: root ← ログインユーザー名としてrootと入力
Password: ← rootのパスワード応答(表示はされない)

[root @ホスト名 ~]# ← rootでログインした状態

[root @ホスト名 ~]# exit ← ログアウト

ホスト名 login: ← ログアウトした状態

(2)一般ユーザーの作成&削除(例として一般ユーザー名をcentosとする)

[root @ホスト名 ~]# useradd centos ← 一般ユーザーcentosの作成

[root @ホスト名 ~]# passwd centos ← centosのパスワード設定

新しいパスワード: ← centosのパスワード応答
新しいパスワードを再入力してください: ← centosのパスワード応答(確認)

[root @ホスト名 ~]# userdel -r centos ← 一般ユーザーのcentosの削除

(3)一般ユーザーからrootになる

[centos @ホスト名 ~]$ ← centosという名前の一般ユーザーでログインしている状態

[centos @ホスト名 ~]$ su – ← suコマンドでrootになる(-を忘れずに)
パスワード: ← rootのパスワード応答

[root @ホスト名 ~]# ← rootになった

[root @ホスト名 ~]# exit ← rootから一般ユーザーに戻る

[centos @ホスト名 ~]$ ← centosに戻った

※rootは制限なくなんでも出来てしまい、誤操作により重要なファイルを
 削除してしまったりすることがあるため、基本は一般ユーザーでログインし、
 root権限が必要な操作を行う場合のみ、suコマンドでrootになるようにする。

[ユーザー名 @ホスト名 ~] su -ログインしたいユーザー名
上のようにするとログインしたいユーザーを選択してログインできる

(4)rootになれるユーザーを管理者のみにする

例として、管理者用の一般ユーザー名をcentosとする

[root @ホスト名 ~]# usermod -G wheel centos ← 管理者ユーザーをwheelグループに追加

[root @ホスト名 ~]# vi /etc/pam.d/su

viエディタに遷移

#auth required pam_wheel.so use_uid

auth required pam_wheel.so use_uid ← コメント解除(文頭の#を削除しただけ)

※:wqでviエディタを閉じないと保存されないので注意

管理者用一般ユーザーからはrootになれて、管理者以外の一般ユーザーからはrootになれないことを確認

(5)パッケージ管理システム設定

RPMパッケージのインストール・アンインストールを行うyumの初期設定を行う

[root @ホスト名 ~]# yum -y update ← インストール済パッケージの一括アップデート

[root @ホスト名 ~]# yum -y install yum-cron ← yum-cronインストール

[root @ホスト名 ~]# /etc/rc.d/init.d/yum-cron start ←パッケージ自動更新起動

[root @ホスト名 ~]# chkconfig yum-cron on ← パッケージ自動更新自動起動設定

[root @ホスト名 ~]# yum -y groupinstall “Base” “Development tools”
↑ ベースパッケージ群、開発ツールパッケージ群インストール

(6)root宛メールを転送する

システムからroot宛に重要なメールが送られてくるので、root宛メールを普段使用しているメールアドレス宛に転送するようにする

[root @ホスト名 ~]# sed -i ‘/^root:/d’ /etc/aliases ← 旧root宛メール転送設定解除

[root @ホスト名 ~]# echo “root: hoge@nifty.com” >> /etc/aliases
↑ root宛メールを普段使用しているメールアドレス(例:hoge@nifty.com)宛に転送する

[root @ホスト名 ~]# newaliases ← 転送設定反映

[root @ホスト名 ~]# echo test|mail root ← テストメールをroot宛に送信する

テストメールが転送先メールアドレス宛に届いていることを確認する

※社内メールだとうまく設定できなかったため、Gmailなどで設定を行った方がよい

(7)SELinuxの無効化

※なぜ無効化するのかというと、慣れていないとSELinuxによる強力なアクセス制限によってインストール作業や運用業務でつまづくことがあるからです。

[root @ホスト名 ~]# getenforce ← SELinux状態確認
Enforcing ← SELinux有効

[root @ホスト名 ~]# setenforce 0 ← SELinux無効化(最後は数字のぜろ)
Permissive ← SELinux無効

[root @ホスト名 ~]# vi /etc/sysconfig/selinux ← SELinux設定ファイル編集

viエディタに遷移

SELINUX=enfocing

SELINUX=disabled ← システム起動時にSELinuxを無効化

※:wqでエディタを閉じないと保存されないので注意

(8)ファイアウォール停止※必要な場合のみ

ルーターでブロックするためファイアウォールが不要な場合はファイアウォールを停止する

[root @ホスト名 ~]# /etc/rc.d/init.d/iptables stop ← ファイアウォール停止

[root @ホスト名 ~]# chkconfig iptables off ← ファイアウォール自動起動解除

(9)nkfコマンドインストール

日本語処理に必要なnkfコマンドをインストールする

[root @ホスト名 ~]# yum -y install nkf ← nkfインストール

(10)システムの停止または再起動

[root @ホスト名 ~]# halt ← システム停止する場合

[root @ホスト名 ~]# reboot ← システム再起動する場合