ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2009年9月22日火曜日

find コマンドで該当するファイルを削除する

find コマンドで該当するファイルを削除する方法です。別に削除でなくてもいいんですけど、使いたい目的は削除が多いのかなと思います。他にもパーミッション(permission)の変更にも使えたりします。

使い方の例としては以下の通りです。

find . -name *.sh | xargs ls -l
find . -name *.sh | xargs rm -f
*.sh というファイルを検索し、それを rm コマンドで削除するというコマンドです。(実行するととんでもないことになるようなものなので、試行には十分注意して下さい。)まずは、ls コマンドで対象ファイルを表示してみて、rm コマンドで削除するほうがいいでしょう。

以下の通り、同様のことができます。
  1. 実行権のあるファイルの実行権を落とす
    find . -perm -ugo=x -type f | xargs ls -l
    find . -perm -ugo=x -type f | xargs chmod ugo-x
    permission が +g+x だけだとディレクトリも対象となってしまい、意図と違うので、-type f を付加します。
  2. group にあるパーミッションを other にも付加する
    find . -perm -g=r -type f | xargs ls -l
    find . -perm -g=r -type f | xargs chmod o+r
色々応用できると思います。

2009年4月23日木曜日

awk No.005(変数で条件指定)

awk は、awk の中で変数を持っていますので、シェル変数の持ち込み方(使い方)に工夫が必要です。-v オプションで -v VAR=${VAR} とする方法とは別に、条件指定(/ で括った場合)でもひと癖あります。

$ VAR1="abc"
$ awk '/$VAR1/ {print}' a.dat
上記のようにすると、$VAR1 という文字列を検索して、変数 VAR1 の内容"abc"で検索をしてくれません。そこで、以下のように記述することで、変数 VAR1 の内容"abc"で検索してくれます。
$ VAR1="abc"
$ awk '/'$VAR1'/ {print}' a.dat
シングルクォートで囲ってあげることで、シェル変数として認識してくれます。

2009年4月7日火曜日

sed でコマンド実行結果を使う

sed でコマンド実行結果を指定する方法です。

sed s/abc/def/g a.txt といった指定をしますが、abc や def にコマンド実行結果を指定する場合、以下のようにします。

sed s/`hostname`/`hostname -f`/g a.txt
これで、hostname コマンドの実行結果(例えば host01)を hostname -f の実行結果(例えば host01.hogehoge.local)に変換してくれます。

