このページではLinuxで構築した自宅サーバー上のFTPサーバーvsFTPdローカルユーザーに関する設定方法をビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
FTPサーバーの構築

FTPサーバーについて


vsFTPdの基本設定
(WBEL3,4_CentOS3,4)

ローカルユーザー接続の設定
(WBEL3,4_CentOS3,4)

アノニマスFTPの設定
(WBEL3,4_CentOS3,4)

vsFTPdのコントロール
(WBEL3,4_CentOS3,4)

vsFTPdの動作チェック
(WBEL3,4_CentOS3,4)


vsFTPdの基本設定
(CentOS5)

ローカルユーザー接続の設定
(CentOS5)

アノニマスFTPの設定
(CentOS5)

vsFTPdのコントロール
(CentOS5)

vsFTPdの動作チェック
(CentOS5)


ポートフォワーディングの設定


ローカルユーザー接続の設定(WBEL3,CentOS3,WBEL4,CentOS4)

このパートでは、 構築中のLinuxサーバー アカウント を持つユーザーからの FTP 接続の設定を行います。

もちろん、 vsFTPd 全体に関する設定は必要ですから、こちら vsFTPdの基本設定(WBEL3,CentOS3,WBEL4,CentOS4) の設定も忘れずに行ってください。

また、 デフォルト "/etc/vsftpd/vsftpd.conf" の内容は、 デフォルトの/etc/vsftpd/vsftpd.conf(WBEL3,CentOS3,WBEL4,CentOS4) をご覧ください。

CentOS5 をご利用の場合は、アクセスの制御に用いる ユーザーリストファイル のファイル名と パス が、このページの解説とは異なりますのでこちら ローカルユーザー接続の設定(CentOS5) をご覧ください。

"local_enable"〜L1.ローカルユーザーからのFTP接続の許可

ローカルユーザーからの接続を行うかどうかを設定するキーワードです。

以下のように デフォルト では、有効になっています。

local_enable=YES
 L1.ローカルユーザーからのFTP接続を有効にする

もしも vsFTPd アノニマスFTP でのみ運用するのであれば、"#"でコメントアウトするか、明示的に、

local_enable=NO

と記述してください。

その場合は当然、このパートの以下の設定は必要ありません。

アクセスを許可するユーザーアカウントの設定(WBEL3,CentOS3,WBEL4,CentOS4)

デフォルト vsFTPd では、 ユーザーアカウント 全てに対して FTP による ログイン が許可されます。

もしも 構築中のLinuxサーバー に作成したユーザーアカウント全てに対してFTP接続を許可するような運用を行う場合には、もちろんこのデフォルトの設定のままで構いません。 useradd で新しく追加したユーザーアカウントに逐次FTP接続が許可されていきます。

これは例えば、知人などにホームページ公開のためのスペースを貸し出すのが サーバー 運用の主な目的であるような場合が考えられます。

しかしながら、例えばユーザーアカウントを作成する主な目的がメールアドレスの提供であるような場合には、ユーザーに対してFTP接続を許可する必要はありませんから、デフォルトの設定ではユーザーに余分なサービスを与えてしまうことになります。

つまり、「特定のユーザーアカウントにのみFTP接続を許可する」という運用方法が中心となるサーバー運用を行う場合には、そういう部分の基本的な設定を変更しなければなりません。

このステップではこのような、「明示的に指定したユーザーアカウントにのみFTP接続を許可する設定。」について説明します。

"userlist_enable"〜L5.アクセスユーザーリストの使用

vsFTPd には、予め ユーザーアカウント に対して FTP 接続の許可、拒否を制御するユーザーリスト "/etc/vsftpd.user_list" が準備されています。

そして、"/etc/vsftpd/vsftpd.conf"中で、"userlist_enable"キーワードが、

userlist_enable=YES
 L5.アクセスユーザーリストを有効にする

と有効化されていますので、 デフォルト で"/etc/vsftpd.user_list"が参照されることになります。

ただし、この"/etc/vsftpd.user_list"の内容は、デフォルトでは 「FTPによるアクセスを拒否するアカウントリスト」 として機能します。

この機能の変更は、次の"userlist_deny"キーワードで行いますので、この"userlist_enable"キーワードは修正せず、そのままにしておきます。

"userlist_deny"〜アクセスユーザーリストの動作の指定

