この章では、次の表に示す FTP サーバーを設定し、管理するための作業について説明します。
表 38–1 FTP サーバーの管理 (作業マップ)
作業 |
説明 |
参照先 |
---|---|---|
FTP サーバーへのアクセスの構成 |
/etc/ftpd ディレクトリに置かれた ftpaccess、ftpusers、ftphosts の各ファイルを使用して、FTP サーバーへのアクセスを確立または制限する | |
FTP サーバーのログインの設定 |
実ユーザー、ゲストユーザー、匿名ユーザーのログインアカウントを設定する | |
メッセージファイルをカスタマイズする |
/etc/ftpd/ftpaccess ファイルを編集して、特定のイベントに関連して FTP サーバーが FTP クライアントにメッセージを返すように構成する | |
FTP サーバー上のファイルへのアクセスを構成する |
/etc/ftpd/ftpaccess ファイルを使用して、特定のコマンドの実行、FTP サーバーからのファイルのダウンロード、FTP サーバーへのファイルのアップロードを許可するユーザーのクラスを指定する | |
限定された仮想ホスティングまたは完全な仮想ホスティングを有効化する |
/etc/ftpd/ftpaccess ファイルを使用して、FTP サーバーが同一マシン上の複数ドメインをサポートするように構成する | |
FTP サーバーを起動する |
nowait モードまたはスタンドアロンモードで FTP サーバーを起動するように、/etc/inet/inetd.conf ファイルを編集する | |
FTP サーバーを停止する |
/etc/ftpd/ftpaccess ファイルを使用し、ftpshut を実行して FTP サーバーを停止する | |
一般的な FTP サーバーの問題を障害追跡する | syslogd を検査し、greeting text と log commands を使用して FTP サーバー上の問題をデバッグする |
syslogd 内の FTP サーバーのメッセージを検査する方法 |
/etc/ftpd ディレクトリに置かれた構成ファイルを使用して FTP サーバーへのアクセスを制御します。次に構成ファイルを示します。
ftpusers には、FTP サーバーへのアクセスを拒否するユーザーが列挙されています。
ftphosts は、複数のホストから FTP サーバー上の複数のアカウントへのログインを許可または拒否するために使用します。
ftpaccess は、メインの FTP 構成ファイルです。-a オプション付きで呼び出された場合、FTP サーバーは /etc/ftpd/ftpaccess ファイルだけを読み取ります。ftpaccess を使用する場合、すべてのユーザーは FTP サーバーへのアクセスを許可されたクラスのメンバーである必要があります。特定のクラスにのみ適用される ftpaccess 指令を複数指定することができます。
詳細は、ftpusers(4)、ftphosts(4)、ftpaccess(4) のマニュアルページを参照してください。
FTP サーバーのすべての構成ファイルで、# 記号で始まる行はコメントとして扱われます。
ftpaccess を使用する場合、FTP サーバーにログインするには、ユーザーはクラスのメンバーである必要があります。class 指令を ftpaccess に追加するには、特定のホストからアクセスを許可されているユーザーの class 名と typelist を指定します。
スーパーユーザーになります。
ftpaccess ファイルに匿名ユーザー、ゲストユーザー、実ユーザーのエントリを追加します。
class class typelist addrglob[addrglob...] |
FTP ユーザーの定義に使用するキーワード
class キーワードを使用して定義する名前。各ログインは、定義されているクラスのリストと比較される。ログインしたユーザーは、一致した最初のクラスのメンバーと見なされる
3 種類のユーザー (anonymous、guest、real) に一致するキーワードからなる、コンマで区切られたリスト
展開されたドメイン名または展開された数値アドレス。addrglob は、スラッシュ ('/') で始まるファイル名にすることもできる。address:netmask または address/cidr という形のアドレス展開を追加できる
数値の IPv4 アドレス : 10.1.2.3
展開されたドメイン名 *.provider.com
展開された数値の IPv4 アドレス 10.1.2.*
数値の IPv4 アドレス:ネットマスク 10.1.2.0:255.255.255.0
数値の IPv4 アドレス/CIDR 10.1.2.0/24
数値の IPv6 アドレス : 2000::56:789:21ff:fe8f:ba98
数値の IPv6 アドレス/CIDR: 2000::56:789:21ff:fe8f:ba98/120
class local real,guest,anonymous *.provider.com class remote real,guest,anonymous * |
この例では、local クラスを、*.provider.com からログインする real、guest、または anonymous のいずれかの種類のユーザーとして定義します。最後の行では、remote を、*.provider.com 以外からログインするユーザーとして定義します。
ftpaccess ファイルに設定された指令により、特定のクラスのユーザーが同時にログインできる数を制限できます。各ログインの制限には、クラス名、UUCP スタイルの曜日リスト、制限を超過した場合に表示するメッセージファイルが含まれます。
ユーザーログインの制限を設定するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
limit class n times [message_file] |
定義されたクラスの特定時刻の同時ログイン数を、指定したユーザー数に制限するキーワード
class キーワードを使用して定義する名前。各ログインは、定義されているクラスのリストと比較される。ログインしたユーザーは、一致した最初のクラスのメンバーと見なされる
ユーザー数
クラスが接続可能な曜日と 1 日の時間帯。任意の曜日を指定する場合は Any を指定する
ユーザーがアクセスを拒否された場合に表示されるメッセージファイル
limit anon 50 Wk0800-1800 /etc/ftpd/ftpmsg.deny limit anon 100 Any /etc/ftpd/ftpmsg.deny limit guest 100 Any /etc/ftpd/ftpmsg.deny |
前述の例の最初の行では、毎週勤務時間中のクラス anon のユーザーの同時ログイン数が 50 に制限されています。2 行目では、勤務時間外の anon のユーザーの同時ログイン数を 100 に制限しています。最後の行では、常時 guest ユーザーの同時ログイン数が 100 に制限されています。日時パラメータの指定方法の詳細は、ftpaccess(4) のマニュアルページを参照してください。
前述の例では、そのほかに、指定したログイン制限数に達した場合に /etc/ftpd/ftpmsg.deny ファイルの内容が返されることを示しています。この場合、ftpmsg.deny は存在するものと仮定しています。/usr/sbin/ftpcount コマンドを使用して、特定の時刻にログインしている各クラスのユーザーの数とログイン制限を表示する方法については、ftpcount(1) のマニュアルページを参照してください。
ユーザーは、その時刻の指定ログイン制限数に達していなければ、FTP サーバーへのログインを許可されます。匿名ユーザーは、ユーザー ftp としてログインします。実ユーザーは、自分自身としてログインします。ゲストユーザーは、アクセス特権を制限する chroot 環境を持つ実ユーザーとしてログインします。
/usr/sbin/ftpwho コマンドを使用して、FTP サーバーにログインするユーザーの識別情報を検査する方法については、ftpwho(1) のマニュアルページを参照してください。
必要な情報を誤入力するなどの理由で FTP サーバーへのログインが失敗すると、通常はログインが繰り返されます。ユーザーは、特定回数連続してログインを試行できます。その回数を超えるとメッセージが syslog ファイルに記録されます。その時点でユーザーとの接続は切断されます。ログイン失敗時の試行回数を制限するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
loginfails n |
FTP 接続が切断されるまでのログインに失敗できる回数を割り当てるキーワード
ログインに失敗できる回数
loginfails 10 |
この例では、ユーザーがログイン試行に 10 回失敗すると FTP サーバーから接続を切断されることを示します。
/etc/ftpd/ftpusers には、FTP サーバーへのログインを拒否するユーザーの名前が列挙されています。ログインが試行されると、FTP サーバーは /etc/ftpd/ftpusers ファイルを検査して、そのユーザーからのアクセスを拒否するかどうかを判定します。ユーザーの名前がそのファイルにない場合は、次に /etc/ftpusers ファイルを検査します。
/etc/ftpusers の中にユーザー名に一致するものがあった場合、使用を差し控えるべきファイルで一致するユーザー名が見つかったことを示す syslogd メッセージが書き込まれます。また、このメッセージでは、/etc/ftpusers の代わりに /etc/ftpd/ftpusers を使用することを推薦します。
/etc/ftpusers ファイルのサポートは、本リリースでは推奨されていません。FTP サーバーをインストールする時に /etc/ftpusers ファイルがすでに存在している場合は、/etc/ftpd/ftpusers に移動されます。
詳細は、syslogd(1M)、in.ftpd(1M)、および ftpusers(4) のマニュアルページを参照してください。
root daemon bin sys adm lp uccp nuucp listen nobody noaccess nobody4 |
この例では、ftpusers ファイルの通常のエントリが列挙されています。ユーザー名は /etc/passwd ファイルのエントリに一致します。通常このリストには、スーパーユーザー root、その他の管理に使用するユーザー、システムアプリケーションを示すユーザーが含まれます。
root エントリは、セキュリティ手段の 1 つとして ftpusers に追加されています。デフォルトのセキュリティポリシーでは、root のリモートログインを拒否します。また、/etc/default/loginfile ファイルの CONSOLE エントリとして設定されているデフォルト値も同じポリシーに従っています。login(1) を参照してください。
これまでに説明した制御方法以外に、ftpaccess ファイルに明示的に文を追加して FTP サーバーへのアクセスを制限することができます。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
デフォルトでは、すべてのユーザーはデフォルト (非仮想) FTP サーバーへのアクセスを許可されています。特定のユーザー (anonymous 以外) のアクセスを拒否するには、次のエントリを追加します。
defaultserver deny username [username...] |
アクセスの拒否または許可を設定する非仮想サーバーの識別に使用するキーワード
defaultserver へのアクセスを制限するユーザーのログイン名。
deny 行に列挙されていないユーザーのアクセスを許可するには、次の行を追加します。
defaultserver allow username [username...] |
匿名ユーザーのアクセスを拒否するには、次のエントリを追加します。
defaultserver private |
defaultserver deny * defaultserver allow username |
この例では、FTP サーバーは、anon ユーザーと allow 行に列挙されているユーザー以外のユーザーのアクセスをすべて拒否するように設定されています。
また、ftphosts ファイルを使用して、複数のホストからの特定のログインアカウントのアクセスを拒否することができます。その他の情報は、ftphosts(4) のマニュアルページを参照してください。
FTP サーバーにアクセスするには、まずログインする必要があります。FTP サーバーは、実ユーザー、ゲストユーザー、匿名ユーザーの 3 種類のユーザーログインアカウントをサポートします。
実ユーザーには、FTP サーバーが動作するシステム上の端末セッションの確立を許可するアカウントがあります。ディレクトリとファイルのアクセス権の制約は受けますが、実ユーザーはディスク構造全体を参照できます。
ゲストユーザーも、FTP サーバーにログインするためのアカウントを必要とします。各ゲストアカウントは、ユーザー名とパスワードを使用して設定されます。端末セッションを確立できないように、ゲストには有効なログインシェルは割り当てません。ログイン時に、FTP サーバーは chroot(2) 操作を実行して、ゲストが参照できるサーバーのディスク構造を制限します。
FTP サーバーへのアクセスを許可できるように、実ユーザーとゲストユーザーのログインシェルを /etc/shells ファイルに列挙する必要があります。
匿名ユーザーは、ftp または anonymous をユーザー名として使って FTP サーバーにログインします。規約では、匿名ユーザーはパスワードの代わりに電子メールアドレスを入力します。
ログイン時に、FTP サーバーは chroot(2) 操作を実行して、匿名ユーザーが参照できるサーバーのディスク構造を制限します。ゲストユーザーにはそれぞれ独立した領域を作成できますが、匿名ユーザーは全員が単一のファイル領域を共有します。
実ユーザーとゲストユーザーは、個別のアカウントとパスワードを使用してログインしますが、本人以外はその存在を知りません。匿名ユーザーは、誰でも知っているアカウントでログインします。可能性として、このアカウントは誰でも使用できます。大規模なファイル配布システムのほとんどは匿名アカウントを使用して作成します。
実ユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。
ユーザーに、端末セッションの確立に使用可能なユーザー名とパスワードで設定されたアカウントがあることを確認します。
詳細は、『Solaris のシステム管理 (基本編)』の「ユーザーアカウントとグループの管理 (概要)」を参照してください。
実ユーザーが ftpaccess ファイルのクラスのメンバーであることを確認します。
ftpaccess に定義されたユーザークラスについては、FTP サーバークラスの定義方法 を参照してください。
ユーザーのログインシェルが /etc/shells ファイルに列挙されていることを確認します。
ftpconfig スクリプトを使用して、すべての必要なシステムファイルをホームディレクトリにコピーします。ゲストユーザーとゲストのホームディレクトリがすでに存在する場合は、ftpconfig スクリプトは現在のシステムファイルでホームディレクトリ下の領域を更新します。
詳細は、ftpconfig(1M) のマニュアルページを参照してください。
匿名ユーザー用のユーザー名は anonymous か ftp ですが、FTP ゲスト用のユーザー名は固定されていません。実ユーザー名として使用できる名前であれば、どのような名前でも選択できます。
ゲストユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。
useradd スクリプトを使用して、ログインシェルが /bin/true、ホームディレクトリが /root_dir/./home_dir であるようなゲストユーザーアカウントを作成します。
詳細は、useradd(1M) のマニュアルページと『Solaris のシステム管理 (基本編)』の「ユーザーアカウントとグループの管理 (概要)」を参照してください。
この手順では、/home/guests/./guest1 は guest1 というユーザーのホームディレクトリの名前として使用されます。
# /usr/sbin/useradd -m -c "Guest FTP" -d \ /home/guests/./guest1 -s /bin/true guest1 |
ゲストアカウントにパスワードを割り当てます。
guestuser エントリを ftpaccess ファイルに追加します。
guestuser guest1 |
さらに、ftpaccess ファイルで guestgroup 機能を使用して、複数のゲストユーザーを指定することができます。ftpaccess ファイルで guest-root 機能を使用すると、ゲストユーザーのホームディレクトリパスで /./ を指定する必要がなくなります。
ftpaccess ファイルで、ゲストユーザーが class のメンバーであることを確認します。詳細は、FTP サーバークラスの定義方法 を参照してください。
ftpconfig スクリプトを使用して、chroot 領域の必要なファイルを作成します。
/usr/sbin/ftpconfig -d /home/guests |
/bin/true が /etc/shells ファイルに列挙されていることを確認します。/etc/shells ファイルの作成方法 を参照してください。
この例では、FTP 領域は /home/guests ディレクトリに設定されます。
# /usr/sbin/ftpconfig -d /home/guests Updating directory /home/guests |
ftpconfig スクリプトは、anonymous アカウントを作成し、ホームディレクトリに必要なファイルを作成します。
詳細は、ftpconfig(1M) のマニュアルページを参照してください。
匿名ユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。
ftpconfig スクリプトを使用して、匿名ユーザーアカウントを作成します。
# /usr/sbin/ftpconfig anonymous-ftp-directory |
ftpaccess ファイルで、匿名ユーザーが class に割り当てられていることを確認します。
詳細は、FTP サーバークラスの定義方法 を参照してください。
この例では、FTP 領域は /home/ftp ディレクトリに設定されます。
# /usr/sbin/ftpconfig /home/ftp Creating user ftp Updating directory /home/ftp |
次に、FTP ゲストユーザー用の /bin/true が含まれる /etc/shells ファイルの例を示します。
/sbin/sh /bin/csh /bin/jsh /bin/ksh /bin/remsh /bin/rksh /bin/rsh /bin/sh /usr/bin/csh /usr/bin/ksh /usr/bin/bash /usr/bin/tcsh /usr/bin/zsh /bin/true |
FTP サーバーを構成して、特定のイベントに関連するメッセージを FTP クライアントに返すことができます。ユーザーが FTP サーバーにログインするときに表示される開始メッセージを設定することができます。また、ユーザーが別のディレクトリに移動する場合にメッセージを表示することもできます。
メッセージファイルには、プレーンテキストだけでなく、1 つまたは複数のマジッククッキーを設定できます。マジッククッキーは、% (パーセント記号) と、その後に続く 1 文字から構成されます。クッキーをマジックテキストに組み込む場合、メッセージファイルが呼び出された時点でクッキーに関連付けられた情報が画面に表示されます。
たとえば、メッセージテキストにクッキー %L が含まれているとします。
Welcome to %L! |
メッセージが表示されるとき、マジッククッキー %L は、ftpaccess ファイルの hostname 文で定義されたサーバー名で置き換えられます。サポートされているメッセージクッキーの完全なリストは、ftpaccess(4) のマニュアルページを参照してください。
ホスト名が ftpaccess ファイルに定義されていない場合、ローカルマシンのデフォルトホスト名が使用されます。
次に、マジッククッキーを使用するメッセージファイルの例を示します。
Welcome to %L -- local time is %T. You are number %N out of a maximum of %M. All transfers are logged. If your FTP client crashes or hangs shortly after login please try using a dash (-) as the first character of your password. This will turn off the informational messages that may be confusing your FTP client. Please send any comments to %E. |
ユーザーがログインした後、システム関連またはアプリケーション関連のメッセージが画面に表示されます。ftpaccess ファイルには、関連付けられた message 文をトリガするイベントが列挙されています。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
message message_file [when [class ...]] |
ユーザーがログインしたとき、または作業ディレクトリを変更するコマンドを実行したときに表示されるメッセージファイルの指定に使用するキーワード
表示するメッセージファイルの名前
login または cwd=dir と設定されるパラメータ。 例を参照すること
class を指定すると、メッセージの表示を特定のクラスのメンバーに限定できる
message /etc/ftpd/Welcome login anon guest message .message cwd=* |
この例では、クラス anon または guest のユーザーがログインするときに /etc/ftpd/Welcome ファイルが表示されることを示します。2 行目では、すべてのユーザーに対して現在の作業ディレクトリにある .message ファイルが表示されることを示します。
メッセージファイルは、ゲストユーザーおよび匿名ユーザーの chroot ディレクトリからの相対位置に作成します。
ディレクトリに最初に移動したとき、README ファイルを表示することができます。README オプションを構成するには、次のエントリを ftpaccess ファイルに追加します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
readme message_file [when [class...]] |
ユーザーがログインするか、作業ディレクトリを変更するときに確認するメッセージファイルの指定に使用されるキーワードメッセージファイルが存在する場合、ユーザーはその存在を示す通知と、ファイルの更新日付を受け取る
確認するメッセージファイルの名前
login または cwd=dir と設定されるパラメータ。 例を参照すること
class を指定すると、メッセージの表示を特定のクラスのメンバーに限定できる
greeting キーワードと banner キーワードを使用して、ユーザーにメッセージを送信することもできます。ftpaccess(4) のマニュアルページを参照してください。
readme README* login readme README* cwd=* |
この例では、ログイン時、またはディレクトリ変更時に、README* に一致するファイルをすべて表示することを示します。この例で使用されている設定に基づいたログイン例を次に示します。
% ftp earth Connected to earth. 220 earth FTP server ready. Name (earth:rimmer): ftp 331 Guest login ok, send your complete e-mail address as password. Password: 230- 230-Welcome to earth -- local time is Thu Jul 15 16:13:24 1999. 230- 230-You are number 1 out of a maximum of 10. 230-All transfers are logged. 230- 230-If your FTP client crashes or hangs shortly after login please try 230-using a dash (-) as the first character of your password. This will 230-turn off the informational messages that may be confusing your FTP 230-client. 230- 230-Please send any comments to ftpadmin@earth. 230- 230 Guest login ok, access restrictions apply. ftp> cd pub 250-Please read the file README 250- it was last modified on Thu Jul 15 16:12:25 1999 - 0 days ago 250 CWD command successful. ftp> get README /tmp/README 200 PORT command successful. 150 Opening ASCII mode data connection for README (0 bytes). 226 ASCII Transfer complete. ftp> quit 221 Goodbye. |
ここで説明する FTP サーバーのアクセス制御は、Solaris 9 オペレーティング環境で使用できる標準のファイルとディレクトのアクセス制御を補足するものです。Solaris の標準コマンドを使用して、ファイルへのアクセス、ファイルの変更、またはファイルのアップロードが可能なユーザーを制限します。chmod(1)、chown(1)、chgrp(1) のマニュアルページを参照してください。
ftpaccess ファイル内のアクセス権機能を使用してどの種類のユーザーにどのコマンドの実行を許可するかを指定するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
command yes|no typelist |
chmod、delete、overwrite、rename、または umask のいずれか
ユーザーにコマンドの発行を許可または拒否する
anonymous、guest、および real のキーワードを任意に組み合わせてコンマで区切って並べたリスト
次に、FTP サーバー上のファイルアクセス機能に対して設定されているアクセス権の例を示します。
chmod no anonymous, guest delete no anonymous overwrite no anonymous rename no anonymous umask no guest, anonymous |
匿名ユーザーは、ファイルの削除、上書き、名前変更を行うことができない
ゲストユーザーと匿名ユーザーは両方とも、アクセスモードの変更、umask のリセットができない
FTP サーバー上のディレクトリのアクセス権を設定することにより、FTP サーバーへのアップロードと FTP サーバーからのダウンロードを制御できます。デフォルトでは、匿名ユーザーはアップロードを実行できません。匿名ユーザーにアップロードを許可する場合は、充分な注意が必要です。
ftpaccess ファイルに指令を追加して、アップロードのアクセス権と、アップロード異常終了時に表示するエラーメッセージを指定します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
ユーザーにファイルのアップロードを許可するには、次のエントリを追加します。
upload [absolute|relative] [class=<classname>]... [-] root-dir \ dirglob yes|no owner group mode [dirs|nodirs] [<d_mode>] path-filter typelist mesg allowed_charset {disallowed regexp...} |
ホームディレクトリ (chroot() の引数) として root-dir を持つユーザーに適用するキーワード。root-dir に “*” を指定して、任意のホームディレクトリを一致させることができる
root-dir ディレクトリパスを、絶対パスとして解釈するか、または現在の chroot ディレクトリからの相対パスとして解釈するかを指定するパラメータ
任意個数の class=<classname> 制限の指定に使用するキーワード。制限が指定された場合、upload 節が有効になるのは、現在のユーザーが指定されたクラスのメンバーである場合に限定される
ユーザーのルートディレクトリと匿名ユーザーのホームディレクトリ
ディレクトリ名に一致するパターン。アスタリスクを任意の場所に使用することも、単独で使用して任意のディレクトリを表すこともできる
FTP サーバーへのアップロードを許可または拒否する変数
dirnames にアップロードされたファイルの所有者
dirnames にアップロードされたファイルに関連付けられているグループ
アップロードされたファイルのアクセス権の指定に使用するパラメータ。デフォルトモード 0440 の場合、匿名アカウントのユーザーはアップロードされたファイルを読み取れない
dirnames に列挙されたディレクトリに、ユーザーがサブディレクトリを作成することを許可または拒否するキーワード
新しく作成したディレクトリのアクセス権を決定するオプションモード
アップロードされたファイルの名前を制御するキーワード
anonymous、guest、および real のキーワードを任意に組み合わせてコンマで区切って並べたリスト
regexp 条件に一致しない場合に表示されるメッセージファイル
ファイル名で使用できる、または使用できない、英数字
upload /export/home/ftp /incoming yes ftpadm ftpadmin 0440 nodirs path-filter anonymous /etc/ftpd/filename.msg ^[-A-Za-z0-9._]*$ ^[.-] |
この例では、次のことが示されています。
/export/home/ftp への chroot を使用する FTP ユーザーアカウントは、/incoming ディレクトリにアップロードすることができる。アップロードされたファイルの所有者は、ユーザー ftpadm、グループ ftpadmin である。モードは nodirs キーワード付きで 0440 に設定され、匿名ユーザーによるサブディレクトリの作成を拒否する
匿名ユーザーの場合、ファイル名は A-Z、a-z、0-9、. (ドット記号)、- (ダッシュ記号)、_ (下線) の任意の並びである。ファイル名を . (ドット記号) または - (ダッシュ記号) で始めることはできない。ファイル名がこの条件を満足しない場合、/etc/ftpd/filename.msg メッセージファイルが FTP 管理者により作成済みであれば、そのファイルが表示される。このメッセージの後に、FTP サーバーのエラーメッセージが表示される
匿名ユーザーによるアップロードが許可されているディレクトリの所有者とアクセス権は、厳密に制御する必要があります。FTP 管理者は FTP サーバーにアップロードされるすべてのファイルの所有者である必要があります。匿名ユーザーにファイルのアップロードを許可する場合、FTP 管理者を作成する必要があります。ディレクトリの所有者はユーザー ftpadm、グループ ftpadm、アクセス権は 3773 である必要があります。
FTP サーバーにアップロードされるファイルのアクセスモードは 0440 である必要があります。モードを 0440 にすると、匿名アカウントのユーザーはアップロードされたファイルを読み取れません。この制限により、サーバーが第 3 者によってファイル配布の場所として使用されるのを防ぎます。
アップロードされたファイルを配布可能にするために、FTP 管理者はそれらのファイルを公共ディレクトリに移動することができます。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加して、ユーザーがファイルを読み取れないようにします。
noretrieve [absolute|relative] [class=classname]... [-] filename ... |
特定のファイル (複数可) の読み取りの拒否に使用するキーワード
root-dir ディレクトリパスを、絶対パスとして解釈するか、または現在の chroot ディレクトリからの相対パスとして解釈するかを指定するパラメータ
noretrieve 制限を適用するユーザーの class=<classname> の指定に使用するキーワード
ユーザーによる読み取りを拒否するファイルの名前
noretrieve /etc/passwd |
この例では、すべてのユーザーが /etc/passwd の読み取りを拒否されます。
仮想ホスティングにより、FTP サーバーは同一マシン上の複数ドメインをサポートできます。各仮想ホストには、独立した論理インタフェースと IP アドレスが必要です。
FTP サーバーは、限定と完全の 2 種類の仮想ホスティングをサポートします。限定仮想ホスティングでは、すべての仮想ホストが同じ構成ファイルを使用します。完全仮想ホスティングでは、各仮想ホストは個別の構成ファイルを使用できます。
デフォルトでは、実ユーザーとゲストユーザーは、仮想ホストへのログインを拒否されます。次に示す ftpaccess 指令を設定すると、デフォルトを上書きできます。
特定のユーザーにアクセスを許可する場合 virtual address allow username 匿名ユーザーのアクセスを拒否する場合 virtual address private username |
詳細は、ftpaccess(4) のマニュアルページを参照してください。
限定仮想ホスティングでは、仮想 FTP サーバーの部分的なサポートを提供します。限定仮想ホスティングのサポートを有効にするには、仮想ルートディレクトリを指定します。必要であれば、次に示す仮想ホストのパラメータを ftpaccess ファイルに設定することもできます。
banner
logfile
hostname
ftpaccess ファイル内のすべての指令は、すべての仮想サーバーによりグローバルに共有されます。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
virtual address root|banner|logfile path virtual address hostname|email string |
仮想サーバー機能を有効にするために使用するキーワード
仮想サーバーの IP アドレス
仮想サーバーのルートディレクトリ
仮想サーバーへの接続が確立したときに表示されるバナーファイル
仮想サーバーに対するファイル転送の記録
仮想サーバー上のディレクトリとファイルの場所の指定に使用する変数
メッセージファイルと HELP コマンドで使用される電子メールアドレス
グリーティングメッセージやステータスコマンドで表示されるホスト名
email パラメータまたは hostname パラメータの指定に使用する変数
hostname を仮想サーバーの address として使用することは可能ですが、それよりも IPv4 アドレスの使用を強く推奨します。hostname に一致するホストが見つかるためには、FTP 接続を受信するときに DNS が使用可能である必要があります。IPv6 ホストの場合は、IPv6 アドレスよりもホスト名を使用します。
virtual 10.1.2.3 root /var/ftp/virtual/ftp-serv virtual 10.1.2.3 banner /var/ftp/virtual/ftp-serv/banner.msg virtual 10.1.2.3 logfile /var/log/ftp/virtual/ftp-serv/xferlog |
この例では、仮想 FTP サーバー上の root ディレクトリ、banner、logfile の場所を設定します。
ftpaddhost(1M) スクリプトを -l オプション付きで使用して、限定仮想ホストを構成できます。
次の例では、ftpaddhost を -l -b -x オプションとともに実行して、テストバナーと、仮想ルート /var/ftp/virtual/10.1.2.3 の下にあるログファイル /var/ftp/virtual/10.1.2.3/xferlog を使用する限定仮想ホスティングを構成します。
ftpaddhost -l -b -x /var/ftp/virtual/10.1.2.3/xferlog \ /var/ftp/virtual/10.1.2.3 |
完全仮想ホスティングでは、各仮想ドメインは個別の構成ファイルを使用できます。FTP サーバー上の仮想ホスティングの完全サポートを有効にするには、特定のドメインについて次に示す FTP 構成ファイルを作成または変更します。
ftpaccess
ftpusers
ftpgroups
ftphosts
ftpconversions
詳細は、ftpaccess(4)、ftpusers(4)、ftpgroups(4)、ftphosts(4)、ftpconversions(4) のマニュアルページを参照してください。
構成ファイルの個別のバージョンが見つからない場合は、/etc/ftpd ディレクトリに置かれた構成ファイルのマスターバージョンを使用します。
スーパーユーザーになります。
次のエントリを /etc/ftpd/ftpservers ファイルに追加します。
address /config-file-dir |
仮想サーバーの IP アドレス
仮想ホスト用にカスタマイズされた構成ファイルが置かれるディレクトリ
hostname を仮想サーバーの address として使用することは可能ですが、それよりも IPv4 アドレスの使用を強く推奨します。hostname に一致するホストが見つかるためには、FTP 接続を受信するときに DNS が使用可能である必要があります。IPv6 ホストの場合は、IPv6 アドレスよりもホスト名を使用します。
仮想ホスト用にカスタマイズされた FTP サーバー構成ファイルを作成するには、/etc/ftpd ディレクトリにある構成ファイルのマスターバージョンを /config-file-dir ディレクトリにコピーします。
詳細は、ftpservers(4) のマニュアルページを参照してください。
# # FTP Server virtual hosting configuration file # 10.1.2.3 /net/inet/virtual/somedomain/ 10.1.2.4 /net/inet/virtual/anotherdomain/ |
この例では、仮想サーバー上の 2 つの異なるドメインの IP アドレスを指定します。
ftpaddhost(1M) スクリプトを -c オプション付きで使用して、完全仮想ホストを構成できます。
次の例では、ftpaddhost を -l -b -x オプションとともに実行して、テストバナーと、仮想ルート /var/ftp/virtual/10.1.2.3 の下にあるログファイル /var/ftp/virtual/10.1.2.3/xferlog を使用する限定仮想ホスティングを構成します。
ftpaddhost -l -b -x /var/ftp/virtual/10.1.2.3/xferlog \ /var/ftp/virtual/10.1.2.3 |
FTP サーバーを起動するには、次の 2 つの方法があります。
inetd.conf ファイルに nowait エントリを追加して FTP サーバーを起動することができます。サイトで処理する接続が多数になる場合、FTP デーモンをスタンドアロンモードで実行することもできます。詳細は、inetd.conf(4) のマニュアルページを参照してください。また、その他のコマンド行オプションについては、in.ftpd(1M) のマニュアルページを参照してください。
スーパーユーザーになります。
nowait エントリを inetd.conf ファイルに追加します。
ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -a |
-a オプションの指定により、ftpaccess ファイルの使用を有効にします。
inetd にシグナルを送信し、inetd.conf ファイルを再読み取りします。
# pkill -HUP inetd |
FTP サーバーを、inetd.conf とは無関係に、スタンドアロンサーバーとして実行することもできます。
スタンドアロンサーバーの応答時間は常に可能な限り最短であり、FTP サービス専用の大規模サーバー向けです。スタンドアロンサーバーは一切再起動する必要がないので、専用サーバーに適した短い接続応答時間を実現します。スタンドアロンサーバーは、混雑していない時間帯も含めて、常に動作しており、永久に接続要求を待ちます。
スーパーユーザーになります。
inetd.conf ファイルの ftp サービスの行の先頭に # 記号を挿入して、そのエントリをコメントアウトします。
inetd にシグナルを送信し、inetd.conf ファイルを再読み取りします。
# pkill -HUP inetd |
スタンドアロン FTP サーバーを起動します。
# /usr/sbin/in.ftpd -a -S |
FTP サーバー起動スクリプトにこの行を追加します。システム起動スクリプトの作成については、『Solaris のシステム管理 (基本編)』の「実行制御スクリプト」を参照してください。
ftpshut(1M) コマンドは、特定の時刻に FTP サーバーを停止します。
ftpshut を実行する場合、コマンド行オプションでシステム停止時刻を指定するファイルを作成します。この時刻になると、それ以上の新しい接続は受け付けられなくなり、既存の接続は切断されます。この停止時刻の情報に基づいて、サーバーが停止することがユーザーに通知されます。ftpshut により作成されるファイルの位置は、ftpaccess ファイルの shutdown 指令によって指定します。
ftpshut を実行し、ftpaccess ファイルに shutdown 指令を追加するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
shutdown path |
FTP サーバーの停止時刻が予定されているかどうかを定期的に検査するファイルへの path の指定に使用するキーワード
ftpshut コマンドが作成したファイルの場所
ftpshut コマンドを実行します。
ftpshut [ -V ] [ -l min] [ -d min] time [warning-message...] |
FTP サーバーが停止することをユーザーに通知する手順を提供するコマンド
著作権情報とバージョン情報を表示した後、接続を切断するように指定するオプション
FTP サーバーへの新しい接続を拒否する時間の調整に使用されるフラグ
FTP サーバーへの既存の接続を切断する時間の調整に使用されるフラグ
停止時刻として now を指定すると即時停止する。未来における停止時刻を指定するには、「+number」または「HHMM」のどちらかの形式で指定する
停止通知メッセージ
ftprestart コマンドを使用して、FTP サーバーを停止後に再起動します。
詳細は、ftpshut(1M)、ftpaccess(4)、ftprestart(1M) のマニュアルページを参照してください。
ここでは、FTP サーバーに関する問題をデバッグする方法についていくつか説明します。
FTP サーバーは、/etc/syslog.conf ファイルでデーモンメッセージの出力先として指定された場所に、デバッグに役立つメッセージを書き込みます。FTP サーバーに問題が発生した場合、まずこのファイルで関連するメッセージを検査します。
FTP サーバーメッセージは、機能デーモンにより制御されます。FTP サーバーから /var/adm/message にメッセージを送信し、syslogd にその構成ファイルを再読み取りさせるには、次の手順を実行します。
次のようなエントリを /etc/syslog.conf ファイルに追加します。
daemon.info /var/adm/message |
syslogd にシグナルを送信して、その構成ファイルを再読み取りさせます。
# pkill -HUP syslogd |
この操作により、FTP サーバーから有益な情報を含むメッセージが /var/adm/messages に書き込まれます。
greeting text 機能を使用して、適切な内容の ftpaccess ファイルが使用されていることを検査するには、次の手順を実行します。
FTP ユーザーがどのコマンドを実行したかを確認するには、ftpaccess の log commands ログ機能を使用します。