<仮想ルートによるFTPユーザ登録スクリプト>

〔更新履歴〕
 2001/02/17 - ProFTPDとTurbo Linux 6.1に対応

 自宅サーバーを構築した際、友人などにホームページサービスやファイルの置き場所としてftpアクセスをさせたい場合、Linuxにユーザを登録しただけでは、システムの/(ルート)階層下の全てのファイルが参照されてしまいます。しかし、一般ユーザ権限といって侮ってはいけません。/tmp等には一般ユーザの書き込み権限があるので、大量のファイルを置かれて空き容量がなくなった場合、/tmpファイルシステムを利用するデーモンやコマンドが正常に動作しなくなったり、/tmpを/(root)や/varファイルシステムと分けてないファイルシステム構成では最悪Linuxがハングしてしまいます。
 ここはやはり、世間一般のプロバイダーに習い、ftpでログインした際は、ユーザのホームディレクトリを/(ルート)とみなし、ホームディレクトリ配下しか参照させないように設定します。この機能を仮想ルートと呼びます。
 また、/homeファイルシステムを分けて、ユーザ毎のQuota設定を行えば、貴方もプロバイダーの仲間入りです。

 ここでは仮想ルートとしてユーザ登録を行うaddftpuserスクリプトを提供します。動作確認はRedHat6.2J、Turbo6.1で行いました。オプション指定は以下の通りです。

 addftpuser 登録ユーザ名 [ログインするディレクトリ]

 [ ]内は省略可能であり、省略した場合のログインディレクトリはホームディレクトリとなります。例えば、ユーザ名が"oiden"、ホームディレクトリが"/home/oiden"でWebのドキュメント・ルート・ディレクトリが"/home/oiden/public_html"に設定した場合、ftpでの転送先は主に、"/home/oiden/public_html"であり、ftpログインした時点でディレクトリを"/home/oiden/public_html"にするために、第2パラメータで"public_html"を指定します。
 但し、ProFTPDによるファイル転送環境で第2パラメータを指定した際、ホームディレクトリ下に該当ディレクトリを作成しますが、ftpでログインした時のカレントディレクトリはホームディレクトリとなり、ftpログイン時に第2パラメータ指定のディレクトリに移ることが出来ません。

 addftpuserの導入手順は以下の通りです。全てroot権限で行います。

1.適当なディレクトリへ、addftpuser圧縮ファイルのダウンロード

  addftpuser.sh.gz ← クリック!

2.ダウンロードしたチェックサムを確認後、解凍

  ROOT# cksum ./addftpuser.sh.gz
    3136128414 1579 ./addftpuser.sh.gz	← 出力が同一であることを確認
    ROOT# gzip -d ./addftpuser.sh.gz	← addftpuser.shの解凍
    ROOT# mv addftpuser.sh addftpuser	← addftpuserへ名前の変更
3.実行権を与え、/usr/local/binへコピー

  ROOT# chmod 750 addftpuser
  ROOT# mkdir -p /usr/local/bin
  ROOT# cp addftpuser /usr/local/bin
4.起動テスト

 ここでは、ユーザ名:oidenを使っていますが、登録されていないユーザ名であれば、ユニークな名前で構いません。

  ROOT# addftpuser oiden public_html
  Changing password for user oiden
   New UNIX password: ********		← 登録ユーザのパスワードを設定
   Retype new UNIX password: ********		← 確認のため再度パスワードを入力
   passwd: all authentication tokens updated successfuly
   ROOT# ftp localhost			← Linuxサーバー自分自身にログイン
   Connected to localhost.localdomain.
   220 gto.oiden.net FTP server (Version wu-2.6.0(1) Mon Feb 28 10:30:36 EST 2000) ready.
   530 Please login with USER and PASS.
   530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (localhost:root): oiden		← 登録ユーザしたユーザ名を入力
    331 Password required for oiden.
    Password: ********			← 設定したパスワードを入力
    230 User oiden logged in.  Access restrictions apply.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> pwd				← ftpログイン時のディレクトリ表示
    257 "/public_html" is current directory.	← ちゃんと/public_htmlになってます。
    ftp> cd /				← /(ルート)へのディレクトリ変更
    250 CWD command successful.
    ftp> pwd				← カレントディレクトリの表示
    257 "/" is current directory.		← /(ルート)へ移りました。
    ftp> ls				← カレントディレクトリのファイル一覧
    200 PORT command successful.
    150 Opening ASCII mode data connection for /bin/ls.
    total 60				↓ /home/oidenディレクトリのファイルです。
    -rw-r--r--    1 20099    103           235 Dec  5 06:45 .Xdefaults
    -rw-r--r--    1 20099    103            24 Dec  5 06:45 .bash_logout
    -rw-r--r--    1 20099    103           230 Dec  5 06:45 .bash_profile
    -rw-r--r--    1 20099    103           124 Dec  5 06:45 .bashrc
    -rw-r--r--    1 20099    103           491 Dec  5 06:45 .emacs
    drwxr-xr-x    3 20099    103          4096 Dec  5 05:30 .kde
    -rw-r--r--    1 20099    103           435 Dec  5 06:45 .kderc
    -rw-r--r--    1 20099    103           118 Dec  5 06:45 .qti18nrc
    -rw-r--r--    1 20099    103          3394 Dec  5 06:45 .screenrc
    drwxr-xr-x    5 20099    103          4096 Dec  5 05:30 Desktop
    drwxr-xr-x    2 0        0            4096 Dec  5 05:30 bin
    drwxr-xr-x    2 0        0            4096 Dec  5 06:45 dev
    drwxr-xr-x    2 0        0            4096 Dec  5 06:45 lib
    drwxr-xr-x    2 20099    103          4096 Dec  5 06:45 public_html
    drwxr-xr-x    2 20099    103          4096 Dec  5 05:30 tttt
    226 Transfer complete.
    ftp> 
    ftp> quit				← ftpの終了
    221-You have transferred 0 bytes in 0 files.
    221-Total traffic for this session was 1760 bytes in 2 transfers.
    221-Thank you for using the FTP service on pingu.nsg.sgi.com.
    221 Goodbye.
    ROOT# 
    ROOT# userdel oiden			← テスト完了後、必要なければ削除しましょう!

 【注意】 ftpでログイン後、ファイル参照や新規ファイル転送はできても、ファイルの更新や削除が出来ない場合、/etc/ftpaccessをチェックしましょう!このファイルでftpのアクセス制限がされている可能性があります。

※設定については、スクリプト内容を見れば全て分かりますので、どのファイルをどの様に設定したらいいかの説明はしていません。また、運用に併せてのスクリプトの変更は、自己責任において御自由に行って下さい。