マンダリンケーキのレシピ

RSS1.0Atom0.3

このブログのテーマ:
Linuxをいじる Windowsを飼い慣らす Solarisに悩む Firefoxを使い倒す Thunderbirdを使い倒す
W-ZERO3で仕事する Mindmap(マインドマップ)で仕事する
WRC(世界ラリー選手権)を観る 車を走らせる
日常の非日常を記録する
<< August 2005 | 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 >>
 
+ GREEN goo +

サイト内ウェブ
この検索は「緑のgoo」を利用してます
現在、本貢献中
+ TWITTER +
+ OTHER WORLD +
あわせて読みたい
+ KEY WORD +
+ DISPLAYED ENTRIES +
+ RECENT COMMENT +
+ RECENT TRACKBACK +
+ ACCESS ANALYZE +
カウンター 無料
seo 相互リンク 無料YouTube高速バス 予約
+ ADVERTISE +
 
スポンサーサイト

一定期間更新がないため広告を表示しています

- | | - | -
OpenSSHでscp with rssh on Solaris9
前回のトライで失敗した(OpenSSH→scp→scponly→Solaris9では×)ので、rsshでやってみた。

結果、できた。

Solaris9ではrsshが動いた事例がどこにも無かったので、かなり手探りで。。
と、その前に、
rsshはOpenSSHと共に用いる制限付きシェルであり、scpと sftp のみ、またはこれらの片方のみを許可する。例えば、シェルでのアクセスを与えずにscp を使ったファイルのコピーをユーザーに許可したい場合にrsshを使えばよい。
とあるとおり、このツールを使えばOpenSSHの機能をscpだけに絞ることが可能。
しかも、chrootできるので、アクセス可能なディレクトリを指定できる。

今回、どうしてもやらねばならなかったのがSolaris9上でのscp制御。
そもそも対応プラットフォームは
# IA32/IA64 上の各種 Linux ディストリビューション
# Compaq Tru64 Unix
# Solaris 2.x 〜 8(条件付き ---- セキュリティの項参照)
# AIX 5.1
# HP/UX 11.00 (PA-RISC)
# HP/UX 11.22 (IA64)
# Irix 6.5
だし、chroot jailがSolaris9上でちゃんとできるかどうかがポイントだった。

先に言っておくと、キモは/bin。これ大事。すごく大事。/usr/binではダメ。


まずは環境の説明から。
ここで既に「え?」とモヤモヤしている人は挙手。

そう、Solaris9に入っているのはOpenSSHではなく、OpenSSHを元にしたSolaris版SSH。SSHの歴史を見ると鶏が先か卵か先かって感じ。

ご安心ください。以下はOpenSSHに切り替えるなど軟弱なことはしていません。そのまま行ってます。

で、Solaris、とくに本番環境で稼働している場合は環境設定がなっちょらんですよ。そこでUNIXな生活を参考に、一般ユーザとrootユーザでPATHとLD_LIBRARY_PATHを設定。
PATH=/usr/local/bin:/usr/sfw/bin:/opt/sfw/bin
PATH=$PATH:/usr/bin:/usr/sbin:/usr/dt/bin:/usr/openwin/bin
PATH=$PATH:/usr/xpg4/bin:/usr/ccs/bin:/usr/ucb:/etc
export PATH
LD_LIBRARY_PATH=/usr/local/lib:/usr/sfw/lib:/opt/sfw/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/dt/lib:/usr/openwin/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/xpeg4/lib:/lib:/usr/ccs/lib
export LD_LIBRARY_PATH


以下、よけいな解説付きインストールログ。

$ gunzip -c rssh.tar.gz | tar xvf -
$ cd rssh-2.2.3
$ ./configure
$ make
gcc -c -DHAVE_CONFIG_H -DPATH_RSSH_CONFIG="/usr/local/etc/rssh.conf" -DPATH_CHROOT_HELPER="/usr/local/libexec/rssh_chroot_helper" -g -O2 rsshconf.c
gcc -c -DHAVE_CONFIG_H -DPATH_RSSH_CONFIG="/usr/local/etc/rssh.conf" -DPATH_CHROOT_HELPER="/usr/local/libexec/rssh_chroot_helper" -g -O2 log.c
gcc -c -DHAVE_CONFIG_H -DPATH_RSSH_CONFIG="/usr/local/etc/rssh.conf" -DPATH_CHROOT_HELPER="/usr/local/libexec/rssh_chroot_helper" -g -O2 util.c
gcc -c -DHAVE_CONFIG_H -DPATH_RSSH_CONFIG="/usr/local/etc/rssh.conf" -DPATH_CHROOT_HELPER="/usr/local/libexec/rssh_chroot_helper" -g -O2 argvec.c
gcc -c -DHAVE_CONFIG_H -DPATH_RSSH_CONFIG="/usr/local/etc/rssh.conf" -DPATH_CHROOT_HELPER="/usr/local/libexec/rssh_chroot_helper" -g -O2 main.c
gcc -g -O2 -o rssh rsshconf.o log.o util.o argvec.o main.o
gcc -c -DHAVE_CONFIG_H -DPATH_RSSH_CONFIG="/usr/local/etc/rssh.conf" -DPATH_CHROOT_HELPER="/usr/local/libexec/rssh_chroot_helper" -g -O2 rssh_chroot_helper.c
gcc -g -O2 -o rssh_chroot_helper rssh_chroot_helper.o log.o argvec.o

