<仮想ルートによるFTPユーザ登録スクリプト>
〔更新履歴〕
自宅サーバーを構築した際、友人などにホームページサービスやファイルの置き場所としてftpアクセスをさせたい場合、Linuxにユーザを登録しただけでは、システムの/(ルート)階層下の全てのファイルが参照されてしまいます。しかし、一般ユーザ権限といって侮ってはいけません。/tmp等には一般ユーザの書き込み権限があるので、大量のファイルを置かれて空き容量がなくなった場合、/tmpファイルシステムを利用するデーモンやコマンドが正常に動作しなくなったり、/tmpを/(root)や/varファイルシステムと分けてないファイルシステム構成では最悪Linuxがハングしてしまいます。
ここでは仮想ルートとしてユーザ登録を行う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"を指定します。
addftpuserの導入手順は以下の通りです。全てroot権限で行います。
1.適当なディレクトリへ、addftpuser圧縮ファイルのダウンロード
addftpuser.sh.gz ← クリック!
2.ダウンロードしたチェックサムを確認後、解凍
ここでは、ユーザ名:oidenを使っていますが、登録されていないユーザ名であれば、ユニークな名前で構いません。
【注意】 ftpでログイン後、ファイル参照や新規ファイル転送はできても、ファイルの更新や削除が出来ない場合、/etc/ftpaccessをチェックしましょう!このファイルでftpのアクセス制限がされている可能性があります。
※設定については、スクリプト内容を見れば全て分かりますので、どのファイルをどの様に設定したらいいかの説明はしていません。また、運用に併せてのスクリプトの変更は、自己責任において御自由に行って下さい。
2001/02/17 - ProFTPDとTurbo Linux 6.1に対応
ここはやはり、世間一般のプロバイダーに習い、ftpでログインした際は、ユーザのホームディレクトリを/(ルート)とみなし、ホームディレクトリ配下しか参照させないように設定します。この機能を仮想ルートと呼びます。
また、/homeファイルシステムを分けて、ユーザ毎のQuota設定を行えば、貴方もプロバイダーの仲間入りです。
但し、ProFTPDによるファイル転送環境で第2パラメータを指定した際、ホームディレクトリ下に該当ディレクトリを作成しますが、ftpでログインした時のカレントディレクトリはホームディレクトリとなり、ftpログイン時に第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.起動テスト
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 ← テスト完了後、必要なければ削除しましょう!