`command`という文字列として扱いたい(コマンドとして実行しない)場合は、s から g を、シングルクォート( ' )で囲み、コマンドのバッククォート( ` )の前にバックスラッシュ( \ )を挿入します。
sed 's/abc/\`command\`/g' a.txt

2009年3月28日土曜日

awk No.004(条件指定)

awk の条件指定はいろいろあります。

まず、空行を除く場合は、以下のように NF > 0 を指定します。余計なデータを除いて処理する場合の基本です。ここで使っている NF は読み込んだレコードのフィールド数(データ数)を表わしています。NF が 0 よりも大きい、すなわち 1 個以上の場合は処理をするという指定になります。(空行はデータがないので処理しないということになります。)

awk 'NF > 0 {print $1}' a.dat
空行を除く場合は、以下のようにもできます。どちらかといえばこちらの方が本当の意味で空行を判定しています。^$ は正規表現で先頭と行末で、先頭と行末のみということは空行で、それを ! で否定していますので、空行ではない行という条件になります。データが無いという条件より厳密です。
awk '!/^$/ {print $1}' a.dat
何番目のレコードを処理するというように、レコードの順番を指定して処理する場合は、以下のように NR を使います。例えばデータファイルに行タイトルがある場合は、1行目を読み飛ばす等の処理ができます。
awk 'NR > 1 {print $1}' a.dat
基本的な使い方をもう一つ。読み込んだデータの内容によって処理をするかどうかを判定します。1番目のフィールドのデータが 100 より大きい場合に処理をするといった使い方は以下の通りです。
awk '$1 > 100 {print $1}' a.dat

2009年3月24日火曜日

awk No.003(区切り文字、デリミタ、フィールドセパレータを変更)

awk 標準の入力データのデリミタはスペースです。デリミタを変更したいときは、変数 FS を使います。デリミタと書きましたが、FS という変数からわかるようにフィールドセパレータというのが区切り文字の正式名称(?)のようです。

使い方は以下の通りです。

$ cat a.dat
a:b:c
d:e:f
g:h:i

$ awk -v FS=":" '{print $1}' a.dat
a
d
g

2009年3月5日木曜日

df で表示させるファイルシステムを限定する

df コマンドでファイルシステム情報を表示すると、NFS 等のネットワークファイルシステムを多くマウントしていたり、ローカルファイルシステムが多くあったりすると、だらだらと表示されて見づらくなってしまいます。

そこで、-x (--exclude=) オプションで、表示させないファイルシステムを指定することができます。また、複数のファイルシステムタイプを指定したい場合は、-x (--exclude=) オプションを複数回指定します。

df -x nfs -x ext2

2009年1月29日木曜日

PCで作成したCDをUNIXで読む

Windows で作成した CD-ROM(CD-R等)を UNIX で読むとロングファイルネームのファイルが全て 8.3形式に変わってしまっていたり、大文字ばかりになっていたり、小文字ばかりになっていたりします。

Windows で作成した CD-ROM(CD-R等) は、通常 Joliet といわれる形式になっています。Joliet は CD-ROM(CD-R等) の規格である ISO9660 を拡張して、8.3形式以外のファイル名を使えるようにしたものです。

しかし、UNIX では Joliet が認識できず、8.3形式のまま表示されてしまうことがあります。Linux は Windows と親和性が高い傾向にあるので、問題なく読んでくれるものが多いのですが、Solaris などは Joliet を認識できません。

Solaris などの UNIX では RockRidge という Joliet とは異なった規格が使われいることが原因です。

なので、Windows で作成した CD-ROM(CD-R等) を UNIX でも正しく読みたい場合は、RockRidge 形式でライティングすればいいのです。が、簡単にはできません。方法としては、以下の方法が考えられます。

  1. Windows で RockRidge 形式でライティングする。
  2. UNIX(Linux含む)で RockRidge 形式の ISO イメージを作成し Windows でライティングする。
ただ、1. は RockRidge 形式でライティングできるライティングソフトが見当たりません。(あるのかもしれませんが・・・)2. も、UNIX 環境へファイルを転送して ISO イメージを作成できるくらいなら、あえて CD-ROM(CD-R等) にする必要はありません。

主な用途としては、Windows で取得したファイルを UNIX にもっていきたいけれど、ネットワーク環境などが整っていないので CD-ROM に焼いてもっていくということなので、できるだけ Windows 環境だけで CD-ROM を作成しないといけません。そこで、以下の方法であれば、Windows 環境だけで UNIX 向けの RockRidge 形式の CD-ROM が作成できます。(反則気味ですが・・・)
  1. Cygwin で RockRidge 形式の ISO イメージを作成する。
    # mkisofs -R -J -T -o rockridge.iso ./files
    -R RockRidge 形式で ISO イメージを作成
    -J Joliet 形式で ISO イメージを作成(-R -J は同時に指定できます。)
    -T TRANS.TBL を作成(RockRidge 形式が使用できないシステム向けのロングファイルネーム情報)
    -o filename ISO イメージファイル名
    ./files ファイルが格納されているディレクトリ
    【-R -J -T を全て指定しておけば、ほぼ全てのシステムでロングファイルネームが扱えるということになります。】
    Manpage of MKISOFS
  2. RockRidge 形式 ISO イメージをライティングする。
すいません。Cygwin 使うだけでした・・・Cygwin なら Windows 上で処理できますから・・・

2008年12月25日木曜日

history コマンドの履歴消去

bash を使っているといろいろコマンドを打ちすぎて、history の履歴自体が鬱陶しくなってきます。そんな時は、history -c で履歴を消去してしまうとすっきりします。

2008年8月8日金曜日

自宅サーバ構築 No.011(kernel update & grub)

yum の設定が終わっているので、頻繁に‘yum update’として、インストール済のパッケージをアップデートするわけですが、たまに kernel のアップデートが発生します。

kernel のアップデートは結構頻度が高いです。重要なコンポーネントですから当然と言えば当然でしょう。一般的に以下の様に grub の設定も同時に変更され、過去の kernel とアップデートされた kernel を選んで起動できるようになっています。(当然、標準は新しい kernel です。)

# pwd
/boot/grub

# cat menu.lst
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-92.1.10.el5)
      root (hd0,0)
      kernel /vmlinuz-2.6.18-92.1.10.el5 ro root=LABEL=/
      initrd /initrd-2.6.18-92.1.10.el5.img
