• CentOS7 + MySQLでエラー

    CentsOS7 + MySQL5.6 をインストールしたらエラーが出た。

    
    Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
    
    

    エラーの内容を確認する。

    
    # systemctl status mysqld.service
    ● mysqld.service - SYSV: MySQL database server.
    <%%KEEPWHITESPACE%%> Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
    <%%KEEPWHITESPACE%%> Active: failed (Result: exit-code) since 水 2018-03-21 11:11:38 JST; 22s ago
    <%%KEEPWHITESPACE%%> Docs: man:systemd-sysv-generator(8)
    <%%KEEPWHITESPACE%%> Process: 1197 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)
    
    3月 21 11:11:38 localhost systemd[1]: Starting SYSV: MySQL dat...
    <%%KEEPWHITESPACE%%> 3月 21 11:11:38 localhost mysqld[1197]: /etc/rc.d/init.d/mysql…ん
    <%%KEEPWHITESPACE%%> 3月 21 11:11:38 localhost systemd[1]: mysqld.service: control ...
    <%%KEEPWHITESPACE%%> 3月 21 11:11:38 localhost systemd[1]: Failed to start SYSV: My...
    <%%KEEPWHITESPACE%%> 3月 21 11:11:38 localhost systemd[1]: Unit mysqld.service ente...
    <%%KEEPWHITESPACE%%> 3月 21 11:11:38 localhost systemd[1]: mysqld.service failed.
    Hint: Some lines were ellipsized, use -l to show in full.
    
    

    メッセージが最後まで表示されない。オプションをつけて最後まで表示する。

    
    # systemctl status mysqld.service -a
    ● mysqld.service - SYSV: MySQL database server.
    <%%KEEPWHITESPACE%%> Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
    <%%KEEPWHITESPACE%%> Active: failed (Result: exit-code) since 水 2018-03-21 11:12:16 JST; 2min 28s ago
    <%%KEEPWHITESPACE%%> Docs: man:systemd-sysv-generator(8)
    <%%KEEPWHITESPACE%%> Process: 1217 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)
    
    3月 21 11:12:16 localhost systemd[1]: Starting SYSV: MySQL database server....
    <%%KEEPWHITESPACE%%> 3月 21 11:12:16 localhost mysqld[1217]: /etc/rc.d/init.d/mysqld: 行 16: /etc/sysconfig/network: そのようなファイルやディレクトリはありません
    <%%KEEPWHITESPACE%%> 3月 21 11:12:16 localhost systemd[1]: mysqld.service: control process exited, code=exited status=1
    <%%KEEPWHITESPACE%%> 3月 21 11:12:16 localhost systemd[1]: Failed to start SYSV: MySQL database server..
    <%%KEEPWHITESPACE%%> 3月 21 11:12:16 localhost systemd[1]: Unit mysqld.service entered failed state.
    <%%KEEPWHITESPACE%%> 3月 21 11:12:16 localhost systemd[1]: mysqld.service failed.
    
    

    /etc/sysconfig/network ファイルが無いとの事でした。

    空ファイルを作れば解決しました。

    
    touch /etc/sysconfig/network
    
    

  • MySQLでインポート/エクスポートするための権限付与

    MySQLのコンソールからCSVにエクスポート、CSVからインポートする際に権限が無い、と叱られたので、FILE権限を付与し、ディスクへのアクセス権限をあたえる。
     
    
    エラー内容。
    
    
     -> INTO OUTFILE "~/mst_item_single.csv" FIELDS TERMINATED BY ','
     -> OPTIONALLY ENCLOSED BY '"';</pre>
    ERROR 1045 (28000): Access denied for user 'eccubemanager'@'localhost' (using password: YES)
    mysql> ;
    ERROR:
    No query specified
    

    MySQL のコンソールにて。

    GRANT FILE
    ON *.*
    TO hogehoge@localhost;
    

  • Samba3で一般的なファイルサーバー構築完全版 – その他設定 p.3

    << | 1 | 2 | 3 |

    前回でSambaサーバー自体の設定は完了しました。

    今回は、iptables設定や自動起動スクリプトの設置等、まわりの設定を行っていきます。

    (CentOS / Fedora / RH*の方のみ)
    まずは、使用するポートを開けましょう。

    使用するポートは、次の4つです。

    nmbd : 137/UDP、138/UDP
    smbd : 139/TCP、445/TCP

    nmbdは、マイネットワークでマシンをブラウジングする機能を提供します。
    smbdは、本来のファイル転送の機能を提供します。
    ファイル転送のみであれば、139/TCP(もしくは445/TCP)のみを開けば機能します。

    私は普段NetBIOS over TCP/IPしか使わないので139/TCPのみしか開放していませんが、4つ全てのポートを開けておけば確実でしょう。今回は紹介しませんが、SWATを利用される場合は 901/TCP も開いておきましょう。

    ■ iptablesの設定 (CentOS / Fedora / RH*)

    # vi /etc/sysconfig/iptables
    

    この行を追加
    ・ /etc/sysconfig/iptables

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137:138 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139:445 -j ACCEPT
    -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
    

    SWAT利用の場合は901/TCPも

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137:138 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139:445 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 901 -j ACCEPT
    -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
    
    
    # service iptables restart
    
    

    ■ ライブラリのパスを通す (CentOS / Fedora / RH*)

    ここまで来たら後はsambaを起動するだけですが、configure オプションに –prefixを設定したのでライブラリのパスが通っていない可能性があります。

    試しに nmbd を起動してみて次のようなエラーが出たらパスを通しましょう。

    # /usr/local/samba3/sbin/nmbd
    /usr/local/samba3/sbin/nmbd: error while loading shared libraries: libtalloc.so.1: cannot open shared object file: No such file or directory
    

    ライブラリのパスを通す。

    (CentOS / Fedora / RH*)
    # echo "/usr/local/samba3/lib" > /etc/ld.so.conf.d/samba.conf # ライブラリのパスを設定
    # ldconfig # パスをキャッシュ化する。 # 設定したパスを通す
    

    パスを通したら起動できるかを確認。
    無事にライブラリが読み込まれると起動します。

    
    # /usr/local/samba3/sbin/nmbd
    
    

    何も表示されなければ起動してます。
    起動したら止めておいてください。

    
    # killall nmbd
    
    

    ■ 動作確認

    nmbd、smbd を起動します。

    # /usr/local/samba3/sbin/nmbd
    # /usr/local/samba3/sbin/smbd
    

    起動したらWindowsからアクセスしてみます。
    マイコンピュータかIEを開いてアドレスバーのところに次のように入力します。

    \\[sambaサーバーのIPアドレス]\

    既にファイルサーバーとして機能するはずです。

    プロセスは一度落としておきます。

    
    # killall nmbd smbd
    
    

    ■ 自動起動スクリプト

    ■ OS起動時に起動してくれさえすればいい場合 (RHクローン/*Linux/*BSD)

    ・ vi /etc/rc.local

    # nmbd
    if [ -x /usr/local/samba3/sbin/nmbd ]; then
      /usr/local/samba3/sbin/nmbd -D
    fi
    # smbd
    if [ -x /usr/local/samba3/sbin/smbd ]; then
      /usr/local/samba3/sbin/smbd -D
    fi
    

    ■ RHのクローンをお使いでchkconfigでプロセスを管理したい場合。

    chkconfig用の起動スクリプト作成。

    ・ vi /etc/rc.d/init.d/samba

    
    #!/bin/sh
    #
    # Startup script for samba
    #
    # chkconfig: 345 85 15
    # description: samba
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    SMBD='/usr/local/samba3/sbin/smbd'
    NMBD='/usr/local/samba3/sbin/nmbd'
    
    SMBPID='/usr/local/samba3/var/locks/smbd.pid'
    NMBPID='/usr/local/samba3/var/locks/nmbd.pid'
    
    case "$1" in
    start)
      echo -n "Starting samba"
      $SMBD -D
      $NMBD -D
      echo
      ;;
    stop)
      echo -n "Shutting down samba"
      PIDS=`cat $SMBPID`
      PIDS="${PIDS} `cat $NMBPID`"
      kill $PIDS
      echo
      ;;
    restart)
      $0 stop
      $0 start
      ;;
    *)
      echo "Usage: $0 {start|stop|restart}"
    
    exit 1
      esac
    
    exit 0
    
    # chmod +x /etc/rc.d/init.d/samba
    # chkconfig --add samba # chkconfigに追加
    # service samba start # 起動してみる
    # ps ax | grep samba # 起動できてる?
    1737 ? Ss 0:00 /usr/local/samba3/sbin/smbd -D
    1739 ? Ss 0:00 /usr/local/samba3/sbin/nmbd -D
    1740 ? S 0:00 /usr/local/samba3/sbin/smbd -D
    1742 pts/0 S+ 0:00 grep samba
    
    # chkconfig samba on  # OS 起動時に service samba start を実行
    

    これで一通り作業は終了です。

    # service samba start
    # service samba stop
    

    でプロセスを管理できます。

    << | 1 | 2 | 3 |


  • Samba3で一般的なファイルサーバー構築完全版 – smb.conf設定 p.2

    << | 1 | 2 | 3 | >>

    Samba サーバーの設定に入ります。
    前回で SWAT も同時にインストールしましたが使いません。

    今回は、基本的なファイルサーバーを構築するのに最低限必要なパラメータのみしか設定しませんので、空のファイルから作成します。サーバーアプリケーションの本質/構造を手っ取り早く理解する為にもそちらの方が良いです。

    英語で説明が書かれたサンプルも用意されています。
    ./samba-3.2.7/examples/smb.conf.default

    ■ Samba用UNIXユーザの追加

    ファイルサーバー用にUNIXユーザーを追加します。
    ここで追加するユーザーは、ファイルがアップロードされた時にそのファイルの所有者として設定されます。
    ファイルサーバーのパス(ドキュメントルート)もこのユーザのホームディレクトリ内に設置することとします。

    # adduser -u 200 -d /home/samba samba
    

    ・共有フォルダ作成

    # mkdir /home/samba/public
    # chown samba /home/samba/public
    # chgrp samba /home/samba/public
    

    もし /var/samba/public ディレクトリをファイルサーバーのドキュメントディレクトリとしたければ、samba ユーザのホームディレクトリを /var/samba としてください。

    (/var/samba/public をドキュメントルートとする場合)
    # adduser -u 200 -d /var/samba samba
    # mkdir /var/samba/public
    # chown samba /var/samba/public
    # chgrp samba /var/samba/public
    

    ■ ログディレクトリの作成

    # mkdir /var/log/samba
    

    ■ 設定ファイルの作成

    # vi /usr/local/samba3/lib/smb.conf
    

    取り合えず完成形。

    ・/usr/local/samba3/lib/smb.conf

    [global]
    workgroup = MYGROUP
    server string = Samba Server
    security = share
    hosts allow = 192.168.200.
    unix charset = UTF-8
    dos charset = CP932
    netbios name = linux
    guest account = samba
    log file = /var/log/samba/log.%m
    max log size = 50
    dns proxy = no
    
    [public]
    path = /home/samba/public
    public = yes
    only guest = yes
    writable = yes
    

    1つずつ説明していきます。

    smb.conf には、「セッション」と「パラメータ」との2種類の要素が存在します。

    上記の設定内容だとセッションは、[global] と[public]という部分に当てはまります。global は特殊なセッションで、Sambaサーバー全般に関わる設定を記述する部分です。public は、Windows共有でいうところの共有フォルダとなります。このセッション名は任意です。publicでもshareでもmyspace構いません。
    共有フォルダは後からいくつでも増やすことができ、それに対するパスも自由に指定できます。

    そして、パラメータとは、それらのセッションに対して値を設定していくものです。
    work group や path がそれに当たります。

    では、それぞれ設定していきます。
    まずは global セッションから。

    ■ 設定ファイルの修正 – [global]セクション

    ■ workgroup : ワークグループ名

    NetBIOS (Windowsネットワーク) のワークグループ名を指定します。既存のWindowsクライアントと設定を合わせてください。大体「WORKGROUP」とか「MYGROUP」とか「HOME」とかになってます。

    ・確認する方法

    マイコンピュータ、右クリック => プロパティ
    -> 「システムのプロパティ」ダイアログボックスが表示されます。
    「コンピュータ名」タブをクリック
    ->「ワークグループ」と表示されます。

    それがNetBIOSのワークグループ名です。
    わかりやすい名前に変更しても良いでしょう。

    ■ server string : サーバーの説明

    「マイネットワーク」でネットワーク上のマシンを一覧表示した時に、サーバー名の下に表示されるコメントっぽい文字列です。

    ■ security : セキュリティモード

    認証なしのゲストユーザーのみで使用する場合は「share」を指定してください。
    PAMやsambapass等によってユーザ単位の認証機能を利用する場合は「user」を指定してください。

    ■ hosts allow : 許可ホスト

    その名の通り、接続を許可するホストです。
    192.168.1.* からの接続を許可したい場合は次の様に指定する。

     hosts allow = 127. 192.168.1.
    

    ※)最後のドットを忘れない事! 基本的にSambaは、NetBIOS over TCP/IP をサポートしているので、制限を掛けずにグローバルに出すと、全世界からアクセスが可能になります。ローカルに設置したとしてもセキュリティの為に hosts allow は設定しておきましょう。

    ■ unix charset : Unix文字セット

    Unix上の文字コードです。 日本語等のマルチバイトを含む名前のファイルやディレクトリを受信した際に、どの文字コードを使ってファイルシステムへ保存するか、という指定になります。 (※ファイルの中身ではありません。ファイル名です。)

     unix charset = UTF-8
    

    と指定した場合、WindowsクライアントからSambaサーバーに「てすと.txt」というファイルがアップロードされる時、Sambaはそのファイル名をCP932(日本語Shift-JIS)からUTF-8へ変換してからファイルシステムへ保存します。 UNIX上ではUTF-8で「てすと.txt」と保存される事になります。 unix charset に関しては、OSごとに合わせれば良いのではないでしょうか。 CentOS、Fedora、RH*等、デフォルトのローケルにUTF-8が使われているOSならば「UTF-8」を、FreeBSD、NetBSD、 OpenBSD等、デフォルトのローケルにEUC-JPが使われているOSならば「EUC-JP」を指定します。 とは言っても、無理にローケルに合わせなくても正常に動作はします。ただ、ローケル以外の文字コードを指定した場合、ターミナルから ls とした時に日本語が文字化けします。

    ■ dos charset : Dos文字セット

    Sambaがクライアントにファイルの一覧を出力する時に、どの文字コードを使って出力するか。という指定になります。 Windowsクライアントからファイルを参照したい場合は、 CP932(日本語Shift-JIS)を指定する必要があります。 クライアントが*BSDのみとか、Linuxのみの場合は、UTF-8やEUC-JP等で良いと思います。 いちいちCP932にコンバートする必要がなくなりますから。

    ■ netbios name : NetBIOS名

    Sambaサーバーに割り当てるNetBIOS名(コンピュータ名)です。

    ■ guest account : ゲストアカウント

    「samba用UNIXユーザの追加」で追加したUNIXユーザ名を指定します。

     guest account = samba
    

    「user=guest : pass=なし」というアカウントでログインした時にマップされるUnixユーザです。 マップされたユーザは、ファイルやディレクトリを保存する時に、その所有者として設定されるユーザとなります。

    ■ log file : ログファイル

    ログファイルを指定します。

     log file = /var/log/samba/log.%m
    

    「%m」にNetBIOS名が置き換えられます。 接続、読み取り、書き込み等の記録を保存します。

    ■ max log size : 最大ログサイズ

    log file パラメータに指定したログファイルの最大サイズをKB単位で指定します。

    ■ dns proxy : DNSプロキシ

    NetBIOS名をDNS経由で解決するか。 今回は特にセキュリティに神経質ならなくても良いような内容なので、 no にしています。

    ■ 設定ファイルの修正 – [public]セクション

    public セッションの設定です。 「public」という文字は任意です。share や myspace 等に変更しても構いません。

    ■ path

    共有フォルダのパス(ドキュメントルート)。 アップロードされたファイルの保存場所となります。 guest account で指定したUNIXユーザが書き込み可能である場所を指定する必要があります。(security = share時)

    ■ public ( = guest ok )

    パスワードなしでのアクセスを認める。securityに share 以外のパラメータを指定した場合、無視されます。

    ■ only guest

    ゲストアカウントでのみ接続を許可する

    ■ writable

    書き込みを許すか。yesにしないとファイルをアップロードできません。 次回は、その他設定、動作確認と自動起動設定です。

    << | 1 | 2 | 3 | >>


  • Samba3で一般的なファイルサーバー構築完全版 – インストール p.1

    | 1 | 2 | 3 | >>

    OS : CentOS, Fedora, RH*, *BSD

    Sambaでファイルサーバーを構築しましょう。

    Samba3.2からActiveDirectoryやドメインへの参加機能の強化、VISTAへの対応の強化が行われました。
    しかし、ただのファイル置き場用途でしか利用しない私には新機能は不要です。
    今回は、最低限の機能しか付けないインストール方法をご紹介します。

    設定に関しても SWAT 等の設定ツールは利用せず、設定ファイルを修正して構築していきます。

    まずは、インストール。

    ・インストール

    # cd /usr/local/src/
    # wget ftp://ftp.samba.gr.jp/pub/samba/samba-3.2.7.tar.gz
    

    ※)公式FTPから最新のパッケージを選択してください。
    ftp://ftp.samba.gr.jp/pub/samba/
    (2008/01/13現在ではsamba-3.2.7.tar.gzが最新)

    ・コンパイル~インストール

    # tar zxvf samba-3.2.7.tar.gz
    # cd samba-3.2.7/source
    # ./configure --prefix=/usr/local/samba3 --with-pam --enable-swat
    # make
    # make install
    

    /usr/local/samba3 へインストールされます。

    「–enable-swat」は、私は明示的に指定しているだけですが、default=yesですので 特に指定なしでも問題ありません。
    そして、認証機能の為に「–with-pam」も基本的に指定が必要です。
    PAMのソースファイルも必要となります。インストールされていない場合は事前にインストールしてください。

    # yum install pam-devel
    

    (CentOS / Fedora / RH*)

    ・Samba3.2 – よく使われそうなconfigureオプション

    –enable-swat : swatの有効化
    WEBベースのsamba設定GUIツールのインストール
    default : yes

    –enable-cups : プリンタサポートの有効化
    default : auto

    –with-pam : PAMサポート
    PAMサポートの有効化。
    default : no

    –with-syslog : syslogのサポート
    syslogサポート。/var/log/message, secure等にエラーを出力。
    default : no

    –with-quotas : ディスククォータサポート
    容量制限
    default : no

    –with-sys-quotas : システムクォータサポート
    容量制限
    default : auto

    次はファイルサーバーの設定です。

    | 1 | 2 | 3 | >>


  • 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]


  • 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 | >>