hns - 日記自動生成システム - Version 2.19.9

先月 2008年08月 来月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2008年08月28日(木) 旧暦 [n年日記] [更新:"2011/03/20 21:41:01"]

#1 [NetBSD] ssh を chroot 環境にする

ssh で入った先の環境を chroot にして利用を制限する場合がある。 以前は openssh に patch を当てる必要があったが 4.9 辺りから機能が組込ま れたようだ。例えば NetBSD/4.0 だと、おそらく、次の版が入っている。
ttyqc:makoto@genova 10:06:55/080830(...wip/cygwin-gcc)> ssh -version
OpenSSH_4.4 NetBSD_Secure_Shell-20061114, OpenSSL 0.9.8e 23 Feb 2007
Bad escape character 'rsion'.
これでは多分 chroot の機能はない。そこで /usr/pkgsrc/security/openssh を make package する。これで、次のように 5.0 が入る。
ttyp2:makoto@hostname  10:31:36/080830(~)> ssh -v
OpenSSH_5.0p1, OpenSSL 0.9.8e 23 Feb 2007
起動用の手続を写す:
cp /usr/pkg/share/examples/rc.d/sshd /etc/rc.d/sshd
設定は /usr/pkg/etc/ssh/sshd_config に行なう。 その後起動した場合に、もし以前の /etc/ssh/sshd_config が残っていると、それを知らせる 表示が出るので、消すか、名前を変えておく。 この後は、その sshd_config に
ChrootDirectory /export/ssh/chroot
のような設定をすれば良い。このディレクトリは / からの全ての枝で root 所有 にし、group writable は無にしておく必要がある。

特定の userid だけを chroot にしたい時には

Match User hoge
        ChrootDirectory /export/ssh/chroot
Match User foo
        ChrootDirectory /export/ssh/chroot
のようにして上書きの設定が可能。一致の条件には User だけ でなく Group, Host, Address なども使える。 実はここから先が少し大変。 ChrootDirectory で指定した先には
  1. 多分 scp は最低必要 (shell 無で scp のみ許す場合)
  2. shell を許すなら /bin/sh 等が必要
  3. 上のものが shared library を必要とするなら、 それらと ld.elf_so が必要 (usr/lib/ld.elf_so)。 安易に、全て置けば、ということで /etc/fstab に次のように書いて見る
    /usr/lib        /export/ssh/chroot/usr/lib      null    ro
    /lib            /export/ssh/chroot/lib          null    ro
    #libexec        /export/ssh/chroot/libexec      null    ro
    
    (実はまだ再起動していないのでこれらで良いか未確認) libexec は ld.elf_so だけで良い。
  4. passwd 関係も必要
    vipw -d /export/ssh/chroot
    
    のようにして作成。userid については本来の環境と chroot の両方 に必要で、例えば home については 本来の環境の方にも同じことを 書いておく必要がある
  5. etc/nsswitch.conf が必要なので写しておく
  6. etc/group を (passwd から参照している) 必要行だけを書いて作成
  7. dev/null が必要なので作っておく
    mkdir dev; mknod dev/null c 2 2;chmod 666 dev/null
    
  8. home も当然それなりに必要 (例えば home/user/.ssh)
「どこからか実行形式を写して来て自分の directory に置いて実行」 を防ぐ方法は ? .. やはり shell は禁止するか rssh (restricted shell) を使うべき ? ... 既に chroot しているのだから何を実行されてもいいという気もするけれど。

rssh:

pkgsrc/shells/rssh/DESCR には次のように書いてある。
Rssh is a restricted shell for use with OpenSSH, allowing only scp and/or sftp. For example, if you have a server which you only want to allow users to copy files off of via scp, without providing shell access, you can use rssh to do that.
shell の設定は「本来の passwd と chroot の両方に設定する」

rssh は /usr/pkg/etc/rssh.conf に設定が必要。安易には次の五つを 有効にすれば良い ?

allowscp
allowsftp
allowcvs
allowrdist
allowrsync
( 上記の chroot の設定をしているとこれだけでは公開鍵を読んでくれない ?)。 rssh は chroot のない openssh のためのものの気もする。 rssh を使うくらいなら openssh 側には chroot は要らない ?

何故 shell にこだわるかと言うと ls くらいは使えた方がいいかな と思っているから。
(という訳は現在は rssh は使わない方向で考えている)

readonly にしておけば良い ?:

「どこからか実行形式を写して来て自分の directory に置いて実行」 を防ぐ
と書いたが、これは scp で写すことを想定している。実際 scp -p を使えば、実行形式を写すことは可能だけれど、 ~/ を dr--r--r-- にしておけば良いのではないかな ? ( /tmp も Read Only にしておく必要がある) でもそうすると管理者側が書くの が少し面倒だから union_mount で上に R/O を被せておく ?

Match Group って動くのかな:

何とはなく sshd_config の Match Group が動かない気がする

(以下 2011/03/20 追記)
chroot on netbsd5




最近の日記
2024年03月10日
停電 (瞬電)
2024年03月03日
the second try on bare-metal
useradd
2024年02月29日
opendkim and senmail
2024年01月24日
chat/iam 0.0.8
2024年01月21日
uselocale vs setlocale (textproc/R-readxl)
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)