title CentOS (2.6.18-92.1.6.el5)
      root (hd0,0)
      kernel /vmlinuz-2.6.18-92.1.6.el5 ro root=LABEL=/
      initrd /initrd-2.6.18-92.1.6.el5.img
title CentOS (2.6.18-92.el5)
      root (hd0,0)
      kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/
      initrd /initrd-2.6.18-92.el5.img

2008年8月3日日曜日

自宅サーバ構築 No.010(TCP Wrapper)

何も設定されていない TCP Wrapper ですが、まずはお決まりの設定だけ実施しておきます。hosts.deny で ALL:ALL を指定しておきます。

ここで、hosts.allow に何も指定していないと、すべて拒否することになってしまいます。ですので、ssh での接続だけは許す為に、ローカルネットワークからの ssh だけ許可するために、hosts.allow に ssh:10.0.0. とローカルネットワークアドレスを指定ておきます。

#/etc/hosts.allow
sshd: 10.0.0.

#/etc/hosts.deny
ALL:ALL
設定は、ファイル編集後、即時反映されます。ゆるやかに設定するのであれば、許可(hosts.allow)を設定し、拒否(hosts.deny)を設定するという順で設定したほうがいいでしょう。

誤って、hosts.allow の記述を削除しただけで、sshd:10.0.0. と追加し忘れると、ssh による接続すらできなくなるので、hosts.allow / hosts.deny を編集する場合、ssh セッションを残したままで、狙い通りの設定になっているか確認したほうがいいでしょう。

xinetd は、セッション開設時のチェックになるので、接続済のセッションは影響されません。

(もう少し設定を続けます・・・)

2008年7月24日木曜日

自宅サーバ構築 No.009(パケットフィルタ )

順番が逆ですが、公開する前にいわゆるパケットフィルタ系の設定をしておく必要があります。基本は TCP Wrapper と xinetd による対策と、iptables(Netfilter) による対策です。

それぞれの関係ですが、TCP Wrapper で判定された通信が、xinetd に渡されます。また、TCP Wrapper に渡る前に、iptables で判定されるようになっています。

外から入ってくるパケットは、iptables → TCP Wrapper → xinetd というルートで目的のアプリケーション(ssh/telnet/ftp 等)と通信します。

初期状態で、CentOS 5.2 の iptables は以下の状態です。

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
REJECT は、reject-with icmp-host-prohibited の1行だけで、適切なエラーだけです。また、RH-Firewall-1-INPUT は、INPUT と FORWARD で使用されています。極々最低限の定義で、ほとんど許した後に、それ以外を拒否としているルールなので、iptables を適用していない状態と、ほとんど変わりません。

TCP Wrapper の初期設定は以下の状態です。
# cat /etc/hosts.allow
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#

# cat /etc/hosts.deny
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!

何も定義されていません。