デフォルト 「FTPによるアクセスを拒否するアカウントリスト」 として機能する"/etc/vsftpd.user_list"は、"/etc/vsftpd/vsftpd.conf"中で、"userlist_deny"キーワードを、

userlist_deny=NO

と追加記述することで意味が逆転し、 「FTPによるアクセスを許可するアカウントリスト」 となります。

従って、 「特定のユーザーアカウントにのみFTP接続を許可する」 という運用方法が中心となるサーバー運用を行う場合には、この設定を追加記述してください。

"pam_service_name"〜L4.PAM認証サービス名の指定

上の"userlist_deny"キーワードを "userlist_deny=NO" と設定して、"/etc/vsftpd.user_list"を「FTPによるアクセスを許可するアカウントリスト」と設定した場合、少し"/etc/vsftpd.user_list"に手を加える必要があります。

まず、 デフォルト の"/etc/vsftpd.user_list"の内容をご覧ください。

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd.ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

実は、ここに記述されているのは

「システムの セキュリティ の面で、 FTP ログイン することが望ましくない アカウント 。」

です。

もともと"/etc/vsftpd.user_list"は「アクセスを拒否するアカウントのリスト」ですからそういうリストになっているわけですが、この意味を逆転させて「アクセスを許可するアカウントのリスト」として使用する場合には、このリストの全てのアカウント名を"#"でコメントアウトするか、削除してしまわなければなりません。

もちろん、 nanoエディタ で修正するだけですので大した手間ではないかもしれませんが、この"/etc/vsftpd.user_list"でアクセス制御を行う場合、アクセスを拒否するアカウントからの接続に対しても、 vsFTPd は、 とりあえず接続だけは受け付けなければならない ため、余分な仕事をしなければならなくなります。

またこの場合、接続を試みる側には、 「パスワードが一致しません」 というメッセージが送られてしまいますので、FTPで不正侵入を行うクラッカーや不正プログラムにとっては、 「パスワードが一致すれば進入できるかもしれない」 と判断される恐れがあり、何度も進入を試みられる恐れがあります。

つまりこういう設定方法では、貴重な通信を不正侵入のために無駄遣いされてしまいかねないというわけです。

そこでvsFTPdはデフォルトで PAM による認証サービスを利用して、この問題に対処するようになっています。

pam_service_name=vsftpd
 L4.PAM認証サービス名の指定(/etc/vsftpd.ftpusersの有効化)

このキーワード設定によってPAMによる認証サービスが有効になり、 "/etc/pam.d/vsftpd" の設定、

#%PAM-1.0
auth    required   pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth    required   pam_stack.so service=system-auth
auth    required   pam_shells.so
account  required   pam_stack.so service=system-auth
session  required   pam_stack.so service=system-auth

が機能するようになりますので、vsFTPdの動作とは無関係に "/etc/vsftpd.ftpusers" に記述されるアカウントは"sense=deny"、つまり アクセス拒否 されることになります。

結果としてこの"pam_service_name=vsftpd"が記述されていることにより、外部からのFTP接続要求に対しては、

1."/etc/vsftpd.ftpusers"に記述されているアカウントが接続拒否される。

2."/etc/vsftpd.user_list"に記述されているアカウントが接続許可される("userlist_deny=NO"の場合)。

という順序でアカウントの「ふるいわけ」が行われるようになります。

つまり、"/etc/vsftpd.user_list"にアカウント名を記述されて接続を許可されていても、同じアカウント名が"/etc/vsftpd.ftpusers"に記述されていれば接続は許可されないことになるわけです。

ちなみに、デフォルトの"/etc/vsftpd.ftpusers"は、

# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

ですから、内容そのものは"/etc/vsftpd.user_list"と 全く同じ です。

従って、"userlist_deny=NO"という設定を行って"/etc/vsftpd.user_list"の意味が 拒否から許可に逆転 したからといって、"/etc/vsftpd.user_list"のアカウント名を削除したり、無効化したりする必要はないということになります。

という訳ですから、この"pam_service_name=vsftpd"はそのまま有効にしておきます。すると、

・新しく追加された ユーザーアカウント にはFTP接続が許可されない。

・ユーザーアカウントにFTP接続を許可するには、"/etc/vsftpd.user_list"にアカウント名を追記する。

・デフォルトでFTP接続を認めないアカウントでも、"/etc/vsftpd.ftpusers"の中のアカウントを"#"でコメントアウトすれば、一時的にFTP接続を許可することができる。

