このページの対象Linuxディストリビューションは次のものです。
- Debian squeeze amd64
- Ubuntu 11.04 desktop 64bit
- Ubuntu 11.10 desktop 64bit
2011/03/26 作成
2012/03/04 更新
ftpサーバ(vsftpd)の設定
方針
- IPv6、IPv4どちらでもアクセス出来る。
- ASCII転送が出来る。
- ホームディレクトリのpublic_html以下しかアクセス出来ない。
- 許可されたローカルユーザーしかアクセス出来ない。
- アップロードしたファイルにユーザー以外の書込み権を付与しない。
- ftpsでアクセス出来る。(2012/03/04 追記)
作業
インストール
$ sudo apt-get update
$ sudo apt-get install vsftpd
まだ設定が完了していないvsftpdが起動しているので停止させる。
$ sudo /etc/init.d/vsftpd stop
設定
設定ファイルを編集する。
$ sudo nano /etc/vsftpd.conf
設定ファイルはオプション=値の形式で設定する。
=の前後にスペースを入れるとエラーになる。
- listen
- listen=YES
-
スタンドアローン(デーモン)として起動するかの設定。
コメントアウトする。
#listen=YES
- listen_ipv6
- #listen_ipv6=YES
-
スタンドアローン(デーモン)として起動するかの設定。
IPv6で待ち受ける。
listenとlisten_ipv6は片方しか有効に出来ない。
(listen_ipv6=YESとした場合、IPv6、IPv4どちらでもアクセス出来るようになる。)
コメントを外し有効にする。
listen_ipv6=YES
- anonymous_enable
- anonymous_enable=YES
-
anonymousログインを認めるかの設定。
禁止するのでNOにする。
(ubuntu 11.04ではNOになっている。)
anonymous_enable=NO
- local_enable
- #local_enable=YES
-
ローカルユーザーのログインを認めるかの設定。
コメントを外し有効にする。
(ubuntu 11.04では有効になっている。)
local_enable=YES
- write_enable
- #write_enable=YES
-
書込み(アップロード、削除等)を認めるかの設定。
認めるのでコメントを外し有効にする。
write_enable=YES
- local_umask
- #local_umask=022
-
umaskの設定。
ユーザー以外には書込み権を与えないかつ読込み権は与えるのでコメントを外し有効にする。
local_umask=022
- anon_upload_enable
- #anon_upload_enable=YES
-
anonymousログインで書込みを認めるかの設定。
認めないのでコメントのまま。
- anon_mkdir_write_enable
- #anon_mkdir_write_enable=YES
-
anonymousログインでディレクトリの生成を認めるかの設定。
認めないのでコメントのまま。
- dirmessage_enable
- dirmessage_enable=YES
-
新たなディレクトリに初めて入ったときにメッセージを表示するかの設定。
そのままにする。
- use_localtime
- use_localtime=YES
-
ローカルタイムを使用するかの設定。
デフォルトはNOでGMTになる。
そのままにする。
- xferlog_enable
- xferlog_enable=YES
-
ログファイルにアップロードとダウンロードの詳細を記録するかの設定。
そのままにする。
- connect_from_port_20
- connect_from_port_20=YES
-
データ接続でサーバがポート20を送信元ポートにするかの設定。
ポート20を使用するのでそのまま。
- chown_uploads
- #chown_uploads=YES
-
anonymousログインでアップロードされたファイルの所有者を変更するかの設定。
YESにした場合はchown_usernameで指定したユーザーにする。
コメントのまま。
- chown_username
- #chown_username=whoever
-
anonymousログインでアップロードされたファイルの所有者を変更す場合のユーザーを指定する。
コメントのまま。
- xferlog_file
- #xferlog_file=/var/log/vsftpd.log
-
ログファイルのファイル名の設定。
デフォルト(/var/log/vsftpd.log)でよいのでコメントのまま。
- xferlog_std_format
- #xferlog_std_format=YES
-
ログをxferlogのフォーマットにするかの設定。
デフォルト(NO)でよいのでコメントのまま。
- idle_session_timeout
- #idle_session_timeout=600
-
なにもしなかった場合のタイムアウト時間の設定。
デフォルト(300)でよいのでコメントのまま。
- data_connection_timeout
- #data_connection_timeout=120
-
データ転送時に進捗が無い場合のタイムアウト時間の設定。
デフォルト(300)でよいのでコメントのまま。
- nopriv_user
- #nopriv_user=ftpsecure
-
特権がいらない場合の権限の指定。
デフォルト(nobody)でよいのでコメントのまま。
- async_abor_enable
- #async_abor_enable=YES
-
非同期ABORを認めるかの設定。
認めないのでコメントのまま。
- ascii_upload_enable
- #ascii_upload_enable=YES
-
アップロードでASCII転送を認めるかの設定。
認めるのでコメントを外し有効にする。
ascii_upload_enable=YES
- ascii_download_enable
- #ascii_download_enable=YES
-
ダウンロードでASCII転送を認めるかの設定。
認めるのでコメントを外し有効にする。
ascii_download_enable=YES
- ftpd_banner
- #ftpd_banner=Welcome to blah FTP service.
-
接続した時に表示するメッセージを指定する。
そのままにする。
- deny_email_enable
- #deny_email_enable=YES
-
anonymousログインを拒否するリストを有効にするかの設定。
そのままにする。
- banned_email_file
- #banned_email_file=/etc/vsftpd.banned_emails
-
deny_email_enableがYESの場合に拒否するリストのファイル名を指定する。
拒否するリストはメールアドレスで指定する。
そのままにする。
- chroot_local_user
- #chroot_local_user=YES
-
ローカルユーザーがログイン後にホームディレクトリにchrootするかの設定。
ホームディレクトリ以下のみアクセスを認めるのでコメントを外し有効にする。
chroot_local_user=YES
- chroot_list_enable
- #chroot_list_enable=YES
-
chroot_local_userの設定で意味がかわる。
chroot_local_userがNOの場合、chrootするユーザーを指定する設定になる。
chroot_local_userがYESの場合、chrootしないユーザーを指定する設定になる。
コメントを外し有効にする。
chroot_list_enable=YES
- chroot_list_file
- #chroot_list_file=/etc/vsftpd.chroot_list
-
chroot_list_enableがYESの場合のユーザーを記述するファイルを指定する。
デフォルトのまま使用するのでコメントのままでも良いがコメントを外し有効にする。
chroot_list_file=/etc/vsftpd.chroot_list
- ls_recurse_enable
- #ls_recurse_enable=YES
-
ls -Rを使用できるかの設定。
そのままにする。
- secure_chroot_dir
- secure_chroot_dir=/var/run/vsftpd/empty
-
そのままにする。
- pam_service_name
- pam_service_name=vsftpd
-
PAMサービス名の指定。
そのままにする。
- rsa_cert_file
- rsa_cert_file=/etc/ssl/private/vsftpd.pem
-
SSL接続で使用するSSL証明書ファイルを指定する。
ssl_enableがYESになっていないと無視される。
ssl_enable=YESの場合、SSL証明書がないと起動に失敗する。
証明書と秘密鍵が一体になったファイルが必要。
そのままにする。
このままではローカルユーザーは誰でもアクセス出来る。
アクセスできるユーザーを制限するリストを作成する。
リストに載っているユーザーのみアクセス出来るようにする。
またアクセス出来る場所をホームディレクトリのpublic_html以下にのみにする。
設定ファイルに以下の設定を追加する。
- userlist_enable
-
ユーザーリストを使用しアクセスできるユーザーを制限するかの設定。
YESにする。
userlist_enable=YES
- userlist_deny
-
YESの場合、ユーザーリストはアクセスを拒絶するユーザーのリストになる。
NOの場合、ユーザーリストはアクセスを許可するユーザーのリストになる。
NOにする。
userlist_deny=NO
- userlist_file
-
ユーザーリスト用のファイルを指定する。
/etc/vsftpd.user_listにする。
userlist_file=/etc/vsftpd.user_list
- local_root
-
ログイン後に移動するディレクトリを指定する。
chrootが有効になっている場合、chroot後のルートを指定する。
public_htmlにする。
local_root=public_html
指定するディレクトリはシンボリックリンクでも構わない。
"公開"ディレクトリにリンクを張るには次のようにする。
$ ln -s ~/公開 ~/public_html
chroot_list_enableをYESにしたのでchroot_list_fileが存在しないとログインを拒絶される。
空の/etc/vsftpd.chroot_listを作成する。
$ sudo touch /etc/vsftpd.chroot_list
アクセスを許可するユーザーリストを作成する。
$ sudo nano /etc/vsftpd.user_list
リストはユーザー名をそのまま記述すればよい。
ユーザー1
ユーザー2
ユーザー3
ユーザー名がdummyuserの場合、以下になる。
dummyuser
ftps用の設定
SSL証明書
内向きの設定なのでSSL証明書(自己署名証明書)を作成する。
公開サーバの場合は正式な証明を購入したほうが良いかもしない。
webサーバ(SSLサイト)と共通の証明書が利用できる。
SSL証明書を作成するためのパッケージがインストールされているか確認する。
$ dpkg -l | grep ssl-cert
インストールされていなければインストールする。
$ sudo apt-get install ssl-cert
SSL証明書を作成する。
make-ssl-certコマンドはopenssl reqコマンドのラッパーになっている。
openssl reqコマンドを直接使用するより簡単にSSL証明書を作成出来る。
vsftpdではSSL証明書と秘密鍵が一体になったファイルが必要みたいだ。
証明書がなかったり、秘密鍵がついてなかったり、あるいは秘密鍵だけだったりするとvsftpdの起動に失敗する。
$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/vsftpd.pem
SSL証明書のパーミッションを変更する。
$ sudo chown root:ssl-cert /etc/ssl/private/vsftpd.pem
$ sudo chmod 640 /etc/ssl/private/vsftpd.pem
設定ファイル
設定ファイルにftpsの設定を追加する。
ftpsに対応していないクライアントからの接続を許可する場合は
Explicitモード にしてforce_local_data_sslとforce_local_logins_sslをNOにする。
ftps対応クライアントからの接続のみを許可する場合は
Explicitモード にしてforce_local_logins_sslをYESにするかImplicitモードにする。
ここではftpsに対応したクライアントと対応していないクライアントのどちらのアクセスも許可する設定をする。
$ sudo nano /etc/vsftpd.conf
- ssl_enable
-
SSLを有効にするかの設定。
YESにする。
ssl_enable=YES
- force_local_data_ssl
-
データの送受信にSSL接続だけを使用するかの設定。
YESにするとftpsに対応していないクライアントと通信出来なくなる。
ftps対応のクライアントとしか通信しないならYESにしても良い。
NOにする。
force_local_data_ssl=NO
- force_local_logins_ssl
-
Explicitモード時にコマンドの送受信にSSL接続だけを使用するかの設定。
YESにするとftpsに対応していないクライアントと通信出来なくなる。
ftps対応のクライアントとしか通信しないならYESにしても良い。
NOにする。
force_local_logins_ssl=NO
- ssl_tlsv1
-
TLS v1プロトコル接続を許可するかの設定。
TLSはSSLを元にIETFが標準化したプロトコル。
YESにする。
ssl_tlsv1=YES
- ssl_sslv2
-
SSL v2プロトコル接続を許可するかの設定。
TLS v1プロトコルが有効だとTLS v1が優先される。
YESにする。
ssl_sslv2=YES
- ssl_sslv3
-
SSL v3プロトコル接続を許可するかの設定。
TLS v1プロトコルが有効だとTLS v1が優先される。
YESにする。
ssl_sslv3=YES
- implicit_ssl
-
Implicitモードにするかの設定。
YESにするとImplicitモードになる。
NOにする、あるいはこの項目を設定しないとExplicitモードになる。
ExplicitモードはAUTHコマンド後に暗号化通信を開始する。
Implicitモードは接続した時点から暗号化通信を開始する。
- listen_port
-
どのポートでlistenするかの設定。
通常は21だがImplicitモードの場合990にすることが多い。
- pasv_max_port
-
ファイヤーウオールが有効になっていると通信を暗号化した場合、
パッシブモードだとnf_conntrack_ftpが開けるべきポート番号が判らず通信に失敗する。
(ログインは出来てもファイル一覧の取得やファイルの転送が出来ない。)
ファイヤーウオールで開けるポートを動的に変更するのではなく静的に決定する。
そのためにポート番号の範囲を限定する。
パッシブモードで使用する最大のポート番号を指定する。
最小のポート番号で60000を指定するのでそれより大きい数を指定する。
60009を指定するが公開サーバなら60099とかにした方が良いかもしれない。
pasv_max_port=60009
- pasv_min_port
-
パッシブモードで使用する最小のポート番号を指定する。
60000を指定す。
pasv_min_port=60000
- allow_anon_ssl
-
anonymousログインでSSL接続を使用するかの設定。
anonymousログイン自体を有効にしていないので設定しない。
ファイヤーウオールの設定
DebianやUbuntu 11.04だとファイヤーウオールがデフォルトで無効になっているがUbuntu 11.10だと有効になってる。
そのためファイヤーウオールを設定するか無効にしないとIPv6で通信できない。
(IPv4の設定はvsftpdをインストールした時点で設定されている。)
ファイヤーウオールはiptablesで実現されているがUbuntuではufwコマンドでiptablesの設定が出来る。
しかし何故かufwコマンドの設定がうまく反映できないことがあるようだ。
(多分新しいルールを追加してファイヤーウオールを無効にして有効にするとその後から反映するみたい。)
リモートログインしか出来ない環境だと設定をミスしSSHの通信が出来なくなると手の打ちようがないので
ufwを使用せずiptablesの設定を直接行ったほうが良いかもしれない。
ファイヤーウオールを無効にする。
$ sudo ufw disable
ファイヤーウオールを有効にする。
$ sudo ufw enable
ファイヤーウオールにftpを有効にするルールを追加する。
(IPv4とIPv6の両方が追加される。)
$ sudo ufw allow ftp
パッシブモードの場合、nf_conntrack_ftpモジュールが必要になる。
nf_conntrack_ftpモジュールがロードされているか確認する。
$ lsmod | grep ftp
ロードされていない場合はロードする。
$ sudo modprobe nf_conntrack_ftp
ファイヤーウオールに990番ポート(ftps Implicitモード)を有効にするルールを追加する。
$ sudo ufw allow ftps
ftpsでパッシブモードを使用する場合はnf_conntrack_ftpがうまく動かないのでポートを静的に開ける必要がある。
60000から60009までを有効にした場合は以下のようにする。
$ sudo ufw allow 60000
$ sudo ufw allow 60001
$ sudo ufw allow 60002
$ sudo ufw allow 60003
$ sudo ufw allow 60004
$ sudo ufw allow 60005
$ sudo ufw allow 60006
$ sudo ufw allow 60007
$ sudo ufw allow 60008
$ sudo ufw allow 60009
サーバ(デーモン)の起動
$ sudo /etc/init.d/vsftpd start
完了
コマンド一覧
- sudo /etc/init.d/vsftpd start
- ftpサーバを開始する。
- sudo /etc/init.d/vsftpd stop
- ftpサーバを停止する。
- sudo /etc/init.d/vsftpd restart
- ftpサーバを再起動する。
- sudo /etc/init.d/vsftpd reload
- 設定ファイルを再読込みする。
- sudo /etc/init.d/vsftpd status
- ステータスを表示する。
- sudo update-rc.d vsftpd defaults
- マシンの起動時に自動的にftpサーバが起動するようにする。
インストール時には自動的に起動するようになっている。
- sudo update-rc.d vsftpd remove
- マシンの起動時に自動的にftpサーバが起動するのをやめる。
- sudo tail /var/log/vsftpd.log
- 新しいログを10行表示する。
- sudo tail -f /var/log/vsftpd.log
- 新しいログを表示し続ける。
(ログが追加されてたら表示する。)
リンク
参考
関連
[Top][Page Top]