iptables や TCP Wrapper は、例を元に、だいたいで設定をすることが多いのですが、ちょっと時間を掛けて、設定をじっくりやります。

2008年7月21日月曜日

自宅サーバ構築 No.008(ClamAVインストール)

Linux でも、アンチウイルスソフトは必要ということで、ClamAV(Clam AntiVirus) をインストールします。

既に、yum のリポジトリを追加してあるので、追加したリポジトリからインストールします。今回は DAG(RPMForge) を使用します。DAG 以外のリポジでは、clamav という名前で提供されているのですが、DAG では、clamd という名前で、複数パッケージがセットになっています。

いろんなサイトでも、clamd でのインストール例が掲載されていますので、そちらに合せてインストールします。

  1. インストール
    # yum --enablerepo=rpmforge install clamd
    * clamd/clamav/clamav-db がインストールされます。
  2. ClamAV起動
    # service clamd start
    Starting Clam AntiVirus Daemon: [ OK ]
    ちなみに、chkconfig はインストール直後で、以下の設定(on)になっています。
    # chkconfig --list clamd
    clamd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  3. ウイルスパターンアップデート
    # freshclam
  4. その他

2008年7月20日日曜日

自宅サーバ構築 No.007(yumリポジトリ設定)

yum の初期設定では、当たり前ですが、標準のリポジトリしか設定されていません。なので、いくつかのリポジトリは予め追加しておきます。

参考:Computer - CentOSのリポジトリを増やす

EPEL - FedoraProject
* How can I install the packages from the EPEL software repository?

# su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm'
:
# su -c 'yum -y install foo'

以下の通り、リポジトリが追加されます。
# ls -l epel*
-rw-r--r-- 1 root root 1054 4月 26 03:08 epel-testing.repo
-rw-r--r-- 1 root root 954 4月 26 03:08 epel.repo
DAG: RPM packages for Red Hat, RHEL, CentOS and Fedora
# rpm -Uvh http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

上記のようにしてもエラーが発生してしまいます。HTTP で失敗しているようです。wget してからrpm コマンドを実行します。

# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt

以下の通り、リポジトリが追加されます。
# ls -l *rpmforge*
-rw-r--r-- 1 root root 684 3月 9 2007 mirrors-rpmforge
-rw-r--r-- 1 root root 428 3月 9 2007 rpmforge.repo

一般的に DAG/RPMforge は、disable(enable=0)にしておくようなので、変更します。

# vi rpmforge.repo
:
#enabled = 1
enabled = 0
:

2008年7月19日土曜日

自宅サーバ構築 No.006(必要なツールの導入)

準備作業が多いですが、必要なツールのインストールはやってしまいます。

  1. screen
    • インストール可能か確認
      # yum info | grep -i ^name | grep -i screen
      Name : gnome-screensaver
      Name : screen
      Name : xfce4-screenshooter-plugin
      Name : xscreensaver
      Name : xscreensaver-base
      Name : xscreensaver-extras
      Name : xscreensaver-extras-gss
      Name : xscreensaver-gl-base
      Name : xscreensaver-gl-extras
      Name : xscreensaver-gl-extras-gss
    • インストール
      # yum install screen
  2. compress
    # yum install ncompress
  3. ntp
    # yum install ntp

    # vi /etc/ntp.conf
    :
    #server 0.centos.pool.ntp.org
    #server 1.centos.pool.ntp.org
    #server 2.centos.pool.ntp.org
    ntp.jst.mfeed.ad.jp
    :

    # ntpdate ntp.jst.mfeed.ad.jp

    # chkconfig --list ntpd
    ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
    # chkconfig ntpd on
    # chkconfig --list ntpd
    ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    # /sbin/service ntpd start
    ntpd を起動中: [ OK ]
  4. その他

自宅サーバ構築 No.005(SELinux無効)

SELinuxは、Red Hat Enterprise Linux、Fedora、CentOS 等では、標準でインストールされます。ファイルシステムもそれ用になっています。本来なら、インストールするかどうかを選択できるといいのですが、インストールされてしまいます。

