○ OpenSSH (chroot+sftponly) の設定

*chroot環境でsftp(openssh)接続を行います
*openssh-5.5p1の"ChrootDirectory"を使います
*専用の秘密鍵・公開鍵を使用します
*間違ってもrootの秘密鍵を渡さないこと

*公開サーバで使う場合は、ローカル環境で十分実証して下さい

**以降はコメントです
*ソースの取得、削除は略します
*エディタ、ファイラーの操作は省略します
*Enterキーを省略します

*ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
*設定ファイルで "#" で始まる行はコメントとして解釈されます

○参照ファイル

パッケージの追加
最初の設定 (Xen)
OpenSSHのインストール
OpenSSH (chroot+sshlogin) の設定

○仮設定

:サーバ venus.528p.com
:OS CentOS 5.5
:openssh 5.5p1
:selinx disabled or permissive
:作業 /root 一部 /home/umi
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行 一部 umiで実行


:クライアント  mars.528p.com
:OS CentOS 5.5
:作業 /home/umi
:言語 LANG=en_US.UTF-8
:ユーザー umiで実行

*メンテナンスの場合は一般ユーザから行います



○chrootの設定

○sftp専用ユーザ・グループの設定

*仮定 一般ユーザ (umi) とします
*useraddに -M オプションをつけるとホームディレクトリを作成しません
*パスワードを設定しないと公開鍵認証でもエラーになります
*groupIDは/etc/groupファイルを参照して未使用の番号を使用します

# useradd -M -s /sbin/nologin umi
# passwd umi
New UNIX password:← パスワードを入力
Retype new UNIX password:← 再入力
# groupadd -g 103 sftponly
# gpasswd -a umi sftponly

○書き込み可能なディレクトリの作成

*chrootディレクトリの所有者はrootでなければなりません
*root権限でユーザのホームディレクトリ (chrootディレクトリ) を作ります
*同時にユーザの書き込み可能なディレクトリ (例 data) をつくります
*パーミッションに注意、chrootされないwheelグループのアクセスが可能

# mkdir -p /home/umi/{data,public_html}
# chown umi:umi /home/umi/{data,public_html}
# chmod 711 /home/umi/{data,public_html}

○configファイルの修正

*デフォルトから変更した部分を記述しています
*Matchは最終行に追加します、sftp接続のみの設定です
*sftp接続には、Subsystemとしてinternal-sftpを使います
紫色部分 パスワード認証を許可する場合 (rootは公開鍵認証)

:/etc/ssh/sshd_config

Port 22
AddressFamily inet
ListenAddress 0.0.0.0
AllowGroups wheel sftponly

SyslogFacility AUTHPRIV
PermitRootLogin without-password
RSAAuthentication no
PubkeyAuthentication yes
IgnoreUserKnownHosts yes
PasswordAuthentication no
ChallengeResponseAuthentication no
X11UseLocalhost no
PrintMotd no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,arcfour

Subsystem    sftp    internal-sftp

Match Group sftponly
    PasswordAuthentication yes
    AllowAgentForwarding no
    AllowTcpForwarding no
    ChrootDirectory /home/%u

○sshdの再起動

# service sshd restart



○公開鍵の作成とサーバへのコピー

○ローカルホスト上でDSA認証鍵を作ります

*ユーザのディレクトリに.sshディレクトリが作られます
*id_dsa (DSA秘密鍵) id_dsa.pub (DSA公開鍵) が収納されます

[umi@mars ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/umi/.ssh/id_dsa):← Enterキー
Created directory '/home/umi/.ssh'.
Enter passphrase (empty for no passphrase):← パスフレーズを入力
Enter same passphrase again: ← 再入力
Your identification has been saved in /home/umi/.ssh/id_dsa.
Your public key has been saved in /home/umi/.ssh/id_dsa.pub.
The key fingerprint is:
32:d5:15:a2:7e:9a:ee:0d:3d:80:3f:38:83:5a:f7:a0 umi@mars.528p.com
[umi@mars ~]$

○サーバ上でid_dsa.pub (DSA公開鍵) を登録します

*ローカルホストからサーバにid_dsa.pub (DSA公開鍵)を転送しておきます
*専用ディレクトリをつくり、公開鍵を専用ファイルに書き加えます
*ディレクトリとファイルのパーミッション・オーナーを変更します

[root@venus ~]# cd /home/umi
[root@venus ~]# mkdir .ssh
[root@venus ~]# cat id_dsa.pub >> .ssh/authorized_keys
[root@venus ~]# chmod 700 .ssh
[root@venus ~]# chmod 600 .ssh/authorized_keys
[root@venus ~]# chown -R umi:umi .ssh

○selinuxヘの対応 (selinuxが有効の場合)

:新規ファイルのselinuxラベルを修正

# restorecon -Rv /etc
# restorecon -RFv /home/umi

○sshによる接続

[umi@mars ~]$ ssh umi@venus.528p.com
/sbin/nologin: No such file or directory
Connection to venus.528p.com closed.
[umi@mars ~]$

○sftpによる接続

[umi@mars ~]$ sftp umi@venus.528p.com
Connecting to venus.528p.com...
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> pwd
Remote working directory: /
sftp> cd /home/sola
Couldn't canonicalise: No such file or directory
sftp> cd data
sftp> pwd
Remote working directory: /data
sftp> put openssh-5.5p1.tar.gz
Uploading openssh-5.5p1.tar.gz to /data/openssh-5.5p1.tar.gz
openssh-5.5p1.tar.gz           100% 1072KB   1.1MB/s   00:00
sftp> ls
openssh-5.5p1.tar.gz
sftp> exit
[umi@mars ~]

*wheelグループのユーザでsftp接続

[sola@mars ~]sftp sola@venus.528p.com
Connecting to venus.528p.com...
sftp> cd /home/umi/data
sftp> pwd
Remote working directory: /home/umi/data
sftp> ls
Couldn't get handle: Permission denied
sftp> exit
[sola@mars ~]

○ Copyright(c) 528p.com All Rights Reserved.