2月 18
2011

sftpにchrootdirectoryを適用するときに悩まないために for Leopard

2月 18th, 2011 sftpにchrootdirectoryを適用するときに悩まないために for Leopard はコメントを受け付けていません。

Snow Leopard に標準で付いているOpenSSHでsshサーバ運用しています。

そこで、第三者にsftpを提供することになったのですが、普通に提供すると他のディレクトリまで見えてしまいますね。パーミッションでがちがちにするのも良いのですが、抜けがあったりするとこれまた大変です。(^_^)

そこで、特定のユーザには chroot して、完全に隠蔽したsftp環境を提供しようという算段です。
最近にOpenSSHは標準で簡単にchrootの設定が出来ますのでこれはラッキー。(ちょっと前まで大変だったんですよ。。;p)

でも、sftpでchrootなんて皆さんやっていることですね。(^_^)
今回は、Mac の Leopard 環境でコマンドラインだけをもちいて、パスワード認証ではなくて、ちゃんと公開鍵を使う環境構築をやります。

何を言いたいのかというと、、、、
公開鍵を使って、なおかつ、chrootにて安全なsftp環境をユーザに提供する設定例です。

作業は、大体3つです。

1, ユーザの作成とホームディレクトの作成(鍵置き場)
2. chrootしてユーザに提供するsftp環境の作成
3. sshdの設定(sshd_config)

では、さっそく。。。

1. ユーザの作成とホームディレクトリの作成(鍵置き場)

Leopard では、ユーザの情報などはDirectry Serviceで行っております。なので、dsclコマンドを使います。dsclって覚えにくいですが、これはDirectory Service command lineの略ですね。
普段は /Users の直下にホームディレクトリを作成します。他のは書でも良いのですが、とりあえず、sftpuser という名前で作成しましょう。

まずは、利用されていないUID(UniqueID)とGID(PrimaryGroupID)を得ます。

$ dscl . -list /Users UniqueID
$ dscl . -list /Groups PrimaryGroupID

既に登録されているUIDやGIDが表示されます。まだ、登録されていない数字を選びます。今回はめんどくさいので両方とも600にします。

さあ、作成します。sudoコマンドにて実行してください。

$ sudo dscl . -create /Groups/sftpuser PrimaryGroupID 600
$ sudo dscl . -create /Users/sftpuser UniqueID 600
$ sudo dscl . -create /Users/sftpuser RealName Sftpuser
$ sudo dscl . -create /Users/sftpuser PrimaryGroupID 600
$ sudo dscl . -create /Users/sftpuser NFSHomeDirectory /Users/sftpuser
$ sudo dscl . -create /Users/sftpuser Password “*”
$ sudo /usr/sbin/createhomedir -b -u sftpuser

これで、ログインするためのユーザが作成されました。

2. chrootしてユーザに提供するsftp環境の作成

ユーザから何をされて良い環境、おっと、ユーザがいろいろファイルを置くための環境を作成します。
今回は、/Users/sftpwork を割り当てましょう。

ますはディレクトリを作成します。ただし、ココが重要。オーナはrootです、またパーミッションもrootさん以外は書き込みできないパミッションにします。

$ sudo mkdir /Users/sftpwork
$ sudo chown root:admin /Users/sftpwork
$ sudo chmod 755 /Users/sftpwork

/Users/sftpwork直下はsftpuserさんが書き込みできないので、sftpuserさんのオーナのサブディレクトリを作ってあげます。
たとえば、webページのドキュメントルートに指定してあげるなら /Users/sftpuser/docroot とか、ログファイルを提供してあげるなら、/Users/sftpuser/logs とか。ま、いろいろ考えられますね。

3. sshdの設定(sshd_config)

最後に、sshの設定です。
Leopardには、ssh(sftp)にOpenSSHがあらかじめインストールされています。ここでは、sftpuserさんに安全にsftpを提供するところだけ説明します。ご存じのように、/etc/sshd_config ファイルを編集します。パスワードで認証するのは心許ないので公開鍵でのみの認容にします。

sshd_config ファイルの最後に、

Match User sftpuser
ChrootDirectory /Users/sftpwork/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

それから、Subsystem の記載の所を探して

#Subsystem sftp /usr/libexec/sftp-server
Subsystem sftp internal-sftp

というように、外部コマンドの/usr/libexec/sftp-serverを使用しないようにコメントアウトして、sshd組込のsftpサーバを利用する既述を追加します。もちろん、パスワード認証しないので、

PasswordAuthentication no

は、どこかに記載しておいてください。

さて、最後に公開鍵を設置します。

