• コメントに対して連番を振る WordPress プラグイン

    仕事で必要だったので、コメントに対して連番をふるための WordPressのプラグイン 「 comment-numbering 」 を作ってみました。

    動作確認済 : WordPress 3.0

    comment-numbering.tar.gz

    1. 展開してcomment-numberingディレクトリごと wp-content/plugins の中に設置。
    2. 管理画面からプラグインを有効にする。
    3. テンプレート修正。連番を表示したい箇所に追記。
      <?php echo $comment->ctnb_comment_number; ?>
      
    4. コメントする。
      コメントを投稿すると連番が振られていきます。

  • MySQL-rootユーザーにパスワードを設定する

    MySQLのrootユーザーにパスワードを設定する。
    
    
    # mysqladmin -u root password "<新しいパスワード>"
    #
    

  • MySQLのインストール (yum)

    yumを使ってCentOSにMySQLをインストールします。

    ・MySQLサーバーとクライアントをインストールします。

    # yum install -y mysql mysql-server
    

    ・/etc/my.cnf 編集

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=1
    
    # Disabling symbolic-links is recommended to prevent assorted security risks;
    # to do so, uncomment this line:
    # symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    ↓文字化け対策のため2行追加
    
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=1
    
    default-character-set=utf8  # デフォルトのキャラセットをutf8に設定
    skip-character-set-client-handshake  # 余計な文字コード変換しない
    
    # Disabling symbolic-links is recommended to prevent assorted security risks;
    # to do so, uncomment this line:
    # symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    

    ・MySQLサーバー起動

    # service mysqld start
    

    ・OS起動時にMySQLも起動する。

    # chkconfig mysqld on
    

    [/text]


  • Xen – ホストOSに割り当てるメモリを設定する方法

    XenのホストOS (domain0) に割り当てるメモリを設定する方法。

    OS起動時にホストOSのメモリを設定する方法。

    ・/boot/grub/grub.conf
    # 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/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-164.15.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.15.1.el5
        module /vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.15.1.el5xen.img
    title CentOS (2.6.18-164.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.el5
        module /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.el5xen.img
    

    ↓ 割り当てメモリを指定

    # 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/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-164.15.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.15.1.el5 dom0_mem=300M
        module /vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.15.1.el5xen.img
    title CentOS (2.6.18-164.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.el5
        module /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.el5xen.img
    

    そして再起動します。


  • rssh完全インストール – SCP/SFTPをchrootしよう!part.4ブロックデバイス

    << | 1 | 2 | 3 | 4 |

    最後にブロックデバイスを作成します。

    chroot に /dev/null と /dev/log が必要です。
    /dev/null は環境に合わせて mknod コマンドで作成します。

    # ls -lL /dev/null
    crw-rw-rw- 1 root root 1, 3 1月 8 18:26 /dev/null
    # mknod /usr/local/rsshchrootskel/dev/null c 1 3
    # chmod 666 /usr/local/rsshchrootskel/dev/null
    

    テストユーザーの方にも dev/null を反映させておきます。

    # cp -Rp /usr/local/rsshchrootskel/dev /home/hoge/
    

    リモートクライアントから転送してみます。

    $ scp -P 10022 scptest.txt hoge@jace:.
    hoge@jace's password:
    scptest.txt 100% 5 0.0KB/s 00:00
    

    成功です。

    最後に syslog の設定です。

    ■ syslog の設定

    syslogは、デーモンとしてシステムに常駐し、起動と共に /dev/log というソケットを用意します。
    各プログラムは /dev/log に記録したい情報を送信することで syslog を利用し、ロギングできます。
    rssh もsyslogを利用します。しかしながらchrootされた場合は /dev/log にはアクセスできません。
    そこで chroot/dev/log にもソケットを用意してやる必要があります。

    (CentOS 5.2)

    # service syslog stop
    カーネルロガーを停止中: [ OK ]
    システムロガーを停止中: [ OK ]
    # syslogd -a /home/hoge/dev/log
    

    これで /home/hoge/dev/log にsyslogのソケットが用意されるはずです。
    しかしこれでは /dev/log が消滅してしまいますし、serviceで起動した際は適用されません。
    syslogの設定ファイルを修正し対応します。

    # vi /etc/sysconfig/syslog
    

    修正前
    ・/etc/sysconfig/syslog

    SYSLOGD_OPTIONS="-m 0"
    

    ↓修正

    SYSLOGD_OPTIONS="-m 0 -a /home/hoge/dev/log"
    

    ・再起動

    # service syslog restart
    

    これで /dev/log を消滅させることなく /home/hoge/dev/log にsyslogのソケットを用意できます。
    新たなchroot ユーザーを追加するごとに -a オプションを追加することになります。

    最後に

    ■ etc/passwd ファイルについて

    mkchroot.sh によって/etc/passwd ファイルもchrootのスケルトンディレクトリにコピーされていますが、セキュリティの為利用ユーザー以外の情報は削除しておきましょう。

    ■ WinSCPを利用する場合

    WinSCPは内部コマンドを実行しているようですので、使う場合はsftpモードと設定して、SFTPでファイル転送を行わなければならないらしいです。

    << | 1 | 2 | 3 | 4 |


  • rssh完全インストール – SCP/SFTPをchrootしよう!part3 chroot用意

    << | 1 | 2 | 3 | 4 | >>

    今回はchrootディレクトリを用意していきます。

    chrootを用意すると言ってもディレクトリを作成するだけではありません。
    rsshは、サーバーに接続した後にいくつかのコマンドを実行します。SCPを利用する場合はscpコマンドが、SFTPを利用する場合はsftp-serverコマンドがそれぞれ必要になります。rsyncやその他の機能を使う場合はそれらのコマンドも必要になります。しかし、chrootするとそのディレクトリより下層しか参照できず、
    scpコマンドやsftp-serverコマンドが実行できなくなります。したがって必要なコマンドやファイルをchrootされたディレクトリに設置してやる必要があります。注意点は、ノーマル時と chroot時でディレクトリの構成が変わらないように設置しなければなりません。

    ■ chrootスケルトンディレクトリの作成

    chroot ユーザーを追加する度にコマンド/ファイルをコピーするのは面倒なので、あらかじめ必要なものを詰め込んだ スケルトンディレクトリ を作成します。

    # mkdir /usr/local/rsshchrootskel/
    

    とします。

    そしてchrootに必要なファイルは、ディレクトリ構成を変えずにスケルトンディレクトリにコピーします。
    例) # cp /usr/bin/scp /usr/local/rsshchrootskel/usr/bin/scp

    しかし実際にはcpコマンドでコピーはせずrsshに付属のchrootを作成するためにmkchroot.shというシェルスクリプトを使います。
    <path to script>/mkchroot.sh

    mkchroot.sh で必要なファイルを指定したディレクトリにコピーしてくれます。しかし、configure等によって動的に作成されたスクリプトではありませんので、 –prefix等のオプションを意識していません。何ヶ所か修正が必要になります。

    それぞれのパスを正しく設定します。

    修正前
    ・mkchroot.sh

    scp_path="/usr/bin/scp"
    sftp_server_path="/usr/libexec/openssh/sftp-server"
    rssh_path="/usr/bin/rssh"
    chroot_helper_path="/usr/libexec/rssh_chroot_helper"
    

    ↓修正

    scp_path="/usr/bin/scp"
    sftp_server_path="/usr/libexec/openssh/sftp-server"
    rssh_path="/usr/local/bin/rssh"
    chroot_helper_path="/usr/local/libexec/rssh_chroot_helper"
    

    私の環境の場合、パスの修正は2ヶ所の修正でした。
    scp_path と sftp_server_path が正しくない場合は、そちらも正しいパスに修正します。

    そして、これは多分バグです。ここを修正しないと mkchroot.sh を実行したときにエラーで止まります。
    $rssh_pathを作成するロジックを追加します。

    修正前
    ・mkchroot.sh 103行目

    for jail_path in `dirname "$jail_dir$scp_path"` `dirname "$jail_dir$sftp_server_path"` `dirname "$jail_dir$chroot_helper_path"`; do
    

    ↓修正

    for jail_path in `dirname "$jail_dir$scp_path"` `dirname "$jail_dir$sftp_server_path"` `dirname "$jail_dir$rssh_path"` `dirname "$jail_dir$chroot_helper_path"`; do
    

    mkchroot.sh は完成です。さっそくスケルトンディレクトリを作成してみます。
    mkchroot.sh でコピーされるファイルは、コマンドが4つとそれらに必要なライブラリ、あとは/etc/passwd等のファイルです。

    # bash mkchroot.sh /usr/local/rsshchrootskel
    
    NOT changing owner of root jail.
    NOT changing perms of root jail.
    setting up /usr/local/rsshchrootskel/usr/bin
    setting up /usr/local/rsshchrootskel/usr/libexec/openssh
    setting up /usr/local/rsshchrootskel/usr/local/bin
    setting up /usr/local/rsshchrootskel/usr/local/libexec
    Copying libraries for /usr/bin/scp.
    (0x00284000)
    cp: cannot stat `(0x00284000)': そのようなファイルやディレクトリはありません
    /lib/libresolv.so.2
    /lib/libcrypto.so.6
    /lib/libutil.so.1
    /usr/lib/libz.so.1
    /lib/libnsl.so.1
    /lib/libcrypt.so.1
    /usr/lib/libgssapi_krb5.so.2
    /usr/lib/libkrb5.so.3
    /usr/lib/libk5crypto.so.3
    /lib/libcom_err.so.2
    /usr/lib/libnss3.so
    /lib/i686/nosegneg/libc.so.6
    /lib/libdl.so.2
    /usr/lib/libkrb5support.so.0
    /lib/libkeyutils.so.1
    /usr/lib/libnssutil3.so
    /usr/lib/libplc4.so
    /usr/lib/libplds4.so
    /usr/lib/libnspr4.so
    /lib/i686/nosegneg/libpthread.so.0
    /lib/libselinux.so.1
    /lib/libsepol.so.1
    Copying libraries for /usr/libexec/openssh/sftp-server.
    (0x0015b000)
    cp: cannot stat `(0x0015b000)': そのようなファイルやディレクトリはありません
    /lib/libresolv.so.2
    /lib/libcrypto.so.6
    /lib/libutil.so.1
    /usr/lib/libz.so.1
    /lib/libnsl.so.1
    /lib/libcrypt.so.1
    /usr/lib/libgssapi_krb5.so.2
    /usr/lib/libkrb5.so.3
    /usr/lib/libk5crypto.so.3
    /lib/libcom_err.so.2
    /usr/lib/libnss3.so
    /lib/i686/nosegneg/libc.so.6
    /lib/libdl.so.2
    /usr/lib/libkrb5support.so.0
    /lib/libkeyutils.so.1
    /usr/lib/libnssutil3.so
    /usr/lib/libplc4.so
    /usr/lib/libplds4.so
    /usr/lib/libnspr4.so
    /lib/i686/nosegneg/libpthread.so.0
    /lib/libselinux.so.1
    /lib/libsepol.so.1
    Copying libraries for /usr/local/bin/rssh.
    (0x0091d000)
    cp: cannot stat `(0x0091d000)': そのようなファイルやディレクトリはありません
    /lib/i686/nosegneg/libc.so.6
    Copying libraries for /usr/local/libexec/rssh_chroot_helper.
    (0x0085e000)
    cp: cannot stat `(0x0085e000)': そのようなファイルやディレクトリはありません
    /lib/i686/nosegneg/libc.so.6
    copying name service resolution libraries...
    tar: メンバ名から先頭の `/' を取り除きます
    tar: /lib/libnss1_files*: stat 不能: そのようなファイルやディレクトリはありません
    tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました
    lib/libnss_files-2.5.so
    lib/libnss_files.so.2
    Setting up /etc in the chroot jail
    cp: omitting directory `/etc/ld.so.conf.d'
    Chroot jail configuration completed.
    
    NOTE: if you are not using the passwd file for authentication,
    you may need to copy some of the /lib/libnss_* files into the jail.
    
    NOTE: you must MANUALLY edit your syslog rc script to start syslogd
    with appropriate options to log to /usr/local/rsshchrootskel/dev/log. In most cases,
    you will need to start syslog as:
    
    /sbin/syslogd -a /usr/local/rsshchrootskel/dev/log
    
    NOTE: we make no guarantee that ANY of this will work for you... if it
    doesn't, you're on your own. Sorry!
    
    

    4つほどエラーが発生しています。mkchroot.shではchrootに必要なコマンドをコピーしていますが、それらのコマンドに必要なライブラリ一式も同様にコピーしています。
    このエラーの後始末をしないとSCP/SFTPでログインしても直ぐに切断されてしまう挙動になります。

    運良くエラーが発生しなかった方は「■テストユーザーでデバッグ」まで読み飛ばしてしまってください。

    ■ chrootスケルトンディレクトリの作成 – いくつかのエラーが出た場合

    いくつかのエラーが発生した場合、手動で処理しないと
    クライアント側でこんなエラー

    $ scp test.txt hogea@hostname:.
    hogea@hostname password:
    lost connection
    

    とか、
    サーバー側でこんなエラー

    # grep rssh /var/log/messages
    Jan 9 12:41:04 web00 rssh[10757]: setting log facility to LOG_USER
    Jan 9 12:41:04 web00 rssh[10757]: allowing scp to all users
    Jan 9 03:41:04 web00 rssh_chroot_helper[10757]: new session for hoge, UID=1002
    Jan 9 12:41:04 web00 rssh[10757]: allowing sftp to all users
    Jan 9 03:41:04 web00 rssh_chroot_helper[10757]: user's home dir is /home/hoge
    Jan 9 12:41:04 web00 rssh[10757]: setting umask to 022
    Jan 9 03:41:04 web00 rssh_chroot_helper[10757]: couldn't find /home/hoge in chroot jail
    Jan 9 12:41:04 web00 rssh[10757]: line 54: configuring user hoge
    Jan 9 03:41:04 web00 rssh_chroot_helper[10757]: chrooted to /home/hoge
    Jan 9 12:41:04 web00 rssh[10757]: setting hoge's umask to 022
    Jan 9 03:41:04 web00 rssh_chroot_helper[10757]: changing working directory to / (inside jail)
    Jan 9 12:41:04 web00 rssh[10757]: allowing scp to user hoge
    Jan 9 03:41:04 web00 rssh_chroot_helper[10757]: execv() failed, /usr/bin/scp: No such file or directory
    Jan 9 12:41:04 web00 rssh[10757]: allowing sftp to user hoge
    Jan 9 12:41:04 web00 rssh[10757]: chrooting hoge to /home/hoge
    Jan 9 12:41:04 web00 rssh[10757]: chroot cmd line: /usr/local/libexec/rssh_chroot_helper 1 "scp -t ."
    

    とか言われて後で苦しむことになります。
    今のうちに片付けておきましょう。

    すべてのファイルがコピーされたかを確認していきます。
    では、1つ1つ確認していきます。
    まずは、mkchrootによってコピーされなければならないファイルです。

    ———- コピーされるファイル ———-
    —– コマンド —–
    ・/usr/bin/scp
    ・/usr/libexec/openssh/sftp-server
    ・/usr/local/bin/rssh
    ・/usr/local/libexec/rssh_chroot_helper
    —– ライブラリ —–
    コマンドに必要なライブラリ
    # ldd コマンドのフルパス
    で確認できます。
    —– ファイル —–
    ・/etc/passwd
    ・/etc/nsswitch.conf
    ・/etc/ld.so.conf
    ・/etc/ld.so.cache
    ——————–

    ■ chrootスケルトンディレクトリの作成 – コマンドの有無

    まずはコマンドの有無から確認していきます。

    # ls /usr/local/rsshchrootskel/usr/bin/scp
    /usr/local/rsshchrootskel/usr/bin/scp
    
    # ls /usr/local/rsshchrootskel/usr/libexec/openssh/sftp-server
    /usr/local/rsshchrootskel/usr/libexec/openssh/sftp-server
    
    # ls /usr/local/rsshchrootskel/usr/local/bin/rssh
    /usr/local/rsshchrootskel/usr/local/bin/rssh
    
    # ls /usr/local/rsshchrootskel/usr/local/libexec/rssh_chroot_helper
    /usr/local/rsshchrootskel/usr/local/libexec/rssh_chroot_helper
    

    私の環境ではすべてコピーされていました。
    (CentOS 5.2)
    存在しなかった場合は、手動でスケルトンディレクトリにコピーしてください。
    例)# cp /usr/bin/scp /usr/local/rsshchrootskel/usr/bin/scp

    ■ chrootスケルトンディレクトリの作成 – ライブラリの有無

    次は、ライブラリを確認していきます。

    # ldd /usr/bin/scp
    linux-gate.so.1 => (0x00198000)
    libresolv.so.2 => /lib/libresolv.so.2 (0x00341000)
    libcrypto.so.6 => /lib/libcrypto.so.6 (0x007ba000)
    libutil.so.1 => /lib/libutil.so.1 (0x00459000)
    libz.so.1 => /usr/lib/libz.so.1 (0x00110000)
    libnsl.so.1 => /lib/libnsl.so.1 (0x006f1000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x00259000)
    libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00d63000)
    libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00659000)
    libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x005fb000)
    libcom_err.so.2 => /lib/libcom_err.so.2 (0x0036e000)
    libnss3.so => /usr/lib/libnss3.so (0x0045d000)
    libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x008ed000)
    libdl.so.2 => /lib/libdl.so.2 (0x00123000)
    libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00127000)
    libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00130000)
    libnssutil3.so => /usr/lib/libnssutil3.so (0x00133000)
    libplc4.so => /usr/lib/libplc4.so (0x0014b000)
    libplds4.so => /usr/lib/libplds4.so (0x0014f000)
    libnspr4.so => /usr/lib/libnspr4.so (0x00152000)
    libpthread.so.0 => /lib/i686/nosegneg/libpthread.so.0 (0x00199000)
    /lib/ld-linux.so.2 (0x00b8d000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x001b0000)
    libsepol.so.1 => /lib/libsepol.so.1 (0x001c8000)
    

    「=>」の右に表示されたライブラリが、そのコマンドに必要なものです。コピーされたかを確認していきます。

    # ls /usr/local/rsshchrootskel/lib/libresolv.so.2
    /usr/local/rsshchrootskel/lib/libresolv.so.2 (存在します
    # ls /usr/local/rsshchrootskel/lib/libcrypto.so.6
    /usr/local/rsshchrootskel/lib/libcrypto.so.6 (存在します
    ...
    ...
    

    このようにしてすべてのライブラリに対して存在を確認していきます。
    存在しないものがあれば、こちらもまたディレクトリ構成を壊さないようにchrootディレクトリにコピーします。
    私の環境の場合、「=>」の右側に/lib/**とか /usr/lib/** と、パスが表示されているライブラリに関しては問題なくコピーされていましたが、「=>」が表示されていないものに関してはコピーされていませんでした。1行目や、最後から3行前の赤い行です。その為にmkchroot.shもコピーに失敗していたようです。これらのライブラリもchrootに必要ですから手動でコピーします。

    # find / -name 'linux-gate.so.1'
    # find / -name 'ld-linux.so.2'
    /lib/ld-linux.so.2
    

    「linux-gate.so.1」の方は存在していなかったのでコピーしなくても問題ありません。
    「ld-linux.so.2」の方はコピーします。
    ディレクトリ構成を壊さないように注意。

    # mkdir -p /usr/local/rsshchrootskel/lib
    # cp /lib/ld-linux.so.2 /usr/local/rsshchrootskel/lib/
    

    この様にして、他3つのコマンドすべてのライブラリを確認してください。コピーされていなければコピーしてください。
    私の環境では、足りないライブラリは「ld-linux.so.2」のみでした。

    コピーも一通り完了したらテストにはいります。

    ■ テストユーザーでデバッグ

    ユーザーを追加してテストを行います。

    # adduser -s /usr/local/bin/rssh -d /home/hoge hoge
    # passwd hoge
    Changing password for user hoge.
    New UNIX password: hogehoge
    Retype new UNIX password: hogehoge
    passwd: all authentication tokens updated successfully.
    

    chrootスケルトンディレクトリをユーザーのホームディレクトリにコピーします。

    # cp -Rp /usr/local/rsshchrootskel/* /home/hoge/
    

    ここまで来たらほぼ完了です。リモートのクライアントから接続ができるかを確かめましょう。

    $ scp scptest.txt hoge@hogename:.
    hoge@hostname's password: ← パスワードを入力
    Couldn't open /dev/null: No such file or directorylost connection
    

    このエラーが表示されたらchrootは成功です。ファイルの転送はされてはいないものの chroot/dev/null を設置すれば動作するようになります。
    残念ながら「lost connection」というエラーメッセージが表示されてしまった場合は、chrootに何らかのファイルが足りない可能性が高いです。必要なコマンドやライブラリ、ファイルがコピーされているかをもう一度お確かめください。

    << | 1 | 2 | 3 | 4 | >>


  • rssh完全インストール – SCP/SFTPをchrootしよう!part.2 基本設定

    << | 1 | 2 | 3 | 4 | >>

    今回は、rssh の設定に入ります。
    rssh の設定はやや複雑です。

    まずは、設定ファイルの修正から。

    # vi /usr/local/etc/rssh.conf
    

    ■ 提供する機能の選定
    使いたい機能からコメントアウトを外します。

    ・rssh.conf

    allowscp
    allowsftp
    #allowcvs
    #allowrdist
    #allowrsync
    

    今回はSCPとSFTPを使う。

    ■ umaskの設定

    ・rssh.conf

    umask = 022
    

    アップロード後のパーミッション。
    通常は 022で問題ありません。

    ■ chrootpathの設定
    ここで指定したパスは、SCP/SFTPで接続された時のルートディレクトリとなります。
    クライアントはこのディレクトリより上層へ移動できません。

    ・rssh.conf

    chrootpath = /usr/local/chroot
    

    パスにスペースが含まれる場合はクォートで囲みます。

    ・rssh.conf

    chrootpath = "/usr/local/my chroot"
    

    chrootpath では、すべてのユーザーで共通で使われる設定です。
    ユーザーごとにchrootディレクトリや提供コマンドを変えたい場合は、次のような行を追加します。

    ・rssh.conf

    user=hoge:022:00011:/home/webusers/hoge
    user=hogehoge:022:00011:/home/webusers/hogehoge
    

    フォーマット: user=username:umask:access bit:chrootpath

    1ユーザーにつき1行追加します。

    アクセスビットは5個の 0/1 で、1 はコマンドが許可され、0 は許可されないことを意味します。
    左から、rsync, rdist, cvs, sftp, scp の順です。

    設定ファイルの修正は以上です。

    rssh.confの詳細は、man rssh.conf をご参照ください。

    ■ ログインシェルの変更/設定

    そして適用するユーザーのログインシェルを rssh 設定する必要があります。
    rsshは、サーバーデーモンとしてではなくログインシェルとして動作しますので、対象のユーザーのログインシェルを /usr/local/bin/rssh に変更する必要があります。

    その前に rssh を利用可能なログインシェルとしてOSに登録します。

    # echo "/usr/local/bin/rssh" >> /etc/shells
    

    *)CentOS/Fedora/RH/*BSD でも同じです。

    新しくユーザーを追加する場合は adduser に -s オプションでログインシェルを指定します。

    # adduser -s /usr/local/bin/rssh hoge
    

    (ユーザー追加コマンドはプラットフォーム毎に異なります)

    既存のユーザーに適用する場合は chsh を使います。

    # chsh -s /usr/local/bin/rssh hoge
    

    次回は chroot 必要なファイルを用意します。

    << | 1 | 2 | 3 | 4 | >>


  • rssh完全インストール – SCP/SFTPをchrootしよう!part.1 インストール

    OS : CentOS 5.2 i386 (Fedora / RH* / *BSD でもいけるはず)

    | 1 | 2 | 3 | 4 | >>

    rsshとは。

    ネットワークを介してファイル転送をしたい。
    しかし、FTPだとセキュリティに問題があるし、SSHのSCP/SFTPだとリモートシェルまで許してしまう。
    そんな時に使うものが rssh です。

    次のような要件の時に使います。

    ・FTPではセキュリティ面で問題がある。
    ・SCP/SFTPを使いたいがSSHではリモートシェルまで提供してしまう。

    rsshは、これらの要件を満たしてくれます。
    SSHのSCP/SFTPの機能、そしてOpenSSLで暗号さされたrsync, rdist, cvsを実装したもので、SSHのリモートシェルは許しません。
    更にchrootまで設定できます。
    (chroot:特定のディレクトリをルートディレクトリと見せる)

    セキュアなサーバーを構築したい時には便利です。

    ■ インストール

    # wget http://www.pizzashack.org/rssh/src/rssh-2.3.0.tar.gz
    # tar zxvf rssh-2.3.0.tar.gz
    # cd rssh-2.3.0
    # ./configure
    

    (–prefix=/usr/local/rssh を指定すると、後で mkchroot.sh を修正しなければならなくなる。)

    成功すると /usr/local にインストールされます。

    次回は、設定に入ります!

    | 1 | 2 | 3 | 4 | >>


  • configureでコケる

    configureがエラーを吐き停止する。

    # ./configure --prefix=****
    ...
    ...
    checking build system type... Invalid configuration `i686-pc-linux-': machine `i686-pc-linux' not recognized
    
    

    –build オプションにアーキテクチャを指定すると回避できる事がある。

    # ./configure --build=i686 --prefix=****
    

    もちろんアーキテクチャによって値を変える。


  • Apache2.2+PHP5.2 完全インストール – part2 – PHPインストール

    今回は PHP5.2 系列のインストールです。

    対象OS : CentOS, RH*, Fedora, FreeBSD, NetBSD, OpenBSD

    ※)途中 yum コマンドを使います。*BSD系OSの場合は yumの変わりにPortsツリーを使いインストールしてください。

    Apacheのインストール は 前回で済んでいるものとします。

    ■準備

    # cd /usr/local/src/web
    # tar zxvf php-5.2.8.tar.gz
    ...
    ...
    ...
    # cd php-5.2.8
    

    ■インストール

    # ./configure \
    --prefix=/usr/local/php5 \
    --with-apxs2=/usr/local/apache2/bin/apxs \
    --without-sqlite \
    --enable-mbstring \
    --enable-zend-multibyte \
    --enable-ftp \
    --enable-sockets \
    --with-mysql=/usr/local/mysql5 \
    --with-gd \
    --with-jpeg-dir \
    --with-png-dir \
    --with-freetype-dir \
    --with-zlib \
    --with-openssl
    

    ===============configureオプションの解説===============
    –prefix=/usr/local/php5 : インストール場所を指定
    –with-apxs2=/usr/local/apache2/bin/apxs :インストール済みのApacheと連動させる。
    (DSOもジュールを作成する)
    –without-sqlite :SQLiteを使わない
    –enable-mbstring :マルチバイト関数をインストールする
    –enable-zend-multibyte :Zendのマルチバイトエンジンを有効にする
    –enable-ftp :FTPプロトコルをサポートする
    –enable-sockets :socketをサポートする(HTTPとか)
    –with-mysql=/usr/local/mysql5 :MySQLをサポートする
    –with-gd :DBエンジンをサポートする
    –with-jpeg-dir :Jpegライブラリをサポートする
    –with-png-dir :pngライブラリをサポートする
    –with-freetype-dir :FreeTypeをサポートする
    –with-zlib :zLibをサポートする
    –with-openssl :SSLをサポートする (HTTPSとか)
    ==============================

    ■エラー:その1

    ...
    checkig libxml2 install dir... no
    checking for xml2-config path...
    configure: error: xml2-config not found. Please check your libxml2 installation.
    #
    

    PHP5のインストールには xml2ライブラリが必要です。 libxml2のライブラリとソースファイルをインストールします。

    # yum install -y libxml2 libxml2-devel
    

    ■エラー:その2

    ...
    checking for fabsf... yes
    checking for floorf... yes
    configure: error: libjpeg.(a|so) not found.
    #
    

    libjpegライブラリが見つかりません。インストールします。

    # yum install -y libjpeg libjpeg-devel
    

    ■エラー:その3

    ...
    checking for floorf... yes
    checking for jpeg_read_header in -ljpeg... yes
    configure: error: libpng.(a|so) not found.
    #
    

    libpngライブラリが見つかりません。インストールします。

    # yum install -y libpng libpng-devel
    

    ■エラー:その4

    ...
    checking for jpeg_read_header in -ljpeg... yes
    checking for png_write_image in -lpng... yes
    If configure fails try --with-xpm-dir=<DIR>
    configure: error: freetype.h not found.
    #
    

    freetype.h が見つかりません、FreeTypeのライブラリ+ヘッダファイルをインストールします。

    # yum install -y freetype freetype-devel
    
    ...
    checking for MySQL support... yes
    checking for specified location of the MySQL UNIX socket... no
    checking for MySQL UNIX socket location... no
    configure: error: Cannot find MySQL header files under /usr/local/mysql5.
    Note that the MySQL client library is not bundled anymore!
    #
    

    MySQL clientのヘッダファイルが見つかりません。–with-mysql で指定したディレクトリにMySQLがインストールされていない可能性があります。

    ※)MySQL は、内容が複雑ですので ソースからインストールする事が多くなっています。ソースからインストールされた場合は、MySQLのconfigureに指定した –prefix を –with-mysql= に指定してください。

    一応 yum からインストールする方法を記載します。

    # yum install mysql mysql-server mysql-devel
    

    ■コンパイル/インストール

    # make
    # make test
    # make install
    

    ・設定ファイルを設置

    # cp php.ini-dist /usr/local/php5/lib/php.ini
    

    ■設定

    ・AddTypeの追記

    インストールが完了すると、Apacheの httpd.conf に一行の記述が追加されます。

    ・httpd.conf

    LoadModule php5_module modules/libphp5.so
    

    ↓手動で1行追加

    LoadModule php5_module modules/libphp5.so
    AddType application/x-httpd-php .php .phtml
    

    この AddType では、どのような拡張子をPHPとして扱うかを指定します。
    .php という拡張子のファイルを PHPで処理させたければ、ここに .php と指定します。

    ・SELinux の設定

    そのままでは、Apache が libphp5.so を読み込む処理が SELinux によって抑制されてしまい、起動できません。

    # service httpd start
    
    httpd を起動中: httpd: Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
    [失敗]
    #
    

    libphp5.so に対してのアクセスを許可します。

    # chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache2/modules/libphp5.so
    

    後は、サーバー固有の設定になりますので、 httpd.conf や php.ini などを用途に見合った設定にすれば終了です。
    お疲れ様でした。

    << | 1 | 2 |