カテゴリー
Linux

CentOS6の練習-#12(ClamAVの話,続き-#3)。

 前稿からずいぶん時間が経ってしまった。あと何に取り組もうと考えていたかというと,「avc: deniedをもとに,
clamdについてSELinuxのポリシーを新しく作る」である。記事を書いて読み直してみたら,「ClamAVの話」というより,SELinuxの話になってるなあ。

 ところで正直なところ,Access Vector Cache (AVC)そのものが,いまだによくわかっていない状態である。

 そもそも,SELinuxには,Access Vectorルール(P.157参照)というのがあって,これはあるプロセスが(今の場合 clamd),ある作業をすることについてのルールであるらしい。で,これを素早く利用するためにキャッシュが作られるのだが,これがAVC。avc: denied(Clam-Per-rt参照)というのが,audit.logに出るということは,必要な作業についての特権が,当該プロセスに許されていないということになる。「Clam-Per-rt」を見ると,avc: deniedが11行出ていて,scontext(Source Context)は11行とも
   scontext=unconfined_u:system_r:clamd_t:s0
である。これは,アクセス元の pid=1362 clamd のセキュリティ・コンテキストなわけだから,11個とも同じなのは当然だ。で,:で区切られた4つの部分を左から順に user:role:type[:level] と呼ぶらしい(Security Context (P.20) 参照)。プロセス clamd は clamd_t ドメインで動いているというわけだ。 Clam-Per-rt は, Permissive かつ User root で clamdscan を /home/centos で走らせたときのログなんだが,このとき user は unconfined_u ,role は system_r となっている。

 一方,プロセス clamd のスナップショットを表示してみると,以下のようになる。ここでは,user が system_u になる。OSを起動したときにデフォで動き出すプロセスのほとんどが,system_u:system_rになっているみたい。この辺もまだよくわからない。グダグダだね。
   $ ps -AZ | grep clamd
   system_u:system_r:clamd_t:s0 xxxx ? 00:00:00 clamd

 さらに,グダグダになるが,忘れないために書いておくと,ps -A(ps -eでも同じ)にくっついている Z は,SELinuxのオプションで,これをつけると大抵のものについて,セキュリティ・コンテキストを表示してくれる。例えば,今の段階で,/home/centos に aaa.txt を作っておいて
   $ ls -Z     とやると,
   -rw-r–r–. centos users unconfined_u:object_r:user_home_t:s0 aaa.txt
というように,aaa.txt のセキュリティ・コンテキストが表示される。

 さて,よくわからないなりに,モジュール・パッケージを作ってみることにする。audit2allow を使うらしいが,
   $ sudo yum provides */audit2allow
で調べてみると,含まれている policycoreutils-python-2.0.83-19.24.el6.i686 が未インストールなので,まずはこれをインストール。
   $ sudo yum install policycoreutils-python

 でね,audit2allow マンを見て, -M オプションを付けて,
   $ sudo cat /var/log/audit/audit.log | audit2allow -M myClamAV
とやってみた。

   ******************** IMPORTANT ***********************
   To make this policy package active, execute:

   semodule -i myClamAV.pp
というメッセージが戻って来て,/home/centos には,myClamAV.pp と myClamAV.te が出来た。
   xxx.pp <<— Policy packages つまり,新ポリシーをロードするためのモジュールパッケージ。
   xxx.te <<— Private policy files in the Reference Policy xxx.ppに何が定義されているかを教えてくれる。

 さあこれで,semodule -i myClamAV.pp をやれば,新しいポリシーが有効になる。とはいうものの,セキュリティ関係の話だから,実態も把握せずに新ポリシーを有効にするのは論外。というわけで,早速,myClamAV.teを覗いてみた。これ見てもらったらわかるけど,とんでもないことになっていた。前稿までにいろいろやったことがすべて audit.log に残ったままだったわけだ。これじゃあんまりだというわけで, myClamAV.pp は削除し, myClamAV.te と Clam-Per-rt を参考にしながら,新しい myClamAV.te を作ってみた。

 Clam-Per-rt をみると, type: xxxx_t で使われているのは,次の4つ。これを module myClamAV 1.0; の後に require として記述。
   clamd_t
   home_root_t
   user_home_dir_t
   user_home_t

 次に,myClamAV.te に class xxxx という行があるが,Clam-Per-rt で使われているclassという単語は,tclass(target class)だけで,tclass=dir と tclass=file の2つ。tclass=dir 関連の denied は, search getattr read open ,また,tclass=file 関連の denied は, read open だから,以下の2行を require に追加し,これを閉じる。
   class dir { search getattr read open };
   class file { read open };

 最後に, clamd_t に allow を許可することを列記する。
   allow clamd_t home_root_t:dir search;
   allow clamd_t user_home_dir_t:dir { getattr read open search };
   allow clamd_t user_home_t:dir { getattr read open search };
   allow clamd_t user_home_t:file { read open };

 出来上がったのが,新myClamAV.te。なんというか,これ,上出来だった。あとで, audit.log を真っ新にして,audit2allow に作らせてみたのと順番が多少違うだけで,同じだったヨ。

 編集した myClamAV.te をチェック。checkmodule マン参照。
   $ checkmodule -M -m myClamAV.te -o myClamAV.mod

 これが,エラーなしで通るまでやる。基本的にやっていることは間違っていなかったが,綴りミスとかセミコロン忘れとか,2回ばかりエラーが出た(恥)。通ると myClamAV.mod ができる。次は, myClamAV.pp を生成。semodule_package マン参照。
   $ semodule_package -o myClamAV.pp -m myClamAV.mod

 できたモジュールをインストールした。
   $ sudo semodule -i myClamAV.pp

 ちゃんとインストールされたかどうか,確認。
   $ sudo semodule -l|grep myClamAV
   myClamAV 1.0   が戻ってきた。インストール完了。

 で,何が出来るようになったかというと,以下の環境において,ユーザのホームディレクトリ(例えば,/home/centos)で clamdscan がエラーなく走るようになった。
   $ getenforce
   Enforcing
   $ grep User /etc/clamd.conf
   User root
=======================================================
   $ clamdscan
   /home/centos: OK

   ———– SCAN SUMMARY ———–
   Infected files: 0
   Time: 0.001 sec (0 m 0 s)
==============================================こんな感じ

 あくまで,ユーザのホームディレクトリという制限つきだから, /root だと,以下のように見慣れたエラーが戻ってくる。
=======================================================
   # clamdscan
   /root: lstat() failed: Permmision denied. ERROR

   ———– SCAN SUMMARY ———–
   Infected files: 0
   Tlotal errors: 1
   Time: 0.000 sec (0 m 0 s)
=======================================================

 さて,Enforcing,User root で clamdscan を走らせることができた。あとは,User clamav でということなのだが,これはまだまだ前途多難なようなので,後回しにして他のことに取り組もうと思う。

 ところで, clamscan を自動で走らせるときに,そのオプションを下記のようにしようかなと思っている。
   clamdscan /
   –infected
   –recursive
   –move=/var/log/clamav/virus
   –log=/var/log/clamav/clamav_`date +%Y-%m-%d`.log
   –exclude-dir=^/sys
   –exclude-dir=^/proc
   –exclude-dir=^/dev
   –exclude-dir=^/var/log/clamav/virus
