proftpd 1.2 インストールメモ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # 特徴 #--------------------------------------------------------------------------------------------- proftpd は従来のFTP サーバーソフトウェアとは下記の点で異なります。 ・Apache ウェブサーバを使った経験のある管理者なら直感的にわかるような、directive とdirective グループを使った単一の設定ファイル ・Apache の「.htaccess」に類似する「.ftpaccess」を使ったディレクトリごとの設定 ・マルチバーチャルFTP サーバとanonymous FTP サーバの簡単な設定 ・システムのロードによってスタンドアローン、または、inetd から走らせることが可能 ・Anonymous FTP のroot ディレクトリに特定のディレクトリ、システムバイナリ、その他のシステム ファイルを必要としない ・SITE EXEC コマンドのような外部のプログラムを実行しない ・unix のパーミッションや user/group のオーナーによってディレクトリやファイルを隠す ・スタンドアローンモードではroot 権限を利用したアタックを防ぐため、特権ユーザのいない設定で走 る ・ロギングとutmp/wtmp をサポートしている。ロギングはwu-ftpd 標準互換で拡張したロギングを利用可 能 ・Shadow password と期限付きアカウントをサポート # インストール方法 #--------------------------------------------------------------------------------------------- proftpd 専用のユーザー/グループを作成します。ここで作成している”ftp”ユーザーは通常初期の状態で登録されています。 # groupadd ftpd # useradd -g ftpd -d /usr/local/proftpd -s /bin/false ftp proftpd のソースをインターネットよりダウンロード後、ソースを解凍します。 # su root # cd /usr/local/src # wget proftpd-1.2.7p.tar.gz # tar zxvf proftpd-1.2.7p.tar.gz proftpd を解凍後、ディレクトリに入りインストール作業を行います。 # cd proftpd-1.2.7p # ./configure --prefix=/usr/local/proftpd # make # make install # Passive モードとActive モードについて #--------------------------------------------------------------------------------------------- FTP プロトコルが使用するポートは2 種類あります。一つはコマンド等の制御コードの送信に使われる制御ポート(21 port) もう一つは実データの送信の使われるデータポート(20 port) です。 FTP は上記2 つのポートを使用するが故、従来より度々クラッカーの標的とされていました。そのこと例としてデータポートを狙ったFTP バウンスなどがあります。 FTP プロトコルでは、データを送受信する際の手順は2通りあります。 > Active モードを使ったデータ転送手順 サーバーのデータポート(20 port) よりPORT コマンドで指示されたクライアントIP のポートへデータコネクションを確立した後、データ転送する > Passive モードを使ったデータ転送手順 Active モードとは逆に、クライアントからサーバーの特定ポートへデータコネクションを確立する。この際、クライアント・サーバーのそれぞれのデータポートは任意に決定されます。 一度は聞いたことがあると思いますが、Active モードでは”ルータ・ファイアーウォール越え”ができません。 と言うのも、ルータを用いること自体、FTP するクライアントはNAT(IP マスカレードとも言う) の内部にあると考えられます。つまり、クライアントはルータによってDHCP され、ローカルIP を割り当てられています。 この時、FTP サーバーから接続を開始するActive モードでは、データ転送先のクライアントはFTP サーバーからはルータとして認識されます。NAT 内部のクライアントを特定する術がFTP サーバーにはないのですら・・・。 通常、FTP サーバーとクライアントの間にNAT ルータがある場合はPassive モードを使うと良い所以はここにあります。 # FTP のみの仮想ユーザーについて #--------------------------------------------------------------------------------------------- FTP ユーザーは通常、linux システムユーザーと 1 対 1 の関係にあります。この場合、FTP ユーザーを作成する度にシステムユーザーを消費するのでなにかと都合が悪いので、proftpd ではFTP のみの仮想ユーザーを作成することができ、FTP ユーザーとlinux システムユーザーが 多 対 1 の関係になるよう設定できるのです。 ● 仮想ユーザーを利用するための設定 proftpd で仮想ユーザーによる認証を行うために、proftpd.conf に次の記述を追加します。 ↓ ココから ------------------------------------------------ # PAM による認証を行う #AuthPAMAuthoritative on #AuthPAMConfig ftp # 認証は独自ファイル(仮想ユーザー) で行う AuthUserFile /usr/local/proftpd/etc/ftpd.passwd AuthGroupFile /usr/local/proftpd/etc/ftpd.group AuthOrder mod_auth_file.c ↑ ココまで ------------------------------------------------ ※ 注意 ) PAM による認証は仮想ユーザーによる認証を行う場合は無効としてください。通常、認証方式の優先順位はAuthOrder によって決まるので、AuthOrder にてproftpd の仮想ユーザーによる認証のみを有効としておきます。 ● 仮想ユーザーを登録する 上記、proftpd.conf の設定で、仮想ユーザーによる認証が利用できる状態となりました。そこで、次に貸そうユーザーをproftpd に登録します。登録するには、proftpd のソース一式のうち、/contrib/ ディレクトリに保存されているftpasswd プログラムを利用します。 # cd /usr/local/src/proftpd/contrib/ftpasswd /usr/local/proftpd/bin 上記のようなコマンドでftpasswd プログラムをインストールしてください。インストール後、仮想ユーザーをproftpd に登録します。 # cd /usr/local/proftpd # ./ftpasswd --passwd --file=./etc/ftpd.passwd --name=[ユーザー名] --uid=[ユーザーID] --gid=[グループID] \ --home=[ユーザーホームディレクトリ] --shell=/bin/false # echo '[グループ名]:x:[グループID]:' > ./etc/ftpd.group # chmod 644 ./etc/ftp.* 上記コマンドで以下のファイルが作成されました。 ftp.passwd | 仮想ユーザーをパスワード情報記憶するファイル ftpd.group | 仮想ユーザーのグループ情報を記憶するファイル