でも、使いたくありません。随分こなれてきましたが、使わないといけない必然性はありません。

とりあえず、以下の手順で、無効にしておきます。

  1. SELinux の状態を確認
    # cat /etc/sysconfig/selinux | grep ^SELINUX=
    SELINUX=enforcing ← enforcing であれば有効状態です。
    # getenforce ← コマンドでも確認可能です。
    Enforcing
  2. /etc/sysconfig/selinux を編集
    # vi /etc/sysconfig/selinux
    :
    SELINUX=disabled ← enforcing を disabled に変更
    :
    以下の方法で、
    # sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  3. システム再起動
    # shutdown -r now
  4. SELinux の状態を確認(システム再起動後)
    # cat /etc/sysconfig/selinux | grep ^SELINUX=
    SELINUX=disabled ← disabled であれば無効状態です。
    # getenforce ← コマンドでも確認可能です。
    Disabled

自宅サーバ構築 No.004(yum設定)

とりあえず一休みというわけではないのですが、最少構成のため、これから必要なパッケージは全てインストールしていくことになります。ということで、yum の設定を済ませておきます。

  1. yum の キャッシュディレクトリを掃除
    # yum clean all
    Cleaning up Everything
  2. yum-fastestmirror をインストール
    fastestmirror で最もアクセスしやすいミラーサイトを自動選択してくれるようになります。
    # yum install yum-fastestmirror
  3. アップデート可能なパッケージをすべて更新
    最少構成でも結構時間が掛かります。
    # yum update
まずは、このくらいでいいでしょう。標準のリポジトリにないパッケージをインストールしたりする場合、リポジトリを変更したりする必要がありますが、それは後程ということで。

2008年7月18日金曜日

自宅サーバ構築 No.003(Wheel設定)

SSHでのログインを、root ログイン禁止、パスワード認証禁止、公開鍵認証のみ許可設定しましたが、もうひと工夫必要です。

一般ユーザで、root になれるユーザを制限することで、悪意をもった一般ユーザが root に昇格することを避けるため、指定したユーザのみ root になれるようにします。一般的にいう Wheel 設定です。

  1. wheel グループへ一般ユーザ(hoge)を追加
    # cat /etc/group | grep wheel
    wheel:x:10:root
    # usermod -G wheel hoge
    # cat /etc/group | grep wheel
    wheel:x:10:root,hoge
  2. PAM設定
    /lib/security/pam_wheel.so が存在することを確認します。
    存在しない場合、インストールが必要です。
    # vi /etc/pam.d/su
    :
    #auth required pam_wheel.so use_uid
    auth required pam_wheel.so use_uid ← コメントを外す
    :
    特にシステム再起動などを行わなくても、設定は反映されます。
これで、特定のユーザ以外は root になれません。Linux は標準状態で多くのユーザが追加されており、パスワード設定などされていないので、原則使えないので問題は少ないのですが、それらのユーザがクラックされて、そこから root に昇格なんてことは最小限にできます。

弱点と言えば、/etc/group を眺めると root になれるユーザがわかってしまうということでしょうか。

2008年7月16日水曜日

自宅サーバ構築 No.002(SSH設定)

とりあえずCentOSをインストールし終わりましたが、当然、このままでは公開できません。まずは、いくつかセキュリティ面で設定する必要があります。

まずは、SSHに必要な設定を行います。

  • rootでのログインを禁止する
  • パスワード認証を禁止する
  • 公開鍵認証のみ許可する
まず、インストール直後は、SSHがインストールされており、リモートからrootでログイン可能な状態なので、リモートからrootでログインします。

※以下、PuTTYで操作しています。