公開鍵は、もちろんユーザさんが作成します。作り方は、省略しますがssh_keygenコマンド作成できます。
公開鍵は、/Users/sftpuser/.sshディレクトリにauthorized_keysというファイルで保存します。その時、もちろんファイルのオーナはsftpuserさんですが、.sshディレクトリのパミッションは700、authorized_keysファイルのパミッションは600で無ければなりません。つまり、drwx——、-rw——- となります。

これで、安全にsftp環境を提供できるようになります。

しかし、、、私の環境ではこれではアクセスできませんでした。(^_^;
実は、次のようなエラーメッセージがサーバのログに出てました。

fatal: bad ownership or modes for chroot directory component “/”

なになに? /ルートのオーナがモードが変だと? たぶんに、パミッションが変なのでしょう。
“ls -al /” で調べると 確かに”/”(ここでは”.”ですね) にパーミッションのgroupとotherにw(書き込み)権限が付いてます。

sudo chmod go-w /

これで、/にはrootさん以外、書き込みできなくなりました。
結構、これに気が付くのに手間取ってしまったんですよ。同じ、事象の人の助けになれば幸いです。でも、sftp環境を他の人に提供している人なんてそんなに居ないか。。。それも、Macで(^_^;

4月 25
2010

なにげに、SCPluginのホームページを覗いてみたら。。。
Snow Leopard に対応しただって? (^_^)

なになに、、、

But still, no contextual menu or badging.

コンテキストメニューで動かない?!

おまけに、アイコンでの表記を出来ないのか。。。orz

でも、対応しているので、インストールして見ました。(^_^)

http://scplugin.tigris.org/からダウンロードしてきていつものインストーラでインストールします。
でも、コンテキストメニューに対応してないので、マウス右クリックしてもメニューは相変わらずインストール前と同じ。。。そこで、Snow Leopardは、ちょっとゴニョゴニョして、使えるようにします。

まず、
SCPluginUIDaemonをバックグランドで起動しておきたいので、ログイン項目に登録しておきます。
手順は、/Library/Contextual Menu Items/SCFinderPlugin.plugin/Contents/Resources/S​CPluginUIDaemon をシステム環境設定のアカウントにある、ログイン項目にこのファイルを追加するだけです。
でも、SCFinderPlugin.pluginはフォルダで見るとPluginファイルになっているので、その下のファイル等を指定することが出来ません。そこで、、、、ファインダーであらかじめ​SCPluginUIDaemonを表示して起きましょう。SCFinderPlugin.plugin以下のファイルは「パッケージの内容を表示」でその下のフォルダの内容が見えます。
ログイン項目を”+”で追加するときにファイルを指定しますが、その時にファインダーで表示しておいた SCPluginUIDaemon ファイルをドラッグ・アンド・ドロップでファイルチョーザーに落としてやります。

これで、SCPluginUIDaemonの自動起動の設定は完了。

最後に、アプリケーションのフォルダにインストールされた SCToolbarButtonをファインダのツールバーに、これまたドラッグ・アンド・ドロップして、登録します。
あの”S”マークのアイコンがファインダーのすべてのウィンドウのツールバーに表示されましたよね。(^_^)

そのアイコンをクリックした見てください。(^_^)

つまり、、、コンテキストメニューの代わりに、ツールバーにメニューを置きました。という、手に出たようです。;p

これが正式な対応なのかな。。。。(^_^;

SCPlugin.tiff

10月 18
2009

サーバのJRubyが1.2だったのでJRuby 1.3.1に上げてみた。
一緒に開発環境も。。。

JRubyはここから持ってきて、展開すればインストール完了。(^_^)
ま、なんてこと無い。おわり。。。

で済まされなかった。。。(^_^)

毎度曲者のgem。RailsはすんなりとOK。

つぎは、、、ruby-debug関連。

まずは、ruby-debug-base。
これは、ここからruby-debug-base-0.10.3.1-java.gemをもらってくる。
いつものコマンドで、
jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem

次は、ruby-debug-ide。
これも、ここからもらってくるのだが最新だとうごかない。
たとえば、、、

Building native extensions. This could take a while…
rake aborted!
Don’t know how to build task ‘2>&1’

(See full trace by running task with –trace)
ERROR: Error installing ruby-debug-ide:
ERROR: Failed to build gem native extension.

こんなエラーなる。
なので、JRuby1.3.1で動作する ruby-debug-ide-0.3.4.gem をもらってくる。
jruby -S gem install -l ruby-debug-ide-0.3.4.gem

次は、rcov。これあると便利なので。。。(^_^)
JRuby1.3.1で動くものは Githubにあるので、
jruby -S gem install –source http://gems.github.com jruby-rcov
で完了。

ふぅ。ワイン片手にやると、良い感じにtypoする。。。(^_^;
おやすみーーー。