で,参考に読んだところでは clamdscan のオプションは clamscan に準じると書いてあったが,上のを clamdscan で使うと,
   WARNING: Ignoring unsupported option –recursive (-r)
   WARNING: Ignoring unsupported option –exclude-dir
   WARNING: Ignoring unsupported option –exclude-dir
   WARNING: Ignoring unsupported option –exclude-dir
   WARNING: Ignoring unsupported option –exclude-dir
が戻ってくる。ということは,同じ使い方はできないということになりそうだ。clamscan と clamdscan の違いを考えると,ダウンロードディレクトリをスキャンするのに使うのが現実的かな。

 ああそうだ,忘れないうちに, myClamAV をアンインストールしておこう。
   $ sudo semodule -r myClamAV.pp

カテゴリー
Linux

CentOS6の練習-#11(ClamAVの話,続き-#2)。

 今年も,中秋の名月(9月30日)は見えませんでした。台風17号の余波か厚い雲に隠れていまして。明夜(10月1日)は晴れそうなので,今年も十六夜の月見をしようかなと思っているところです。七夕は,昔の暦通りに行なえば,結構2人の逢瀬を叶えてやれそうな風習ですが,八月十五夜は厳しいですね。なかなか,晴れ上がってくれません。もっとも,晴れると本当に素晴らしい月夜になりますが……

 さて,本題の中間報告です。

 CentOS6の練習-#8を書く前の時点で,実は手を焼いていたことがあった。その件について「clamdscan,User rootでもPermission deniedが出る。」という表題で,「はじめての自宅サーバ構築」さんのところに質問を書いたが,どなたからも,お返事がなかった。しばらく思案投げ首ののち,SELinuxが足を引っ張っているという可能性に思い至り,
   $ sudo setenforce 0
をやって,Permissive かつ User root でclamdscanを走らせてみた。走らせる前に
   $ sudo /etc/rc.d/init.d/clamd restart
もやった。ところがこれでも,lstat() failed: Permission denied. ERROR がでる。いい加減お手上げで,あきらめて,Apacheのrpmのビルドに走った。しかし,サーバを走らせるとなれば,ClamAVを避けては通れない。それに,clamscanだけでなくclamdscanも使ってみたい。しかし,ググってみても,Permissive かつ User root でもエラーが出るなどという情報はどうしても探し出せなかった。もう少し分かっているシステムならいざ知らず,これだけ分からないことばかりでは,自力解決を望む方が無理である。

 さて,どうするか。

 ビルド環境もやっとできたところなのに癪だが,CentOS6.3 Mimimalを再インストールしてみる道を選んだ。何故って,Windowsだって,95を初めて自分用に手に入れたとき,どんだけソフト的に壊して,リカバリを繰り返したもんか。それを思い出して,今回も同じじゃないかと思ったわけ。

 で,結果,これがよかった。といっても,この時点でクリアできたのは,「Permissive かつ User root で clamdscan を走らせること」だけだ。

 当面の目標は,「Enforcing かつ User clamav で clamdscan を走らせること」なのだが……。[セキュアOS SELinux入門]第6回 最も簡単な設定方法を見つけたので,/var/log/messages を覗いてみたが,ここには,記事に記述されているようなメッセージが全く出ていない。記事の日付が2004/07/13と古いので,これからいろいろ変わっている可能性がある。ググって他のところも読んでみたのだが,この時点では,うまいページが見つからない。自分がよくわからないまま探しているときはよくある話だ。わかるようになると,「なんであのときは見つからなかったの?」というくらい適切なページが見つかるようになるのだが。

 しばらくあちこちウロウロしていたが,腹をくくって,SELinux Project に行き,NewUsersのところを見ていたら,The SELinux Notebook – The Foundations (3rd Edition)というのがあるようなので,これを落としてきた。これ,なんと日付が9月2日になっていて,出たばかりみたいだ。14ページに表があって,そこに書いていることを調べてみたら,CentOS6.3では,Old Locationと書かれている方の場所に関係ファイルがある。そこで,The SELinux Notebook – The Foundations(2nd Edition)も落としてきた。落としてからこっち,大分読み齧ってみたんだが,何しろ知らないことばかりを書いてあるものだから,よくわからない。しかし,/var/log/audit/audit.log にまでは,たどり着いた。audit(監査)デーモンがロードされたのちは,こちらにログが吐き出されるらしい。起動直後でも,$ chkconfig –list|grep auditd をやって確認してみるとonになっているから,/var/log/messagesに何もなかったわけだ。

 そこで,(1) Enforcing+User clamav,(2) Permissive+User clamav,(3) Enforcing+User root,(4) Permissive+User root の場合について,audit.log を調べてみた。/home/centos で $ clamdscan をやった場合,(1)~(3)においては, lstat() failed: Permission denied. ERROR が出る。(4)の場合のみ,OKになる。ただし,avc: denied が出ているので,Permissiveモードだから通っているだけだと分かる。これについて,新しくポリシーを作ってやればいいらしい。

 この辺はまだよく理解できていないので,中間報告としては,ここまでにしておこうと思う(汗)。

カテゴリー
Linux