以下の通り、最初は警告が表示されますが、そのまま[はい]をクリックします。


  1. root 以外のユーザーを作成
    rootでのログインを禁止するわけですから、root以外のユーザーを作成する必要があります。
    # useradd -d /home/hoge -c HOGE -u 1001 hoge
    # passwd hoge
    Changing password for user hoge.
    New UNIX password:
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.
  2. root でのログインを禁止
    以下の設定を実施し、rootでログインできないこと、作成したユーザーでログインできることを確認します。
    # vi /etc/ssh/sshd_config
    :
    #PermitRootLogin yes ← 標準はデフォルトがyes
    PermitRootLogin no
    :

    # service sshd restart ← 設定反映
    sshd を停止中: [ OK ]
    sshd を起動中: [ OK ]
  3. 公開鍵作成
    パスワード認証を禁止する前に公開鍵認証を設定します。公開鍵認証前にパスワード認証を禁止するとログインできなくなっていまいますから・・・ :-)
    $ ssh-keygen -b 2048 -t rsa -C hogehoge
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
    Created directory '/home/hoge/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/hoge/.ssh/id_rsa.
    Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
    The key fingerprint is:
    xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx hogehoge
  4. 公開鍵を authorized_keys へ追加
    $ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
    $ chmod 600 authorized_keys ← パーミッションを600に変更
    $ ls -l authorized_keys
    -rw------- 1 centuser centuser 398 7月 17 09:20 authorized_keys
    $ rm id_rsa.pub ← 不要なので削除
  5. id_rsa を保存
    id_rsa をターミナルソフトを起動するクライアントへ保存します。これがなくなってしまうと公開鍵の作成からやり直しになるので要注意です。
  6. id_rsa の変換(PuTTY の場合)
    TeraTerm 等では、id_rsa がそのまま使えるので、変換は特に必要ありません。PuTTY の場合は必要になるので、以下の通り変換しておきます。
    • PuTTYgen を起動します。
    • [PuTTY Key Generator]画面で、[Conversions]-[Import key]で保存した id_rsa を開きます。
    • [PuTTYgen: Enter Passphrase for key]画面で、パスフレーズを入力します。
    • [PuTTY Key Generator]画面で、[Save private key]をクリックし、id_rsa.ppk を作成します。
  7. ターミナルソフトで公開鍵認証で接続
    ターミナルソフトで公開鍵認証で接続できることを確認します。
  8. パスワード認証を禁止
    公開鍵認証での接続が成功することを確認して、パスワード認証を禁止します。
    設定後、パスワード認証できないことを確認します。
    # vi /etc/ssh/sshd_config
    :
    #PasswordAuthentication yes ← 初期設定では yes なのでコメントアウト
    PasswordAuthentication no
    :

    # service sshd restart ← 設定反映
    sshd を停止中: [ OK ]
    sshd を起動中: [ OK ]
これで、リモートからは、root 以外のユーザーで、公開鍵認証の設定可能なターミナルからのみログインできるようになりました。

ひとつ気になるのは、PuTTY でパスワード認証をチャレンジすると
No supported authentication methods available
と表示されて、拒否されます。動作は満たしていますが、パスワード認証を禁止しているということがわかってしまいます。これはできれば隠匿したいですね。パスワード認証時のエラーを返すほうがいいと思いますが、そういう動作をさせると問題あるんでしょうかね。

2008年7月15日火曜日

自宅サーバ構築 No.001(CentOSインストール)

特に何をするわけでもないのですが、自宅サーバを構築してみたいと思います。

あまったPCが1台あるので、構築してみます。電気代が思った以上に掛かるようなら運用しないかもしれません。その程度の意気込みです。 :-)

サーバ用途なので、まずは最少インストールです。以下のページを参考にしました。

CentOS5 インストール方法

