第5章 ファイル転送プロトコル
ファイル転送プロトコル、 FTP は、 今日インターネット上で見られる、最も古く、一般的に使用されているプロトコルです。ユーザーはリモートホストに直接ログインする必要がなく、またリモートシステムの使い方を知らなくても、ネットワーク上の複数のコンピュータホスト間で確実にファイル転送を行なえるようにすることがその目的になります。FTP により、ユーザーはシンプルで標準的なコマンドセットを使用するだけでリモートシステム上のファイルにアクセスできるようになります。
Very Secure FTP Daemon (
vsftpd
) は、高速で安定性があり、かつ何よりも高い安全性を確保するため、その土台から設計が行なわれています。多数の接続を効率的かつ安全に処理できる能力があることから、Red Hat Enterprise Linux に同梱されている唯一の独立型 FTP サーバーとなります。
Red Hat Enterprise Linux では、Very Secure FTP デーモンは vsftpd パッケージで提供されます。
rpm -q vsftpd
を実行して vsftpd がインストールされているか確認します。
$ rpm -q vsftpd
FTP サーバーを利用する方で vsftpd パッケージがインストールされていない場合には、 次のコマンドを root ユーザーで実行してインストールを行ないます。
yum install vsftpd
5.1. FTP と SELinux
FTP デーモンの
vsftpd
はデフォルトで制限のあるサービスとして実行されます。vsftpd
とファイル、 プロセスまたシステムとの交信方法は SELinux ポリシーで定義されます。たとえば、 認証ユーザーが FTP 経由でログインすると、そのユーザーは自分のホームディレクトリの読み取りや書き込みが行なえません。SELinux により、vsftpd
によるユーザーのホームディレクトリへのアクセスはデフォルトで阻止されるためです。また、vsftpd
には NFS や CIFS ファイルシステムへのアクセスもデフォルトではありません。 このため、/etc/vsftpd/vsftpd.conf
内で書き込みアクセスが設定されていても、anonymous ユーザーには書き込みアクセスが与えられません。Boolean をオンにすると、こうしたアクセスを許可することができるようになります。
認証ユーザーがログインして、自分のホームディレクトリを表示させようとすると SeLinux 拒否になる例を以下に示します。
rpm -q ftp
を実行して ftp パッケージがインストールされているか確認します。 インストールされていない場合は root ユーザーでyum install ftp
を実行しインストールを行ないます。rpm -q vsftpd
を実行して vsftpd パッケージがインストールされているか確認します。 インストールされていない場合は root ユーザーでyum install vsftpd
を実行しインストールを行ないます。- Red Hat Enterprise Linux では、
vsftpd
はデフォルトでは anonymous ユーザーによるログインしか許可していません。認証ユーザーによるログインを許可するため、root で/etc/vsftpd/vsftpd.conf
を編集します。local_enable=YES
オプションを必ずコメントアウトしてください。# Uncomment this to allow local users to log in. local_enable=YES
- root ユーザーで
service vsftpd start
を実行してvsftpd
を起動します。vsftpd.conf
の編集前にこのサービスが実行中だった場合は、 root ユーザーでservice vsftpd restart
を実行し設定の変更を適用します。service vsftpd start Starting vsftpd for vsftpd: [ OK ]
- 現在ログインしているユーザーのまま
ftp localhost
を実行します。 ユーザー名のプロンプトが表示されたら、 ログインしているユーザー名になっているか確認します。 ユーザー名が正しければ Enter を押します。 ユーザー名が違う場合は、 正しいユーザー名を入力します。$ ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.1.0) Name (localhost:username): 331 Please specify the password. Password: Enter your password 500 OOPS: cannot change directory:/home/username Login failed. ftp>
- 次のような SELinux 拒否がログ記録されます。
setroubleshoot: SELinux is preventing the ftp daemon from reading users home directories (username). For complete SELinux messages. run sealert -l c366e889-2553-4c16-b73f-92f36a1730ce
- ホームディレクトリへのアクセスが SELinux により拒否されています。 これを解決するには、
ftp_home_dir
Boolean を有効にします。 root ユーザーで次のコマンドを実行してftp_home_dir
Boolean を有効にします。# setsebool -P ftp_home_dir=1
注記
再起動後、 変更を維持したくない場合は -P オプションを使用しないでください。もう一度ログインしてみます。 今度はftp_home_dir
Boolean でホームディレクトリへのアクセスが許可され、 ログインに成功します。