CentOS6の練習-#10(Apacheのrpmを作る)。

 httpd-2.4.3.tar.bz2をダウンロードして,展開して中を見てみたら,httpd.specがあった。しかも,Using Apache With RPM Based Systems (Redhat / CentOS / Fedora)というページもある。となれば,やはりrpmを作ってみるのが,CentOSを使い,ディストリのパッケージを使わないものの態度としては,正しい行ないだろう。ということで,Apache2.4.3のrpm作りに挑戦!! (爆)

 長いです。いざ,覚悟!!!

 それに取り掛かる前に,「鍵を信用する作業」や「鍵の信用を取り消す作業」の練習も含めて,この間やったシグネチャの確認をApacheでやってみる。

  1. ソースをダウンロードする。
       $ wget http://ftp.tsukuba.wide.ad.jp/software/apache/httpd/httpd-2.4.3.tar.bz2
    シグネチャをダウンロードする。
       $ wget http://www.apache.org/dist/httpd/httpd-2.4.3.tar.bz2.asc
  2. 以下のコマンドで,シグネチャの確認。正しい署名と確認された。
       $ gpg –verify httpd-2.4.3.tar.bz2.asc
  3. 現在よからぬ話は聞いていないので,一応,www.apache.orgの鍵を信用する作業をやってみる。
       $ gpg –edit-key RSA鍵ID
         ————————————————————————————————————————
         コマンド> trust  <<— trustを入力
         あなたの決定は? 5  <<— 一応5にしておく
         本当にこの鍵を絶対的に信用しますか? (y/N) y  <<— 一応yにしておく
         コマンド> q  <<— qを打って,gpg –edit-keyを抜ける。
         ————————————————————————————————————————
  4. もう一度,シグネチャの確認をしてみる。先ほどのメッセージの最後の3行は表示されなくなった。
       $ gpg –verify httpd-2.4.3.tar.bz2.asc
  5. 公開鍵の信用を取り消してみる。
       $ gpg –delete-key RSA鍵ID
    更にも一度,シグネチャの確認をしてみると,メッセージは元に戻っている。

    まっ,こんなとこだね。これで,備忘録の役目は果たせるから,今後,この件は書かない。

 さて,rpmを作るにはrpm-buildがいるので,何はともあれ,これをインストールする。
   $ sudo yum install rpm-build

 では,Apacheのrpmのビルドに入る。

  1.    $ rpmbuild -tb httpd-2.4.3.tar.bz2
    をやったら,早速以下のメッセージが出た。「-devel」パッケージについては,ビルドのときだけしかいらないから,あとはアンインストールしていいと,上記のApache.orgのページに書いてあるのだが,結構な数に上るなあ。サーバ機と開発機は分けておくべきなんだろうか。今のところは,練習なので問題ないがその辺,セキュリティ面ではどうなのだろう。

    エラー: ビルド依存性の失敗:
         autoconf は httpd-2.4.3-1.i386 に必要とされています
         zlib-devel は httpd-2.4.3-1.i386 に必要とされています
         libselinux-devel は httpd-2.4.3-1.i386 に必要とされています
         apr-devel >= 1.4.0 は httpd-2.4.3-1.i386 に必要とされています
         apr-util-devel >= 1.4.0 は httpd-2.4.3-1.i386 に必要とされています
         pcre-devel >= 5.0 は httpd-2.4.3-1.i386 に必要とされています
         openldap-devel は httpd-2.4.3-1.i386 に必要とされています
         lua-devel は httpd-2.4.3-1.i386 に必要とされています
         libxml2-devel は httpd-2.4.3-1.i386 に必要とされています
         distcache-devel は httpd-2.4.3-1.i386 に必要とされています
         openssl-devel は httpd-2.4.3-1.i386 に必要とされています

    地道に,インストール。
       $ sudo yum install autoconf
       $ sudo yum install zlib-devel
       $ sudo yum install libselinux-devel
    ここで,問題発生。
       $ sudo yum install apr-devel
    ディストリのパッケージが1.3.9-5になっている。BuildRequiresでは,上記の通り1.4.0以上だからまずい。

  2. Apacheから,tarballを落としてくる。シグネチャもちゃんと確認すること。
       $ wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/apr/apr-1.4.6.tar.gz
  3. 落としてきたのはgz方式だが,rpmbuildではアーカイブとして扱ってくれないようなので,一度展開し,
       $ tar zxvf apr-1.4.6.tar.gz
    bzip2形式に圧縮し直す。
       $ tar cf – apr-1.4.6/ | bzip2 -c > apr-1.4.6.tar.bz2
  4.    $ rpmbuild -tb apr-1.4.6.tar.bz2

    エラー: ビルド依存性の失敗:
         libtool は apr-1.4.6-1.i386 に必要とされています
         doxygen は apr-1.4.6-1.i386 に必要とされています

    なんだってさ。「どこまで続く泥濘ぞ」ダネ。
       $ sudo yum install libtool
       $ sudo yum install doxygen

  5. 改めて,
       $ rpmbuild -tb apr-1.4.6.tar.bz2
    今度は通った。表示されたメッセージにより調べてみると,/home/centos/rpmbuild/RPMS/i386/に
         apr-1.4.6-1.i386.rpm apr-devel-1.4.6-1.i386.rpm
    ができている。cd コマンドでrpmのできたところに移動。
       $ cd /home/centos/rpmbuild/RPMS/i386/
    これをインストールする。
       $ sudo rpm -Uvh apr-1.4.6-1.i386.rpm apr-devel-1.4.6-1.i386.rpm
    終了後, cd でホームディレクトリに戻っておく。

    apr-develのインストにaprが必要だから,両方ともインストールしないとだめ。それにしても,Minimalインストールで,何も入っていないせいだろうけど,開発環境を整えるのが大変だ。devel用のコレクションか何かを入れたほうが早いかもしれないが,いらないものは入れないスタンスだから,ちょっと我慢してやらないとね。

  6. 同様に,
       $ wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.4.1.tar.gz
       $ tar zxvf apr-util-1.4.1.tar.gz
       $ tar cf – apr-util-1.4.1/ | bzip2 -c > apr-util-1.4.1.tar.bz2
  7.    $ rpmbuild -tb apr-util-1.4.1.tar.bz2

    エラー: ビルド依存性の失敗:
         expat-devel は apr-util-1.4.1-1.i386 に必要とされています
         libuuid-devel は apr-util-1.4.1-1.i386 に必要とされています
         db4-devel は apr-util-1.4.1-1.i386 に必要とされています
         postgresql-devel は apr-util-1.4.1-1.i386 に必要とされています
         mysql-devel は apr-util-1.4.1-1.i386 に必要とされています
         sqlite-devel >= 3.0.0 は apr-util-1.4.1-1.i386 に必要とされています
         freetds-devel は apr-util-1.4.1-1.i386 に必要とされています
         unixODBC-devel は apr-util-1.4.1-1.i386 に必要とされています
         openldap-devel は apr-util-1.4.1-1.i386 に必要とされています
         openssl-devel は apr-util-1.4.1-1.i386 に必要とされています
         nss-devel は apr-util-1.4.1-1.i386 に必要とされています

    これまたすごい数だ。真面目な話,postgresql-develやsqlite-develなんかは,全然使わないと思うんだが,この辺も分かってきたら,SPECを弄れるようになりたいな。

  8. また,地道にインストール。
       $ sudo yum install expat-devel
       $ sudo yum install libuuid-devel
       $ sudo yum install db4-devel
       $ sudo yum install postgresql-devel
       $ sudo yum install mysql-devel  依存関係で,openssl-develもここで,インストールされる。
       $ sudo yum install sqlite-devel
       $ sudo yum install freetds-devel
       $ sudo yum install unixODBC-devel
       $ sudo yum install openldap-devel
       $ sudo yum install nss-devel
  9. 改めて,
       $ rpmbuild -tb apr-util-1.4.1.tar.bz2
  10. cd コマンドで,
    /home/centos/rpmbuild/RPMS/i386/ に移動して,
       $ sudo rpm -Uvh apr-util*
    終了後, cd でホームディレクトリに戻っておく。
  11. Apacheの依存パッケージの続きのインストール。
       $ sudo yum install pcre-devel
       $ sudo yum install lua-devel
       $ sudo yum install libxml2-devel
    openssl-develはさっき入れたから,あとはdistcacheだけ。

  12. ところが,これがCentOS6.3のパッケージになかった。tarballを見に行ったが,展開してみても,SPECが入っていなくて手におえない。結局,Fedora17のsrc.rpmを拾ってきた。URLの枝番は18になってるね。なんでだろう。
       $ wget ftp://ftp.riken.jp/Linux/fedora/development/18/source/SRPMS/d/distcache-1.4.5-23.src.rpm
    これをリビルド。
       $ rpmbuild –rebuild distcache-1.4.5-23.src.rpm
       $ cd /home/centos/rpmbuild/RPMS/i386/
       $ sudo rpm -Uvh distcache*
    ホーム・ディレクトリに戻る。
  13.    $ rpmbuild -tb httpd-2.4.3.tar.bz2
    やっと,Apache2.4.3のrpmができたのでインストール。
       $ cd /home/centos/rpmbuild/RPMS/i386/
       $ sudo rpm -U httpd-2.4.3-1.i386.rpm

    やれやれと思ったら,
         /etc/mime.types は httpd-2.4.3-1.i386 に必要とされています
    が出たので,
       $ sudo yum provides /etc/mime.types
    と調べてみると,どうやらmailcapというパッケージを入れればいいらしい。
       $ sudo yum install mailcap
    改めて,
       $ sudo rpm -U httpd-2.4.3-1.i386.rpm

 httpd-2.4.3-1のインストール完了。一応,「It works!」表示までいかないと終わられません(爆)。

  1. Apacheのテストのために,80番ポートを開ける。
       $ sudo /sbin/iptables -I INPUT 5 -p tcp –dport http -j ACCEPT #HTTP
       $ sudo /sbin/iptables -L –line-number   変更の確認
       $ sudo /sbin/service iptables save
  2. BINDを入れていないので,名前解決のために,/etc/hostsにローカルのサーバ名と,IPアドレスを追加。
  3.    $ sudo vi /etc/httpd/conf/httpd.conf
    のServerNameをローカルなものに書き換え。
       $ sudo service httpd restart
    実は,ここで少しはまった。restartをrootでやらないとSocketエラーが出る。
  4. 自鯖Lan内のWin端末のブラウザから,ローカルのサーバ名で,アクセス。
    「It works!」が無事表示された。

 本日は,ここまで。

