第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 拒否になる例を以下に示します。
  1. rpm -q ftp を実行して ftp パッケージがインストールされているか確認します。 インストールされていない場合は root ユーザーで yum install ftp を実行しインストールを行ないます。
  2. rpm -q vsftpd を実行して vsftpd パッケージがインストールされているか確認します。 インストールされていない場合は root ユーザーで yum install vsftpd を実行しインストールを行ないます。
  3. 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
    
  4. root ユーザーで service vsftpd start を実行して vsftpd を起動します。 vsftpd.conf の編集前にこのサービスが実行中だった場合は、 root ユーザーで service vsftpd restart を実行し設定の変更を適用します。
    service vsftpd start
    Starting vsftpd for vsftpd:                                [  OK  ]
    
  5. 現在ログインしているユーザーのまま 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>
    
  6. 次のような 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
    
  7. ホームディレクトリへのアクセスが SELinux により拒否されています。 これを解決するには、 ftp_home_dir Boolean を有効にします。 root ユーザーで次のコマンドを実行して ftp_home_dir Boolean を有効にします。
    # setsebool -P ftp_home_dir=1
    

    注記

    再起動後、 変更を維持したくない場合は -P オプションを使用しないでください。
    もう一度ログインしてみます。 今度は ftp_home_dir Boolean でホームディレクトリへのアクセスが許可され、 ログインに成功します。