$ su root
# make install
test -z "/usr/local/bin" || /bin/bash ./mkinstalldirs "/usr/local/bin"
./install-sh -c 'rssh' '/usr/local/bin/rssh'
test -z "/usr/local/etc" || /bin/bash ./mkinstalldirs "/usr/local/etc"
./install-sh -c -m 644 'rssh.conf' '/usr/local/etc/rssh.conf'
test -z "/usr/local/libexec" || /bin/bash ./mkinstalldirs "/usr/local/libexec"
./install-sh -c 'rssh_chroot_helper' '/usr/local/libexec/rssh_chroot_helper'
/usr/ccs/bin/make install-exec-hook
chmod u+s /usr/local/libexec/rssh_chroot_helper
test -z "/usr/local/man/man1" || /bin/bash ./mkinstalldirs "/usr/local/man/man1"
./install-sh -c -m 644 './rssh.1' '/usr/local/man/man1/rssh.1'
test -z "/usr/local/man/man5" || /bin/bash ./mkinstalldirs "/usr/local/man/man5"
./install-sh -c -m 644 './rssh.conf.5' '/usr/local/man/man5/rssh.conf.5'


即座にrssh.confの修正。
# vi /usr/local/etc/rssh.conf

allowscp ←scpだけallowとする。

user=scpuser:011:00001:"/export/home/scpuser" # scp with chrootuser ←最終行に追加。

追加したユーザ、scpuserをOSにも追加。
# useradd -d /export/home/scpuser -m scpuser
# passwd scpuser
# su - scpuser

ツール同梱のmkchroot.shを利用して、scpuserのchroot環境を作成。
$ cp 展開パス/rssh-2.2.3/mkschroot.sh .
mkchroot.shはLinux用のようで、usr/localが作成されない。先にmkdirしておく。
$ mkdir -p ./usr/local/bin/rssh
$ ./mkchroot.sh .
$ grep scpuser /etc/passwd > ./etc/passwd
$ cp /etc/group ./etc

よく見ると、/export/home/scpuserにおかしな名前のディレクトリができているので、各自で削除のこと。

さて、ここからがヤマ場。
まず、ファイル名指定にwordexp()を利用するため、kshを用意してあげる。
$ mkdir bin
$ cp -i /bin/ksh ./bin

必要なライブラリを用意する。→rssh, rssh_chroot_helper, scp, ksh, sftp-serverをlddで叩いたもの。
$ cp -i A .

結果、以下があればヨシ。
.login
.profile
.ssh/authorized_keys
.ssh/known_hosts
bin/ksh
bin/sh
dev
etc/nsswitch.conf
etc/passwd
etc/group
usr/local/bin/rssh
usr/local/libexec/rssh_chroot_helper
usr/local/etc
usr/bin/scp
usr/lib/ssh/sftp-server
usr/lib/libc.so.1
usr/lib/libdl.so.1
usr/lib/libgen.so.1
usr/lib/libsecdb.so.1
usr/lib/libnsl.so.1
usr/lib/libcmd.so.1
usr/lib/libmp.so.2
usr/lib/ld.so.1
usr/lib/libsocket.so.1
usr/lib/nss_files.so.1
以下は各プラットフォームによって違うので適当に。
usr/platform/SUNW,Sun-Fire-V210/lib/libc_psr.so.1


あとはssh-keygenで鍵作成。前回の「導入」の項を参照。

鍵作った後で、
$ su -
# usermod -s /usr/local/bin/rssh scpuser
# su - scpuser
としてscpuserのシェルがrsshに変更され、suが失敗することを確認。

最後に、
$ ssh -i identity scpuser@localhost

とかやって、
Last login: Tue Aug 9 18:36:26 2005 from localhost

This account is restricted by rssh.
Allowed commands: scp

If you believe this is in error, please contact your system administrator.

Connection to localhost closed.
と出たり、ファイルが適切なところに置けたり、適切なファイルが取れるのであれば完了。

Copyright (C) 2004 paperboy&co. All Rights Reserved.

Powered by "JUGEM"