カテゴリー
Linux

CentOS6の練習-#9(ビルド環境を整える)。

 明日は,旧7月1日らしい。朝夕はすっかり秋めいてきたが,昼は相変わらず暑い。それでも,盆休みが終わって,昨日1週間ぶりで道々の田んぼを見たら,稲穂が出そろっていた。今日はツクツクボウシの鳴くのも聞いた。そして今は,これから夕立が来るのか,PCに触っているのが気持ち悪いほど,雷鳴がしている。

 夕べはギータの劇的なサヨナラホームランで勝った。球宴後,さあダッシュと思ったら,がっくりくる試合が続いて落ち込んでいたのだが,8月に入ってから,まあまあだ。何とか,5割復帰したし。上も抜け出せないでいるから,ここが踏ん張りどころだよー。鷹のみなさま,頑張ってちょうだい。

 ところで本題の方だが,いつも,buildとmakeはどう違うんだろうと思っていた。今回ちょっと気を入れてあちこち読み漁ってみたら,用語の発生した時期が違うだけで意味はあまり違わないらしいネ。少し,違う意味で使っているページもあるようだが,作業的にはだいたい同じことをやっているようだ。

 CentOS6の練習-#6で書いたように,すべてパッケージで済ませるかどうか悩んでいるが,それにしてもこの際buildの勉強は身を入れてやっておくべきだろう。今まで,実践でビルドにかかわったことはあっても,何やっているかなんて,あまりまじめに考えたことがない。コンパイルはやってるんだろうとか思ってたけど,リンクなんかの作業も入るんだねー。知らなかった。

 まっ,ありがちな「Hello, World!」の表示プログラムのbuildでもやってみるかな。今回の参照ページは,仕事で使える魔法のLAMPだけ。

  1. まずは,GCC(GNU Compiler Collection)のインストール。こういうところはパッケージを利用する(爆)。
       $ sudo yum install gcc gcc-c++
  2.    $ vi hello.c
    で,/home/centosに,以下の内容で,hello.cを作成する。
         #include <stdio.h>
         main()
         {
          printf(“Hello, World!n”);
         }
  3.    $ gcc hello.c -o hello
    で,コンパイルしてみる。-oオプションで実行ファイル名をhelloに指定。一瞬で終わるよ。
  4.    $ ./hello
    と実行してみると,
         Hello, World!
    と,表示された。

 ふーん,シェアードライブラリ(=.so⇒シェアードオブジェクト)っていうのは,Winのダイナミックリンクライブラリ(.dll)と同じなんだ。以下のコマンドで,いつもお世話になっているbashがリンクしている.soを調べてみた。
   $ ldd /bin/bash
     linux-gate.so.1 => (0x003da000)
     libtinfo.so.5 => /lib/libtinfo.so.5 (0x00e49000)  <<—  helloと違う.so
     libdl.so.2 => /lib/libdl.so.2 (0x004dc000)  <<—  helloと違う.so
     libc.so.6 => /lib/libc.so.6 (0x00110000)
     /lib/ld-linux.so.2 (0x00b31000)

 ついでに, $ ldd hello をやって比べてみた。
     linux-gate.so.1 => (0x00d44000)
     libc.so.6 => /lib/libc.so.6 (0x00110000)
     /lib/ld-linux.so.2 (0x00634000)
となるので,この3つは簡単なプログラムでも,C言語で書かれたプログラムが動くためには,絶対にいるようだネ。

 次に,hello.cを2つの分けて,一つずつコンパイルした後,リンカを使って一つのファイルに仕上げる作業をやってみる。

  1. $ vi main.c  で,以下の内容のmain.cを作成する。
         main()
         {
          hello();
         }
  2. $ vi hello.c で,以下の内容のhello.cを作成する。この際,ひらがなの表示を試してみることにした。
         #include <stdio.h>
         hello()
         {
          printf(“こんにちは,みなさん!n”);
         }
  3. まず,main.cだけコンパイル。  $ gcc -c main.c
    lsで調べると分かるけど,この段階で  main.o  ができている。
  4. 次に,hello.cをコンパイル。  $ gcc -c hello.c
    これも調べると  hello.o  ができている。
    -cオプションのときは,「name」.c ⇒ 「name」.oというように.oのファイル名を決めるようだ。
  5. リンク作業。素のリンカldは使わずに,gccから呼び出す形で使う方が普通だそうだ。
       $ gcc main.o hello.o -o hello
    調べてみると,実行ファイルhelloができているので,
       $ ./hello
    と実行してみると,
         こんにちは,みなさん!
    と,表示された。ちゃんと,ひらがなも表示される。日本語フォントを特別に手動で入れる必要はないようだ。

 この時点で,/home/centosには
   hello hello.c hello.o main.c main.o
があるが,あとの都合上生成された hello,hello.o,main.o を削除する。
   $ rm hello main.o hello.o

 さて,makeをインストールしますか。
   $ sudo yum install make

 Makefile作成。  $ vi Makefile  で,内容は次の1行。
     hello: main.o hello.o
     ターゲット: 依存ファイル1 依存ファイル2 ……
となるらしいが,今回は,main.o と hello.o から hello を作るだけなので,この1行でO.K.
 makeを走らせてみる。
   $ make
   cc -c -o hello.o hello.c
   cc -c -o main.o main.c
   cc hello.o main.o -o hello
とメッセージが出て,終了すると,/home/centosに hello,hello.o,main.o ができている。

   $ touch hello.c
をやったのち,makeをやると,
   cc -c -o hello.o hello.c
   cc hello.o main.o -o hello