以下、netinstall版のCDを使用しています。

  1. boot: で [Enter] を押します。
  2. [Choose a Language]画面で、‘Japanese’を選択し、[OK]を押します。
  3. [Language Unavailable]画面で、[OK]を押します。
  4. [Keyboard Type]画面で、‘jp106’を選択し、[OK]を押します。
  5. [Installation Method]画面で、‘FTP’を選択し、[OK]を押します。
  6. [Networking Device]画面で、使用するNICを選択し、[OK]を押します。
  7. [Configure TCP/IP]画面で、以下の通り設定し、[OK]を押します。
    [*] Enable IPv4 support
    (*) Manual configuration
  8. [Manual TCP/IP Configuration]画面で、IPv4 address、Gateway、Name Serverを設定し、[OK]を押します。
  9. [FTP Setup]画面で、以下の通り設定し、[OK]を押します。
    FTP site name: ftp.riken.jp
    CentOS directory: /Linux/centos/5/os/i386
  10. [次]をクリックします。
  11. パーティション設定で、‘カスタムレイアウトを作成します。’を選択し、[次]をクリックします。
  12. 適当にパーティションを設定し、[次]をクリックします。
  13. ブートローダ設定で、‘GRUBブートローダは、/dev/hda 上にインストールされます。’を選択し、[次]をクリックします。
  14. ネットワークの設定で、FTPサイトを指定した時の設定が引き継がれているので、ホスト名以外は、そのままで、[次]をクリックします。ホスト名は、適当に設定します。
  15. 時刻設定で、‘アジア/東京’を選択し、‘システムクロックでUTCを使用’をチェックし、[次]をクリックします。
  16. パスワード設定で、適当なパスワードを指定し、[次]をクリックします。
  17. パッケージ選択画面で、すべてのチェックを外し、‘今すぐカスタマイズする’を選択し、[次]をクリックします。
  18. パッケージ選択画面で、以下の通りパッケージを選択し、[次]をクリックします。
    • アプリケーション
      ■エディタ
    • 開発
      ■開発ツール
    • ベースシステム
      ■ベース (firstboot-tuiを明示的に外す)
      ※firstboot-tuiは、最初にCentOSのセットアップをするためのパッケージ
    • 言語
      ■イギリス語のサポート
      ■日本語のサポート
  19. [次]をクリックします。
  20. [再起動]をクリックします。
インストールとしては、以上です。パッケージの内容等は精査できていないので、インストール後の設定で、追加設定をしながら確認します。

2008年7月11日金曜日

ssh鍵認証 No.001(Linuxで鍵作成)

sshで鍵認証する場合の一例です。

  1. ssh-keygen で id_rsa と id_rsa.pub を作成します。
    適当なパスフレーズを入力して作成します。
    ssh-keygen -t rsa -b 2048
  2. id_rsa.pub を authorized_keys に追加します。
    cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
  3. id_rsa を 接続するターミナルソフト側で読み込みます。
    • PuTTYでは、id_rsa を PuTTYgen で private key として保存します。
  4. ターミナルソフトで接続時に id_rsa を指定して接続します。
    • PuTTYでは、private key として保存した、id_rsa.ppk 等を指定します。
    • TeraTermでは、id_rsa をそのまま鍵として指定します。
ちなみに、鍵認証を利用するメリットは、何でしょうか。まあ、「鍵を持ってないと認証を受けられない」という当たり前のことに加え、パスワードがネットワーク上を流れないことでしょうか。パスワードがネットワーク上を流れないことについては、sshを使っている時点で、暗号化されている為、個人的には必要十分だと思いますが、それよりもセキュリティ的には堅牢です。(解読対象がネットワークを流れないわけですから。)

といってしまうと、確かに鍵認証は、パスワード認証に比べて、より強固なセキュリティを提供してくれるわけですが、大きな落とし穴があります。それは、パスワード認証と併用していると、鍵認証よりも低いセキュリティレベルの認証ができてしまい、パスワード認証可能な環境であれば、「鍵を持っていなくても認証ができる」→「誰でもアタックできる」状態となってしまいます。

以下の様に、sshd_config で、パスワード認証を禁止しておかないとメリットは半減です。
PasswordAuthentication no