という柔軟な使い方が可能になるわけです。

例えば、ユーザーアカウント"tanaka"にFTP接続を許可する場合には、nanoエディタで"/etc/vsftpd.user_list"を開き nanoエディタでファイルを開く 、以下のように追加記述してください。

tanaka の前に一行空けているのは、もともと記述されているアカウントと区別するためです。他に理由はありません。
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd.ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

tanaka

また、 構築中のLinuxサーバー 上の各 サーバー アプリケーション の設定ファイルなどは、一般のユーザーアカウントによるFTP接続では パーミッション の制限で ダウンロード が面倒な場合がありますから、本来アクセス拒否に設定されている root アカウントでのFTP接続を行いたい場合があります。

こういう場合はnanoエディタで"/etc/vsftpd.ftpusers"を開き nanoエディタでファイルを開く 、一時的に以下のように修正してください。

# Users that are not allowed to login via ftp
#root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

もちろん、rootアカウントによるFTP接続は本来好ましいものではないので、必要がなくなったら忘れずに元の設定に戻す必要があります。

NEC「得選街」
このページの先頭へ↑

上位ディレクトリの参照許可の設定(WBEL3,CentOS3,WBEL4,CentOS4)

デフォルト vsFTPd では、 ログイン したすべてのユーザーが、 WBEL CentOS のシステムの最上位である "/(ルート)" ディレクトリまで参照できるようになっています。

もちろんこれは、 構築中のLinuxサーバー CUI GUI で操作する場合と同じで、ローカルユーザーが FTP でログインした場合でも、 パーミッション で許可されている範囲であれば、任意の アカウント で自由にファイルシステム内を散歩できるというわけです。

FTPでログインするのが サーバー 管理者のみであれば、このままの設定でも何ら問題はありませんから、このステップでの設定は必要ありません。

しかし、例えば知り合いに Webサーバー コンテンツ のためのスペースを貸してあげるとか、あるいは直接のファイル置き場として FTPサーバー を使わせてあげるとか、そういう運用のケースもあるかもしれません。

こういう場合では、自分以外のユーザーがFTPで 構築中のLinuxサーバー にローカルユーザーとして一般アカウントで接続することになるわけですが、当然これらのユーザーに対しても最上位のファイルシステムまで覗かせる権限を与えてしまうことになります。

もちろん、きちんとファイルシステムのパーミッションが設定されていれば、 構築中のLinuxサーバー 自身にとっては、それでも セキュリティ 上の問題はないはずです。

しかしながら、もしもサーバー管理者がパーミッションの設定を間違えていて、本来見られてはいけない設定ファイルを見られてしまう可能性もないとはいえませんし、どちらにせよファイルシステムを第三者の目に晒してしまうのは気持ちの良いものではありません。

ホームページを 公開 するわけですから、コンテンツを置くディレクトリに対して 「誰でも参照可能」 にしなければならないわけですね。

また、Webサーバーのためのスペースを貸し出す場合には、貸し出した ユーザーアカウント ホームディレクトリ のパーミッションを "755" に変更する必要があります ディレクトリのパーミッション755について

そうすると、貸し出したユーザーアカウントの所有者同士はお互いのホームディレクトリを自由に参照することができるようになります。

もちろん参照されるだけなら「気持ち悪い」だけで済むかもしれませんが、例えば CGI などの サーバーサイドアプリケーション を利用する場合、データ領域には "777" "666" といった、「誰でも書き換え可能なファイル」を設置しなければならないことが珍しくありません。

また、利用者が充分なパーミッションの知識を持っていない場合には、別のファイルやディレクトリにまで誤ったパーミッションを与えかねませんから、 構築中のLinuxサーバー 上にアカウントを持つ別のユーザーから自由に読み書きできるディレクトリが設置されないとも限りません。

こうなるともう「気持ち悪い」だけではなく明らかな「セキュリティホール」です。

このステップでは、一般アカウントのユーザーにそういった「ファイルシステム内の自由な散歩」をさせないための設定について説明します。

"chroot_list_enable"〜L2.ディレクトリ参照リストの使用

ユーザーアカウント に対して、各々の ホームディレクトリ よりも上位のディレクトリの参照を許可するか、許可しないかの判別のためのユーザーリストを使うか否かのキーワードです。

デフォルト では、

#chroot_list_enable=YES
 L2.上位ディレクトリ参照ユーザーリストの使用