さっきよりメッセージが1行少ない。touchでタイムスタンプの変わったhello.cだけがコンパイルし直されて,新しいhelloが作られることが分かる。

 本日の最後の練習は,GNU Helloを使った実行ファイルの作成。

  1. まず,ダウンロードのために wget をインストール。もっとも,自鯖の場合,この間のClamAVがらみでwgetは導入済み(汗)。
       $ sudo yum install wget
  2. 最新のGNU Helloをゲット。
       $ wget http://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz
  3. 同じバージョンのシグネチャファイルもダウンロード。
       $ wget http://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz.sig
  4. GnuPG(調べてみたら,gnupg2-2.0.14-4.el6.i686が,すでにインストール済みだった。)を使って,ファイルの正当性を確認する。
       $ gpg –list-keys    <<—  初回起動で,/home/centos/.gnupg が作成される。
       $ vi ~/.gnupg/gpg.conf
    で,中ごろにある keyserver-options auto-key-retrieve 行をアンコメントする。
  5. 以下のコマンドで,シグネチャの確認。
       $ gpg –verify hello-2.8.tar.gz.sig
     これ,何もしないでやったら日本語のメッセージが戻ってきたが,変な日本語。もちっとどうにかならんの。
         ————————————————————————————————————————
         gpg: 2012年04月21日 02時55分39秒 JSTにDSA鍵ID 80EE4A00で施された署名
         gpg: 鍵80EE4A00をhkpからサーバーkeys.gnupg.netに要求
         gpg: 鍵80EE4A00: 公開鍵“Reuben Thomas <rrt@sc3d.org>”を読み込みました
         gpg: 絶対的に信用する鍵が見つかりません
         gpg: 処理数の合計: 1
         gpg: 読込み: 1
         gpg: “Reuben Thomas <rrt@sc3d.org>”からの正しい署名  <<— こういう行があれば,O.K.というか,うーむ。
         gpg: 警告: この鍵は信用できる署名で証明されていません!
         gpg: この署名が所有者のものかどうかの検証手段がありません。
         主鍵の指紋: 9297 8852 A62F A5E2 85B2 A174 6808 9F73 80EE 4A00
         ————————————————————————————————————————
  6. パッケージを展開し,展開されてできたディレクトリに移動する。その後,ls -pで直下のファイルとディレクトリを確認する。
       $ tar zxvf hello-2.8.tar.gz
       $ cd hello-2.8
       $ ls -p
         ————————————————————————————————————————
         ABOUT-NLS GNUmakefile README build-aux/ doc/ po/
         AUTHORS INSTALL README-release config.in lib/ src/
         COPYING Makefile.am THANKS configure m4/ tests/
         ChangeLog Makefile.in TODO configure.ac maint.mk
         ChangeLog.O NEWS aclocal.m4 contrib/ man/
         ————————————————————————————————————————
    /の付いてるやつはディレクトリね。READMEとかTODOとかINSTALLあたりは読むけど,あとはドキュメント関係でもあんまり読んだことがない(汗)。あっ,たまにChangeLogも読む。
  7.    $ less INSTALL
     「Briefly, the shell commands `./configure; make; make install’ should configure, build, and install this package.」ということなので,素直に,
       $ ./configure –prefix=/opt/hello-2.8    <<—  インストール先を/opt/hello-2.8にしてやってみた。
     無事通ったので,もう1回, $ ls -p をやってみると,いろいろ変化があるが,大きなところで Makefile ができたのが分かる。とすると,ちゃんとmakeできるはずなので,
       $ make

       $ ./configure | grep ‘checking’ | wc -l
    で何をチェックしているのか項目数を調べてみた。参照ページでは,202と書いてあるが,うちのでは250あった。どんどん増えていくんだろうなあ。

     makeが終わったので,インストールしてみた。
       $ sudo make install

       $ ls -p /opt/hello-2.8  で確認してみると,確かに bin/ share/ ができている。
       $ ls -p /opt/hello-2.8/bin で見ると,中に実行ファイル hello があった。
       $ /opt/hello-2.8/bin/hello  と実行してみた。
         世界よ、こんにちは!
    と表示された。完了!!!

 本日は,ここまで。

カテゴリー
Linux

CentOS6の練習-#8(ClamAVの話,続き)。

投稿アップデート情報  追記(9/8)  追記2(10/1)

 前項で

そういえば,指定のリポジトリを書き直した方がいいということをよくネット上で見るが,Minimalインストールでも,CentOS6.3には初めからyum-plugin-fastestmirrorとyum-prestoが入ってる。これがあれば,ミラーリストをざっとなめてからやってくれてるみたいだが,それでも指定のリポジトリを書き直したがいいんだろうか。

と書いたのだが,ClamAVをwgetでインストールしたときに分かったことがある。
 常識なんだろうが,yumでインストールすると,依存関係をyumの方でちゃんとやってくれる。なので,
   $ sudo yum install clamd
とやると,clamav,clamd,clamav-dbが,すべてインストールされるが,wgetでダウンロードして,rpmでインストールするとそうはいかないから,順番とかライブラリに気を付けなければいけないことになる。どのサイトにも「yumは依存関係の処理もやってくれる」と書いているし,clamav直前のlm_sensorsのインストールでは,自分でも依存関係でいろいろ入ることに驚いているのに,これらのことをしっかり認識していなかったりするのだ(汗)。ただし,rpmを手動でインストールしても,yumは関知してるようで,
   $ sudo yum list installed|grep clam*
   clamav.i686 0.97.5-2.el6.rf installed
   clamav-db.i686 0.97.5-2.el6.rf installed
   clamd.i686 0.97.5-2.el6.rf installed
とちゃんとリストに表示される。

 ということになると,やはりclamavを含むリポジトリの導入をやっておいた方がいいわけで,ここ(魚拓です)を参考にそれをちょっとやってみた。大概のところは,clamavの導入時にリポジトリを追加し,あとでこれを外すみたいに書いてあって,「めんどくさいな。それならwgetでその都度やっても,同じジャン」とか思っていたのだが,参考ページではyum-prioritiesプラグインをインストールすることになっている。これ,いいな。
   $ sudo yum install yum-plugin-priorities
 CentOs6のCentOS-Base.repoを弄る。[priority=1]を追加してやって,リポジトリに優先順位をつけるわけだ。
   $ sudo vi /etc/yum.repos.d/CentOS-Base.repo

   [base]
   name=CentOS-$releasever – Base
   mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
   #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
   gpgcheck=1
   gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
   priority=1 <<— 追加

   #released updates
   [updates]
   name=CentOS-$releasever – Updates
   mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
   #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
   gpgcheck=1
   gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
   priority=1 <<— 追加

   #additional packages that may be useful
   [extras]
   name=CentOS-$releasever – Extras
   mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
   #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
   gpgcheck=1
   gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
   priority=1 <<— 追加
上書き保存して,終了。

 さて,rpmforgeリポジトリをインストールし,ついでにアップデートしておく。どうして,rpmforgeリポジトリにしたかっていうと,ClamAVオフィシャルのLinux(魚拓です)「RedHat and Fedora」のところに,「Dag Wieersによって大変よくメンテされてるリポジトリがあるのでそれを使うといい」と書いてある。これが http://packages.sw.be/clamav/ で,前項ではここからwgetで入れたわけ。今回は,も一度FAQを読みに行って,How do I use Yum ?のところを読み,rpmforge-release packageを見に行って,「RHEL6 and CentOS-6 x86 32bit」の下記を選択した。でもこれ,結局のところ理研のミラーから落ちてくるようだ。
   $ sudo rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
   $ sudo yum update rpmforge-release

 「11 packages excluded due to repository priority protections」と出た。yum-prioritiesを入れた効用だ。お利口さん。さて改めて,
   sudo yum install clam*    で,うっかりインストールしてしまったので,改めて   sudo yum install clamd
でやり直した。clamav,clamd,clamav-dbについては,最新版がインストールされていると出たが,依存関係がうまく解決されていなかったようだサービスを止めて,インストールし直してみた。

 その後,
   $ sudo vi /etc/clamd.conf
で,189行目を下記のようにコメントアウトする。
   #User clamav
clamdを再スタート。
   $ sudo /etc/rc.d/init.d/clamd restart
 –9/8(土),消し線追加。どうしてもうまくclamdscanを走らせられないので,clamscanで行くことにした。この場合,Userはclamavのままで,不都合はなかった。clamdscanの不具合は,SELinuxをpermissiveにし,Userをrootにしても直らなかった。今のところ,何が足を引っ張っているのか,不明。当面は,clamscanでいいことにしよう。–

   $ chkconfig –list
をチェックしてみると,この段階で,

clamd  0:off  1:off  2:on  3:on  4:on  5:on  6:off

となっており,clamav-milterとclamdが自動起動O.K.になっているようだ。sudo yum install clamdだと,有効になっているサービスは,clamdだけだった。

   $ sudo freshclam
 $ sudo /etc/rc.d/init.d/clamd restartも,freshclamやるまえから一度でうまくいった。やっぱ,前回は何かまずかったのかな。
 sudo yum install clamd でやると,やはり,freshclamを先にやらないと,clamd restartがうまくいかない。

追記2(10/1):
 上に,
> clamdscanの不具合は,SELinuxをpermissiveにし,Userをrootにしても直らなかった。
と書いたのだが,これについては,CentOS6.3 Minimalを改めて新規インストールして試したら,permissive+rootでは走らせることができた。いろいろ弄っていたのでどこかがまずくなっていたのかもしれない。

カテゴリー
Linux

CentOS6の練習-#7(lm_sensorsとClamAVの話)。

投稿アップデート情報  追記(8/12)

 今日は,夕立あり。3時過ぎには,降り出した。まぁ,一時の雨足は強かったが,本当に夕立で,すぐにやんだ。昨日は立秋。暑い暑いと言っていても,季節は進んでいるな。

 Tera Termを起動して,サーバに接続する。
   $ sudo yum update
をやってみた。できたけど,アップデートが何もなかった(爆)。そういえば,指定のリポジトリを書き直した方がいいということをよくネット上で見るが,Minimalインストールでも,CentOS6.3には初めからyum-plugin-fastestmirrorとyum-prestoが入ってる。これがあれば,ミラーリストをざっとなめてからやってくれてるみたいだが,それでも指定のリポジトリを書き直したがいいんだろうか。

 Tera Termそのものは,CUIのターミナルエミュレータだが,マウスでコピー&ペーストもできるし,サーバの処理をやりながらおんなじPC上でこの記事も書けるし,うんと楽チン。CentOS6.3のMinimalインストールでは,マウスさえ使える状態になっていなくて,久しぶりにキーボード頼りだった。日頃も結構ショートカットキーを使ってはいるが,全部となると,また問題が別。今日の夜中にSSHが使えるようになって,前記事の冒頭でぼやいたことが嘘みたい。サーバ上はこのまま,CUIだけでいいや。現金なやつ —>> 自分

 本家のお世話-#40。で書いたように,春から初夏にかけて,温度のことで大騒ぎしたxw4200なので,lm_sensorsを入れて温度を測ってみた。しかし,lm_sensorsを入れるだけでも,依存関係で結構いろいろ入るものである。
   $ sudo yum install lm_sensors
   $ sudo sensors-detect
   $ sensors
      ———————————————
      smsc47b397-isa-0480
      Adapter: ISA adapter
      fan1: 5619 RPM
      fan2: 0 RPM
      fan3: 0 RPM
      fan4: 3810 RPM
      temp1: +52.0°C
      temp2: +0.0°C
      temp3: +42.0°C
      temp4: +0.0°C
      ———————————————
 今朝からずっと火を入れていて,14:00現在,室温34℃の状態で上記だと,上出来じゃないだろうか。ただし,システムファンは7段階の7番目(「低 <-- 123456(7) --> 高」)でフル回転していて,ものすごーくウルサイ。

 そういえばClamAVを入れていないので入れてみることにする。標準のリポジトリには含まれていないので,ダウンロードにwgetを使うが,これもMinimalには入っていないので,先にwgetをインストール。
   $ sudo yum install wget
 次に,ClamAV関係の3ファイルをダウンロードする。
   $ sudo wget http://pkgs.repoforge.org/clamav/clamav-0.97.5-2.el6.rf.i686.rpm
   $ sudo wget http://pkgs.repoforge.org/clamav/clamd-0.97.5-2.el6.rf.i686.rpm
   $ sudo wget http://pkgs.repoforge.org/clamav/clamav-db-0.97.5-2.el6.rf.i686.rpm
 ダウンロードした3ファイルは/home/centosに保存されている。
   $ sudo rpm -ivh clamav-db-0.97.5-2.el6.rf.i686.rpm
はできたが,
   $ sudo rpm -ivh clamav-0.97.5-2.el6.rf.i686.rpm
をやると,libltdl.so.7がないと怒られるので,libtool-ltdlをインストール。
   $ sudo yum install libtool-ltdl
改めて,次をやると
   $ sudo rpm -ivh clamav-0.97.5-2.el6.rf.i686.rpm
通ったので,次に,
   $ sudo rpm -ivh clamd-0.97.5-2.el6.rf.i686.rpm
で,インストールは完了。

   $ sudo /etc/rc.d/init.d/clamd start
とやると,
     Starting Clam AntiVirus Daemon: LibClamAV Error: cl_cvdhead: Can’t read CVD header in
     /var/clamav/daily.cld
     LibClamAV Error: cli_loaddbdir(): error parsing header of /var/clamav/daily.cld
     ERROR: Malformed database
と daily.cld が壊れているらしいので,先に
   $ sudo freshclam
をやってみた。その後,改めて
   $ sudo /etc/rc.d/init.d/clamd start
をやったら,Clam AntiVirus Daemon が無事走り出した。

追記(8/12):
 ちゃんとrpmforgeリポジトリを導入して,ClamAVのインストールをやり直した。その経緯を次記事に書いたので,インストールする場合は,そっちを参考にしてください。

カテゴリー
Linux

CentOS6の練習-#6(SSHサーバ)。

 まず,ぼやき。LINUXサーバはCUIで行くって一応決めたんだが,やっぱ慣れない。なんか何十年も時代を遡った気分になる。しかし,使い勝手は別にして,セキュリティの点から言うとあんまりいらないものというか,使わなくてすむものは入れないほうがいいんだろう。例えば,BINDだって,うちのレベルだとなければないですむ。
 それと,もうひとつ悩んでいるのが,パッケージの利用。表題のSSHだってCentOS6.3標準のパッケージだと,openssh-5.3p1。開発元の最新だと,openssh-6.0p1。Apacheは2.2.15だし,PHPは5.3.3と来る。これまでのポリシーに反するから,やはり,自分でビルドすることに馴染むべきなのかなぁ。でも,Winだと最新バージョンを使うからって,ビルドまではやらないから,ホント馴染みがない。どうしよう。

 ところで本題。今のところユーザがrootしかいない。昨今,SSHの接続には,rootを使わないのが主流みたい。というわけで,この際,-gオプション付きでグループ(users)を指定して,一般管理ユーザcentosを作る。ホームディレクトリが一緒に作られるようだ。パスワードも設定しておく。
   # useradd -g users centos
   # passwd centos
 この一般ユーザをsudoで使いたいのだが,Minimalインストールの場合は,sudoそのものがインストールされていないので,これをインストールする。
   # yum install sudo
 あと,sudoersの編集をする。以下を追加。(注:sudoersファイルって,実は行単位で管理されているようで,追加場所は root の直下でなくて,末尾でも構わないようだ。)
   centos ALL=(ALL) ALL
 ひとまずログアウト,centosでログイン。プロンプトが# —->> $に変わる。
   # exit
   login: centos  <<—- 作成したユーザ名
   Password:  <<—- 作成したユーザのパスワードを入力
   $ pwd
   /home/centos と表示され,ログイン直後はユーザのホームディレクトリにいることが分かる。
   $ sudo -l  <<—- このユーザのsudo権限を確認(表示結果は,sudo_-l.txt参照)

 ところで,CentOS6の練習-#5で,SSHデーモンはデフォルトで動いていることが分かっているので,現時点のバージョンと設定を確認。
   $ rpm -q openssh
と問い合わせると,openssh-5.3p1-81.el6.i686が戻ってきた。これは,インストール時と同じである。OpenSSHによれば,現時点の最新バージョンはopenssh-6.0p1なんだが,wikiをうろうろしていたら,Securing OpenSSHの8. Frequently Asked Question (FAQ)にUpstream Vendorが出すセキュリティ・パッチをきっちり当てていれば,無理に最新バージョンにする必要はないと書いてあった。前述のように悩んではいるのだが,独自にビルドしてインストールするのは,もう少しわかってきてからにして,今回はこのままで行くことにした。
 さて,設定を弄るにあたってマニュアルを見たいのだが,installed.txtでわかるとおりMinimalでは,Manもインストールされていない。ここで,インストールする。
   $ sudo yum install man
   $ man sshd_config
で表示されたものを参考にしながら, /etc/ssh/sshd_configを見ていく。これの一番上の方に注釈として,コメントアウトの形で書いてあるのがデフォルトの設定で,アンコメントの分が特別に設定を変えてあるところだと書いてある。ずーっと見ていくと,まず,

  1. #Port 22 になっているのだが,これを Port xxxxx (0 ~ 65535なら何でもよい。)にする。
    ssh のポート22っていうのはWELL KNOWNだから,自分しか使わない接続のポートとしては「変えておいた方が無難だよな」って程度。普通は,0からずっと開いてるポートをなめてくって形だろうから,時間かかったらあきらめてくれることを狙って,大きい数の方がいいのかな。今どき,時間もあんまり関係ないかなぁ。まっ,でも22のままよりはいいだろう。
  2. Protocol 2(つまり,SSH2)になってて,レガシー(つまり,SSH1)は殺されてるから,O.K.
  3. #ServerKeyBits 1024  —>>  ServerKeyBits 2048
  4. #PermitRootLogin yes  —>>  PermitRootLogin no
  5. #RSAAuthentication yes だから,デフォルトで使えることになっているのだが,
    RSAAuthentication yes にして,利用していることを明示しておく。そのほうが,あとで自分が確認するとき,混乱しなくて済む。<<— 設定はデフォルトのままだけど,自分がこれを使うと特に認識したいときは,すべてこの書き方で行く。ということで,
    #PubkeyAuthentication yes  —>>  PubkeyAuthentication yes
    #AuthorizedKeysFile .ssh/authorized_keys  —>>  AuthorizedKeysFile .ssh/authorized_keys
  6. #HostbasedAuthentication no  —>>  HostbasedAuthentication no
  7. PasswordAuthentication yes  —>>  PasswordAuthentication no
    #PermitEmptyPasswords no  —>>  PermitEmptyPasswords no
  8. ChallengeResponseAuthentication no になっているからてるから,O.K.
  9. GSSAPIAuthentication yes  —>>  GSSAPIAuthentication no にもどす。ここは,あとで変えるかもしれない。
  10. X11Forwarding yes  —>>  X11Forwarding no にもどす。ここも後で変えるかもしれない。

 こんな感じかな。これで,

  • SSH2 接続。
  • 2048ビットのRSA公開鍵・秘密鍵
  • 上記鍵ペアのパスフレーズ

を想定した接続になるはず。

   $ sudo vi /etc/ssh/sshd_config
で設定を書き換える。
   $ which sshd
でsshdの場所を調べる。
   $ sudo /usr/sbin/sshd -t
で,テスト。bad configurationが戻ってきたら対処。今回は何も戻ってこないので,次へ進む。
   $ sudo service sshd restart
   Stopping sshd:                  [ OK ]
   Starting sshd:                  [ OK ]
が瞬時で戻ってきた。ハヤッ。

 SSHのポートを変更したので,ファイアーウォールの設定(/etc/sysconfig/iptables)で,ポート22を上で設定したものに変更する。変更を適用するために,サービスをリスタート。
   $ sudo service iptables restart

 「2048ビットのRSA公開鍵・秘密鍵」のつもりなので,鍵を用意しなければいけない。ssh-keygenコマンドで,CentOS6上で生成できるようだが,鍵ペアのパスフレーズにかなり長いものを使うつもりなので,入力が不安。まぁ,出来るまで何度でもやればいいようなもんだが……それに,公開鍵・秘密鍵の性質から考えて,クライアント側で生成して,サーバに送るほうが安全だろう。秘密鍵はメールで送るわけにいかないが,公開鍵ならそれもできるわけだし。
 どうせWin端末からリモートするから,ターミナルエミュレータとしてTera Termを導入することにした。Tera Termには鍵生成の機能もある。Tera TermはかなりあとまでSSH2やUTF-8に対応していなかったらしいが,現在はサポートするようになり,Tera Termプロジェクトが順調に動いているようなので,PuTTYでなくこちらを使うことにした。

  1. リリースファイル一覧から,teraterm-4.74.exeをダウンロード。Windows用定番SSHクライアント「Tera Term」の使い方を参考にしながら,イントラ内のWin端末にインストール。オプションがいろいろあるが,今回は初めてのことなので,「標準インストール」した。自分が使わないオプションは,入れないほうがいいかもしれないが,インストールするのはWin端末で,サーバ上じゃないから,ちょっとお気楽。
  2. Tera Termを起動する。新しい接続の窓は閉じて,鍵を生成する。練習サーバは,自LAN内からだけのアクセスだが,これ(今回のLINUX サーバ構築)を機会に外部からでもリモート出来るようにしてみたいという夢(オーバー ^^,,, )があるので,ガンバ。
    「設定」>>「SSH鍵生成」から,図1の設定で鍵を生成。生成の終わったところでパスフレーズを入力。公開鍵と秘密鍵を保存したら,鍵生成の窓を閉じてTera Termを終了する。
    ところで,
       公開鍵(id_rsa.pub)
         = サーバに登録する鍵(人に見られても問題ない鍵)
       秘密鍵(id_rsa)
         = ローカルマシンに置いておく鍵(人に見られてはいけない鍵)
    なので,公開鍵の方をサーバにコピーしなければいけない。
         参考ページ:秘密鍵と公開鍵
  3. Tera Termで鍵を作ったので,サーバ上にディレクトリ.sshがない。これを作る。場所は,/home/centos/.ssh 。
       $ cd
       $ mkdir .ssh   パーミッション755 ownerはcentos
       $ chmod 700 .ssh
     USBフラッシュメモリに入れたid_rsa.pubをサーバにコピーする。
       $ sudo mount -t vfat /dev/sdb1 /mnt/flash
       $ cp /mnt/flash/id_rsa.pub .ssh/authorized_keys
          パーミッション755 ownerはcentos
       $ sudo umount /mnt/flash
       $ chmod 600 .ssh/authorized_keys
       $ sudo service sshd restart

 さて,Tera Termを起動して,イントラ内から接続してみよう。

  1. 新しい接続のホスト名と,TCPポートだけをデフォルトから変更して[OK]をクリック(図2)。
  2. 1度目は,セキュリティ警告が出る(図3)。ここで,known hostsリストに追加しておくと,次から出なくなる。サーバ情報が何も変わっていないのに,セキュリティ警告が出る場合は,なりすましなどの危険があるので,そういう場合の用心のためにも,この画面は記録しておいた方がいいと思う。
  3. 図4でユーザ名とパスフレーズ,秘密鍵の場所を指定してやると,接続できた(図5)。
図1
図1

図2
図2

図3
図3

図4
図4

図5
図5

 今回の主たる参照先(上記ですでにリンクを貼っているところ以外)。

  1. Red Hat Enterprise Linux 6
  2. 仕事で使える魔法のLAMP
  3. Linuxコマンド百科辞典
カテゴリー
Linux

CentOS6の練習-#5(デフォルトで動いてるサービス)。

 アヂ,アヂ,アヂ!! やっと,昨日梅雨が明けた。しかし,今週の天気は,一昨日も昨日も今日も,梅雨というより,晴れーーーのち夕立ッ,見たいな感じだった。暑いし湿気てるし,「うーっ,溶けてしまいそうだ」。日本の夏だー。

 ひとしきり唸ったところで本題。7/13に6.3のMinimalをインストールしてから,正直,まだ何も手を付けていない。一番最初に,CentOSを使おうかなと決めたときのサイトを見に行って,別のディストリに食指を動かすなんてことをやったりもしている。まぁ,でもCentOSで行くことは変えてないけどね。

 電源入れるたび,yum updateだけをやってる感じなんだが,結構頻繁にkernelのマイナー・アップデートがあるんだな。7/13からもう2回もアップデートがあった。
   kernel.i686 2.6.32-279.el6  <<— インストール時
   kernel.i686 2.6.32-279.1.1.el6
   kernel.i686 2.6.32-279.2.1.el6
という感じ。でもって,
   yum list installed|grep kernel
とか
   rpm -qa|grep kernel
とかで問い合わせてやると,3つとも出てくるから,kernelについては自動で清掃作業はやらないみたい。まぁ,もしやられるとしたら逆に怖くもあるけど。今のところは必要ないが,古いkernelの削除を,CentOS6だと package-cleanup –oldkernels でざっくりできると書いてある。package-cleanup は,yum-utils に含まれているらしい。しかし,installed.txtを見た限りでは,Minimalだとインストールされていない。実際,
   package-cleanup –oldkernels
とやったら, command not found が戻ってきた。で,yum-utils をインストールしてみた。いらんことかもしれんが……。
   yum install yum-utils
 終わってから,
   package-cleanup –oldkernels
をやってみたら,
   kernel.i686 2.6.32-279.1.1.el6
   kernel.i686 2.6.32-279.2.1.el6
だけになった。ふーん,お利口さんだ。最新だけでなく,その直前のkernelも残すんだ。

 Minimal インストールだと,初期の段階で,どんなサービスが動いているんだろうか。 ntsysv が使えると書いてあるが,このパッケージもインストールされていなかった。あれもこれもインストールするのはどうかと思い,
   service –status-all
でチェックして見た。標準出力に出した場合と若干差があるようだが,USBフラッシュメモリに書きだした一覧がこれ。知らないサービスが並んでいて,見てもまだよく意味がよくわからない。しかし,sshdなんかはMinimalでも初めから走ってるんだなということは分かった(爆)。

カテゴリー
Linux

CentOS6の練習-#4(インストールされたPackage)。

 現時点でインストールされているパッケージのリストを確認。
   # yum list installed
とやると,一覧が画面上を流れる。特定のパッケージのインストール状況とかを知りたいんであれば,
   yum list installed|grep openssh
とかでいいんだが,今の場合は一覧なので,画面上を流れられても困る。記録のためにフラッシュメモリー上に書きだすことにする。

 で,ちょっと,覚え書。USBフラッシュメモリのマウントのしかた。

  • USBフラッシュメモリを挿す。 <<— 当たり前か(笑)。
  •    # dmesg
    でデバイス名を調べる。  sdb: sdb1  になっていた。
  • マウントポイントを作る。 <<— 初回のみ。
       # mkdir /mnt/flash
  • マウントする。
       # mount -t vfat /dev/sdb1 /mnt/flash
  • installed.txtに書きだす。 <<— 今回はこれをやりたくてマウントしたので,ここの操作は当然毎度変わる。
       # yum list installed > /mnt/flash/installed.txt
  • アンマウントする。
       # umount /mnt/flash
カテゴリー
Linux

CentOS6の練習-#3([Minimal]インストール)。

投稿アップデート情報  更新(7/13)

 さて,いよいよLinux サーバの構築を始めます。Webサーバの構築だから,「本家のお世話」の関係だが,ひとまずはテスト構築なので,「CentOS6の練習」に入れた。何はともあれ,Minimalのインストールまで。
 今日(7/13),CentOS6.3のリリースノートを拾い読みしていたら,「MinimalCD と full DVD から Minimal を選んだ場合は完全に同じわけではないから気をつけてね」と書いてあった。6.2についても同じことが書いてあった。どこが違うんだろう。それもどっかに書いてあるんだろうなと,思った。 yum update したら,6.2が6.3になったんだが,今後,サーバについては,MinimalCDを基準に行こうと思っているので,この際,も一度MinimalCDからやり直しておこうということで,ちょっと書き換え。

  1. xw4200を,CentOS-6.2-i386-bin-DVD1から起動する。Minimalのインストールだから,CentOS-6.2-i386-minimal.iso を使ってもいいんだが,この間作ったDVDがあるのでそれを使用した。CentOS-6.3-i386-minimal.isoから起動する。
  2. 一番上の「Install or upgrade an existing system」のままで[Enter]。
  3. |Disk Found|では「Skip」を選んで[Enter]。
  4. CentOS6のロゴが表示されたら,[Next]をクリック。
  5. Japanese(日本語)を選び,[Next]をクリック。
  6. キーボードは日本語が選ばれていると思うので,そのまま,[次(N)]をクリック。
  7. 「基本ストレージデバイス」を選んだまま,[次(N)]をクリック。
  8. 「新規インストール」を選んだまま,[次(N)]をクリック。
  9. ホスト名は,自鯖のホスト名を設定。
    左下の「Configure Network」に入って,System eth0 の IPv4について自宅LANの情報を設定する。「自動接続する」のところを必ずチェックする。これについては,ルータなどの設定も必要になる。
    [次(N)]をクリック。
  10. タイムゾーンは,「アジア/東京」のまま,左下の「システムクロックで UTCを使用」のチェックをはずし,[次(N)]をクリック。
  11. rootのパスワードを設定。絶対に忘れないように,控えを!! [次(N)]をクリック。
  12. 「既存のLinuxシステムを入れ替える」を選び,左下の「パーティションのレイアウトをレビューまたは修正する」にチェックをしたのち,[次(N)]をクリック。もう1度,[次(N)]をクリック。 「変更をディスクに書き込む」をクリック。
  13. |ブートローダーのオペレーティングシステムのリスト|から「Others」を削除して,[次(N)]をクリック。
  14. [Minimal]をインストールするので,そのままで,[次(N)]をクリック。
  15. DVD CDが排出されるので,取り出した後,光学ドライブを閉じて,「再起動(T)」をクリック。
  16. CentOS release 6.2 (Final) CentOS release 6.3 (Final)
    Kernel 2.6.32-220.e16.i686 on an i686 Kernel 2.6.32-279.e16.i686 on an i686

    login:
    と表示されるので,ユーザ名はrootを使用し,先ほど決めたrootのパスワードで,ログインする。

  17. ここでアップデートを行っておく。
    # yum update
  18. SELinuxの状態の確認。
    # getenforce
    Enforcing <<– 有効です。
    Minimalのノーカスタマイズってことは,xが入っていないので,すべてコマンドラインからなわけ。それでたったこれだけで疲れた。ひとまず,シャットダウン。shutdown -h now (爆)