読者です 読者をやめる 読者になる 読者になる

るるぷらす

るるぷらす、だおー

Macでftpchrootの設定方法と、Mac OS X 10.5でホームディレクトリを移動する方法

いままでサーバのFTPを使ってデータのやり取りする場合、問題があってあまりやりたくなかったのですがやっと回避方法を見つけました。その問題とは、FTPでアクセスするとその上の階層も見に行けてしまうので、ファイルが取りたい放題になることです。今回サーバとして使っているMac miniのOSをMac OS X 10.4.11から10.5.6にアップグレードする機に色々調べていたら何となく解決できそうな気がしました。

とりあえず今回設定した方法を自分のメモとして残しておきます。

まずはhogeという管理者権限のない標準ユーザーを作りました。まぁ、FTPでデータをやり取りするだけだったらこれだけでもいいのですが、今回は自分の希望として、下記がありました。

  • FTPを使うユーザーがホームディレクトリより上の階層にアクセスするのを防ぎたい。
  • 内蔵ハードディスクは空き容量がないので外付けのハードディスクを使いたい。

外付けハードディスクについては今回HD-100GBという外付けのパーティションを用意しました。ちなみに使ったのはUSB接続のHD-CE1.0TU2という製品です。

とりあえず今の稼働している様子を見る限りうまくいっているようです。

Mac OS X 10.5でrootを有効にする。

まずはいくつかサーバの設定をする前にroot権限が必要になってくるので予めrootを有効にします。すでにrootが有効になっている場合はこの操作は必要ありません。
rootを有効にするにはいくつか方法があるんですがディレクトリユーティリティを使う方法はわかりやすくGUIでできる方法です。

  1. Finder > 移動メニュー > ユーティリティを開きます。
  2. ディレクトリユーティリティを起動します。
  3. 左下の鍵アイコンで認証 > 編集メニュー > ルートユーザを有効 > rootのパスワードを設定

f:id:egyo2nd:20081228125725p:image

これでrootが有効になりました。

ftpchrootを有効にする。

FTPでアクセスしたときにそのユーザーが上の階層へ移動してしまうことを防ぐためにftpchrootを使います。

一応作ったユーザーは標準ユーザーなのでファイルを改変されたりする心配は少ないと思うのですが読み取り属性があるのでどの階層でもアクセスしてファイルをダウンロードできてしまいます。こういうことができてしまうのは何となく気持ち悪いのでftpchrootでユーザーに制限をかけようと思います。

ftpchrootとは設定したユーザーのrootを変更します。パスでいえば"/"の所です。つまり"/Users/hoge"の場所にrootを移せば、それよりも上の階層にアクセスできなくなります。

% sudo su
% touch /etc/ftpchroot
% vi /etc/ftpchroot

1行目:rootでログイン。
2行目:etcフォルダにftpchrootという名前の空のファイルを作成。
3行目:viでftpchrootを開く。
viでの操作は、

  1. i を入力(これで入力モードに入る)
  2. hoge を入力(ユーザー名を入力する)
  3. esc キー(入力状態を解除)
  4. shift キーを押しながら ZZ と入力(viの内容を保存して終了)

これでftpchrootにユーザー名が記入されました。このファイルに書かれたユーザーはftpサーバを再起動したあとにftpchrootが有効になります。試しにhogeユーザーでFTPに接続してください。上の階層にいけないようになっていると思います。

FTPユーザのホームディレクトリを移動する。

さて、上の階層にアクセスすることを防ぐことはできたのですが、ftpchrootを行ってしまうと外付けハードディスクへのアクセスも出来なくなってしまいます。外付けハードディスクのシンボリックリンクを張るとか色々考えたのですがうまくいかず。最後の手段としてFTPユーザーのホームディレクトリそのものを外付けハードディスクに移動することにしました。
調べてみるとホームディレクトリを移動する方法がありそうだったのでその手順に従って行ってみました。この方法はFTPに限らずその他の場面でも有効そうです。

% sudo su
% ditto -v /Users/hoge /Volumes/HD-100GB/hoge
% mv /Users/hoge /Users/hoge~
% ln -s /Volumes/HD-100GB/hoge /Users
% dscl . -create /Users/hoge NFSHomeDirectory "/Volumes/HD-100GB/hoge"

1行目:rootでログインする。
2行目:hogeユーザーのホームディレクトリを外付けにコピーする。
3行目:内蔵に残ったホームディレクトリをリネームして、いざという時のバックアップとする。
4行目:新しいホームディレクトリをユーザーフォルダにシンボリックリンクを張る。
5行目:新しいホームディレクトリの場所をシステムに再登録する。

これでhogeユーザーのホームディレクトリをそっくりそのまま外付けハードディスクに移動しました。FTPでログインしても問題ないことを確認しました。

追記

ホームディレクトリを移動した場合、Apacheの設定も移動しないと、Sitesフォルダが使用できなくなるので注意。
/etc/Apache2/users/hoge.conf
ここのディレクトリの設定を移動したフルパスに変更する。