と"#"でコメントアウトされており、「使用しない」に設定されていますから、"#"を削除して、

chroot_list_enable=YES

と、設定を「使用する」に変更してください。

"chroot_list_file"〜L3.参照リストファイルの指定

上位ディレクトリ参照ユーザーリストファイルを具体的に指定するキーワードです。

任意のファイル名が使用できますが、 vsFTPd の作法に従って、 デフォルト

#chroot_list_file=/etc/vsftpd.chroot_list
 L3.上位ディレクトリ参照ユーザーリストファイルの指定

で記述されているファイル名をそのまま使用しましょう。当然この部分の設定は"#"を削除して、

chroot_list_file=/etc/vsftpd.chroot_list

に変更してください。

"chroot_local_user"〜参照リストファイルの動作の指定

上の設定で有効にした上位ディレクトリの参照ユーザーリストファイル"/etc/vsftpd.chroot_list"は、 デフォルト では 「上位ディレクトリを参照させない ユーザーアカウント のリスト」 として振舞います。

つまり、上位ディレクトリを参照させたくないユーザーアカウントを、この"/etc/vsftpd.chroot_list"に nanoエディタ などで記述していけば良い訳です。

しかし、実際に上位ディレクトリの参照を許可しても構わないユーザーアカウントというと、一番最初に作成する管理用の一般アカウントくらいです。

後から追加するユーザーアカウントの大部分は、基本的に上位ディレクトリを参照させない設定が望ましいわけですから、このデフォルトの設定のままでは、新規のユーザーアカウントを作成するたびに"/etc/vsftpd.chroot_list"を編集しなければなりません。これはとても面倒です。

ところが、"/etc/vsftpd/vsftpd.conf"に

chroot_local_user=YES

という設定を加えると、"/etc/vsftpd.chroot_list"が示す意味が逆転して、 「上位ディレクトリの参照を許可するユーザーアカウントのリスト」 となります。

このように設定しておけば、"/etc/vsftpd.chroot_list"には編集を加えることなく、新しく追加されたユーザーアカウントには最初から上位のディレクトリへの参照が拒否されるようになり、それぞれのユーザーアカウントの ホームディレクトリ がそのユーザーアカウントにとっての最上位のディレクトリとなります。

一般的にいうとこちらの設定のほうがデフォルトよりも「常識的」ですので、このキーワードの記述は必須と思われます。

"/etc/vsftpd.chroot_list"の作成

"/etc/vsftpd.chroot_list" は、予め準備されているわけではありませんから自分で作成する必要があります。

"root" アカウント ログイン した状態で、例えば以下のような方法で新規に"/etc/vsftpd.chroot_list"を作成してください。

[root@web1 ~]# echo > /etc/vsftpd.chroot_listEnter echoコマンドの説明 出力のリダイレクトの説明
[root@web1 ~]#

ファイルを作成したら、編集を行う前に パーミッション を設定します。

この方法で新規に作成された"/etc/vsftpd.chroot_list"は、所有者、所有グループが "root" 、パーミッションが "644" になっているはずです。

vsFTPd はroot アカウント で実行されますので、所有者とと所有グループはrootのままでOKです。しかしパーミッションが "644" のままでは、root以外の ユーザーアカウント でも内容を参照することができてしまいます。

もちろん、きちんと セキュリティ 対策ができていれば、第三者が"/etc/vsftpd.chroot_list"にアクセスすることはできないはずですが、万が一のことを考えてrootアカウント以外には読み書きできないように、 chmod コマンド でパーミッションを "600" に変更しておきましょう。

[root@web1 ~]# ls -l /etc/vsftpd.chroot_listEnter lsコマンドの説明
-rw-r--r--  1 root   root      16 1月 4 18:12 /etc/vsftpd.chroot_list
[root@web1 ~]# chmod 600 /etc/vsftpd.chroot_listEnter
[root@web1 ~]# ls -l /etc/vsftpd.chroot_listEnter
-rw-------  1 root   root      16 1月 4 18:12 /etc/vsftpd.chroot_list

この"/etc/vsftpd.chroot_list"をnanoエディタで開き nanoエディタでファイルを開く 、上位のディレクトリを参照させたい ユーザーアカウント を一つ一行で記述してください。

root
tanaka

"/etc/vsftpd.chroot_list"の記述例

記述が終わったら"/etc/vsftpd.chroot_list"を保存してください nanoエディタでファイルを閉じる

NEC「得選街」
このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System