
Ubuntu日本語フォーラム

ログインしていません。
皆さん、こんばんは。
SFTP環境を構築するためにubuntu server 12.04.2 x86_64版環境で手順確認、問題点の洗い出しをしています。
SFTP環境の実現のためには以下の3点について課題をクリアする必要があり、そのためにrsshを併用するつもりです。
1)SFTPの使用にあたり、ユーザにはSFTP専用とする(シェルログインは切断する)
2)SFTP専用ユーザはホームディレクトリより上位の階層に移動できない
3)SFTP用ホームディレクトリは/home以外の場所で集約したい
しかし、いざ設定が終わってテストをしてみるとログインした瞬間に切断されてしまう様子です。
どうしても解決策が見つからず、こちらでご相談した次第です。
大変恐縮でありますが、どうかよろしくお願いいたします。
実施した環境構築の手順は以下の通りです。
1)ビルド環境の用意
$sudo aptitude install g++ build-essential
2)sshをインストール
$sudo aptitude install ssh
$sudo vi /etc/ssh/sshd_config
/etc/ssh/sshd_configの編集内容
PermitRootLogin yes → PermitRootLogin no
$sudo /etc/init.d/ssh restart
3)rsshをインストール
$cd
$wget http://prdownloads.sourceforge.net/rssh/rssh-2.3.4.tar.gz
$tar zxvf rssh-2.3.4.tar.gz
$cd rssh-2.3.4
$./configure --with-scp --with-sftp-server --with-cvs --with-rdist --with-rsync
$make
$sudo make install
4)~/rssh-2.3.4/mkchroot.shの編集
主な修正内容(必要であれば修正済みmkchroot.shをアップします)
sftp_server_path="/usr/libexec/openssh/sftp-server" → sftp_server_path="/usr/lib/openssh/sftp-server"
rssh_path="/usr/bin/rssh" → rssh_path="/usr/local/bin/rssh"
chroot_helper_path="/usr/libexec/rssh_chroot_helper" → chroot_helper_path="/usr/local/libexec/rssh_chroot_helper"
chmod u+s $jail_dir/usr/local/libexec/rssh_chroot_helperを追加
$jail_dir/$rssh_path作成時の不具合修正
$jail_dir用ライブラリコピー作成時の不具合修正
$jail_dir/dev作成時の不具合修正
$jail_dir/homeをmkdir(sftpカレントルート用に追加)
5)mkchroot.shの実行
$cd ~/rssh-2.3.4
$sudo ./mkchroot.sh /hogehoge/hogeuser
6)rssh.confの編集
$sudo vi /usr/local/etc/rssh.conf
/usr/local/etc/rssh.confの編集内容
#allowsftp → allowsftp
#chrootpath = "/usr/local/my chroot" → chrootpath = "/hogehoge"
user = hogeuser:022:00010:"/hogehoge/hogeuser/home"
7)sftp-usersグループの作成
$sudo groupadd sftp-users
8)sftp用ユーザ作成
$sudo useradd -U -G sftp-users -m -s /usr/local/bin/rssh hogeuser
$sudo passwd hogeuser
9)接続テスト(失敗)
server 192.168.27.130
client 192.168.27.128
client側結果
$sftp [email protected]
[email protected]'s password:
Connection closed
server側syslog内容
Jun 26 18:37:13 hogepc rssh[11859]: setting log facility to LOG_USER
Jun 26 18:37:13 hogepc rssh[11859]: allowing sftp to all users
Jun 26 18:37:13 hogepc rssh[11859]: setting umask to 022
Jun 26 18:37:13 hogepc rssh[11859]: chrooting all users to /hogehoge
Jun 26 18:37:13 hogepc rssh[11859]: line 32: configuring user hogeuser
Jun 26 18:37:13 hogepc rssh[11859]: setting hogeuser's umask to 022
Jun 26 18:37:13 hogepc rssh[11859]: allowing sftp to user hogeuser
Jun 26 18:37:13 hogepc rssh[11859]: chrooting hogeuser to /hogehoge/hogeuser/home
Jun 26 18:37:13 hogepc rssh[11859]: cmd 'sftp-server' approved
Jun 26 18:37:13 hogepc rssh[11859]: chroot cmd line: /usr/local/libexec/rssh_chroot_helper 2 "/usr/lib/openssh/sftp-server"
server側のsyslogによれば、chrootしようとしているところまでは行っているのですが、
途中でエラーが発生せずにそのまま落ちてるような様子に見受けられます。
chrootについて実はopenssh側設定も試しているのですが、同様にうまくいきませんでした。
本来だと、以下のような内容をsshd_configに追加するだけで実現できそうなのですが・・・。
(シェルログインの制限はrsshを使用するため、internal-sftpは使用しない前提です)
/etc/ssh/sshd_configの編集内容
Match Group sftp-users
AllowAgentForwarding no
AllowTcpForwarding no
ChrootDirectory /hogehoge/%u/./
以上
オフライン
外しているかもしれませんが。
ここの説明によれば、
ChrootDirectory (chrootディレクトリ)
ここに到達するまでの上位のディレクトリはすべてrootが所有していなければならず、他のどのユーザやグループも書き込みできるようになっていてはいけません。
となっているので、確認してみてはいかがでしょうか。
Katsu07さん
ご回答ありがとうございます。
sftprootディレクトリ以下に対し以下を実行した後に接続を試みましたが、
結果はエラーとなってしまいました。
$sudo chown -R root:root /sftproot
$sudo chmod -R 777 /sftproot
実行した際のログは以下の通りです。
1)rsshのChrootDirectoryを使用しようとした場合
auth.log
Jun 27 10:32:19 hogepc sshd[2294]: Accepted password for hogeuser from 192.168.27.129 port 52964 ssh2
Jun 27 10:32:19 hogepc sshd[2296]: subsystem request for sftp by user hogeuser
Jun 27 10:32:19 hogepc sshd[2296]: Received disconnect from 192.168.27.129: 11: disconnected by user
syslog
Jun 27 10:32:19 hogepc rssh[2297]: setting log facility to LOG_USER
Jun 27 10:32:19 hogepc rssh[2297]: allowing sftp to all users
Jun 27 10:32:19 hogepc rssh[2297]: setting umask to 022
Jun 27 10:32:19 hogepc rssh[2297]: chrooting all users to /sftproot
Jun 27 10:32:19 hogepc rssh[2297]: line 32: configuring user hogeuser
Jun 27 10:32:19 hogepc rssh[2297]: setting hogeuser's umask to 022
Jun 27 10:32:19 hogepc rssh[2297]: allowing sftp to user hogeuser
Jun 27 10:32:19 hogepc rssh[2297]: chrooting hogeuser to /sftproot/hogeuser/home/
Jun 27 10:32:19 hogepc rssh[2297]: cmd 'sftp-server' approved
Jun 27 10:32:19 hogepc rssh[2297]: chroot cmd line: /usr/local/libexec/rssh_chroot_helper 2 "/usr/lib/openssh/sftp-server"
2)opensshのChrootDirectoryを使用しようとした場合
※subsystem、ForceCommandをinternal-sftpとした場合も結果は変わりませんでした
clinet側標準出力
$sftp [email protected]
[email protected]'s password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
auth.log
Jun 27 10:23:17 hogepc sshd[13499]: Received signal 15; terminating.
Jun 27 10:23:17 hogepc sudo: pam_unix(sudo:session): session closed for user root
Jun 27 10:23:17 hogepc sshd[13531]: Server listening on 0.0.0.0 port 22.
Jun 27 10:23:17 hogepc sshd[13531]: Server listening on :: port 22.
Jun 27 10:23:33 hogepc sshd[13532]: Accepted password for hogeuser from 192.168.27.130 port 50215 ssh2
Jun 27 10:23:33 hogepc sshd[13534]: fatal: bad ownership or modes for chroot directory component "/sftproot/"
syslog
出力なし
以上
オフライン
sftp-serverのデバッグログを出してみる、とか・・・?
/usr/lib/openssh/sftp-server -l VERBOSE
rsshは私は分からないです。
sshd_config側ではダメでしたか。
rssh側は経験が無いので、申し訳ありませんがこれ以上助言できません。
一応調べると記事は古い(ubuntu 8.04)のですが設定例が書いて有ります。
http://d.hatena.ne.jp/slayer845/20100206/1265391009
それと、rsshはビルドしなくても公式パッケージにある様です。
大変お世話になります。
色々試した結果、何とか解決できましたのでフィードバックします。
実際の解決後の手順・設定例は本投稿が長いので別途投稿します。
問題の原因は、ChrootDirectoryの意味を自分が誤解していた事でした。
サンプルでChrootDirectory /home/%uといった記述があるのでftpルートの
物理パスを設定する内容として理解していました。
つまり、/hogehome/%uと設定した場合は/%uの部分がルートディレクトリかつ、
ホームディレクトリとなる想定で考えていました。
実際にはルートディレクトリのみが定義され、ホームディレクトリはpasswd上に
設定された各ユーザのホームディレクトリが更に物理パスとして必要でした。
仮にhogeuserを作った場合、標準のホームディレクトリは/home/hogeuserです。
つまり、Chroot後は/hogehome/hogeuser/home/hogeuserとなるように
ディレクトリを作成する必要がありました。
この時sftpログイン時は/hogehome/hogeuser/home/hogeuserがカレントとなりますが、
実際のftpルートは/hogehome/hogeuserの位置となります。
よって、余分なディレクトリを省きたい場合はユーザのホームディレクトリを/home/hogeuser
ではなく、/hogeuser等にする必要があります。
こうした場合、ホームディレクトリの物理的な配置はできませんので、公開鍵認証を行いたい
場合にはauhorized_keysの置き場所が無くなるため、sshd_configのAuthorizedKeysFileの設定の
工夫が必要です。
Katsu07さん
rsshをビルドしているのは本番環境用のLinuxがredhatだからです。
centosのリポジトリにはrsshパッケージはありませんので、恐らく同様に存在しないであろう
redhatのためのパッケージ作成までの手順の確認も兼ねてビルドしています。
STGSAGWANさん
ログ出力の提案ありがとうございます。
rsshは/bin/false、/sbin/nologinの代替シェルとして使用します。
メリットはscp、sftp等の接続の許可・不許可を任意に設定できるようになります。
Chrootのためというよりは、厳密にsftpのみログインできるようにする事を目的として
使用しました。
以上
オフライン
ubuntu向けにまとめた手順になります、ご参考にどうぞ。
Chroot用のsyslog取得用の設定を手順として加えていますが、なぜかログが記録されません。
こちらの話はトピックから外れるため議題とは致しません。
また蛇足ですが、以下の手順で環境を構築してもcentos6.4では問題が発生します。
プリインストール済みのssh(OpenSSH5.3)ではChroot後Permission Deniedとなってしまい、
ログイン・cdはできますが、ls、put、get等の操作は一切エラーとなります。
1)ssh、rsshのインストール
$sudo aptitude instasll ssh rssh
2)sshd_configの編集(行追加は先頭に+付加)
$sudo vi /etc/ssh/sshd_config
#LogLevel INFO → LogLevel INFO
PermitRootLogin yes → PermitRootLogin no
+PermitUserEnvironment no
Subsystem sftp /usr/lib/openssh/sftp-server → Subsystem sftp internal-sftp -f AUTH -l INFO
+Match Group sftp-users
+ PasswordAuthentication no
+ ForceCommand internal-sftp
+ AllowAgentForwarding no
+ X11Forwarding no
+ AllowTcpForwarding no
+ ChrootDirectory /home_sftp/%u
3)sshサービス再起動
$sudo service ssh restart
4)rssh.confの編集
$sudo vi /etc/rssh.conf
#allowsftp → allowsftp
5)sftp専用ユーザ作成(sftp-usersグループはMatch Groupで引っ掛けるために使用)
$sudo groupadd sftp-users
$sudo useradd -U -G sftp-users -m -s /usr/local/bin/rssh [ユーザ名]
$sudo passwd [ユーザ名]
6)Chroot用ホームディレクトリ作成
$sudo mkdir -p /home_sftp/[ユーザ名]/home/[ユーザ名]
$sudo mkdir -p /home_sftp/[ユーザ名]/dev
$sudo chown -R [ユーザ名]:[ユーザ名] /home_sftp/[ユーザ名]/home
$sudo chmod -R 700 /home_sftp/[ユーザ名]/home
7)rsyslog.confの編集(行追加は先頭に+付加)
$sudo vi /etc/rsyslog.conf
+$AddUnixListenSocket /home_sftp/[ユーザ名]/dev/log
8)rsyslogサービス再起動
$sudo service rsyslog restart
9)sftpユーザ用公開鍵の設置(シェルログインできるユーザで実施)
$sudo mkdir -p /home/[ユーザ名]/.ssh
$sudo chown [ユーザ名]:[ユーザ名] /home/[ユーザ名]/.ssh
$sudo chmod 700 /home/[ユーザ名]/.ssh
※ログインユーザのホームディレクトリに公開鍵(id_rsa.pub)を保存した想定
$cd
$sudo cat id_rsa.pub >> /home/[ユーザ名]/.ssh/authorized_keys
$sudo chown [ユーザ名]:[ユーザ名] /home/[ユーザ名]/.ssh/authorized_keys
$sudo chmod 600 /home/[ユーザ名]/.ssh/authorized_keys
以上
オフライン
すみません、sftp専用ユーザの追加で誤りがあるので訂正します。
パッケージ版rsshを使用する場合は/usr/bin/rsshが正しいです。
誤)$sudo useradd -U -G sftp-users -m -s /usr/local/bin/rssh [ユーザ名]
↓
正)$sudo useradd -U -G sftp-users -m -s /usr/bin/rssh [ユーザ名]
オフライン