サイトアイコン スグブログ

【Linux】CentOSのvsftpの設定のやり方!エラー解消法あり

パソコン教室

LinuxのCentOSでファイルを扱う時にViエディタなど使用しますが、扱いにくいのでwindowsパソコンでファイルを作成してFTPでアップロードしたい。その為にvsftpサービスをインストールしたけど接続失敗して諦めたりしていないでしょうか?

そういった問題を解決します。vsftpの設定をみていきます。

筆者はWindowsサーバーやLinuxサーバーの運用構築を11年間以上おこなってきました。その経験を元に知識を公開していきます!

CentOSのvsftpの設定のやり方

vsftpdサービスでファイル転送できるまでに設定する事をまとめます。

vsftpdサービスでファイル転送できるまでのフロー
  1. vsftpdサービスの設定ファイル編集
  2. vsftpdサービスのファイル作成や編集
  3. chrootの設定を行う
  4. SELinuxの設定を無効にする

vsftpdサービスの設定ファイル編集

設定ファイルである「vsftpd.conf」ファイルの設定をviエディタで編集します。

ファイルのパスは「/etc/vsftpd/vsftpd.conf」です。

設定ファイル「vsftpd.conf」の編集内容

設定値設定の意味
anonymous_enable=NOnonymousログインを認めるかの設定
ascii_upload_enable=YESアップロードでASCII転送を認めるかの設定
ascii_download_enable=YESダウンロードでASCII転送を認めるかの設定。認めるのでコメントを外し有効にする
chroot_local_user=YESローカルユーザーがログイン後にホームディレクトリにchrootするかの設定。コメントを外し有効にする
chroot_list_enable=YESchrootを有効にするか。有効にするのでコメントを外す
chroot_list_file=/etc/vsftpd/chroot_listchroot_list_enableがYESの場合のユーザーを記述するファイルを指定する
user_config_dir=/etc/vsftpd/user_config_directoryユーザー毎の設定ファイルの置き場所指定
userlist_deny=NOYESの場合、ユーザーリストはアクセスを拒絶するユーザーのリストになる
NOの場合、ユーザーリストはアクセスを許可するユーザーのリストになる
userlist_file=/etc/vsftpd/user_listuser_listの場所を指定
vsftpd.confの設定項目

viエディタで編集する時は効率よく行う為に、viの使い方を学びましょう!詳しくは以下の記事で紹介しています。

chrootの設定の意味とは

chrootは特に設定しなくても動きます。しかしデフォルトだとファイルアップロードする時にhomeディレクトリなど浅い階層にアクセスを可能にします。

セキュリティ的にも問題がある為、公開用のディレクトリにアップロードさせる方が安心です。なのでchrootを設定してデフォルトのアップロード先を変更しています。

vsftpdサービスのファイル作成や編集

続いてファイルを作成したり、設定ファイル以外の編集をまとめます。

vsftpdサービスのファイル作成や編集
  • ftpusersから許可するユーザーを削除またはコメントアウトする
  • user_listに許可するユーザーを記入する
  • chroot_listファイルを作成してchrootするユーザー名を記入する

ftpusersに記入しているユーザーをコメントアウトする

「ftpusers」ファイルにユーザーが記入されているとFTPできません

パスは「/etc/vsftpd/ftpusers」です。このファイルを編集してユーザー名を確認します。名前がある場合はコメントアウトするか削除してください。

Linuxでコメントアウトする場合は先頭に「#」を付けます。

ftpuserftpするべきでないユーザーが記述されています。rootなどがそれに当たります。

user_listに許可するユーザーを記入する

設定ファイルで「userlist_deny=NO」の設定にしたので、user_listにFTPを許可するユーザーを記入します。

逆に設定ファイルで「userlist_deny=YES」の設定をしたら、user_listに拒否するユーザーを記入します。

パスは「/etc/vsftpd/user_list」です。このファイルを編集してユーザー名を記入します。

chroot_listファイルを作成してchrootするユーザー名を記入する

chroot_listを新規作成します。chrootするユーザーを記入すれば、該当ユーザーはchrootされます。

パスは「/etc/vsftpd/chroot_list」です。このファイルを作成してユーザー名を記入します。

vsftpでchrootの設定を行う

vsftpでchrootの設定をまとめます。

vsftpdサービスのchroot設定
  • 設定ファイル保存用ディレクトリとユーザー毎ファイルの作成
  • ユーザー毎ファイルの編集
  • アップロード用のディレクトリ作成

設定ファイル保存用ディレクトリとユーザー毎ファイルの作成

設定ファイル保存用ディレクトリを作成します。

ここでは設定ファイル「/etc/vsftpd/vsftpd.conf」の「user_config_dir=」項目で設定したパスに合わせて下さい。

今回の設定は以下になります。

mkdir /etc/vsftpd/user_config_directory

FTPユーザー毎の設定ファイルを作成します。

touch /etc/vsftpd/user_config_directory/root

これでFTPユーザー毎設定のファイルと、それを保存するディレクトリが作成できました。

ユーザー毎ファイルの編集

今作成したファイルを編集します。「local_root=デフォルトのパス」でアップロードするディレクトリを決定します。

local_root=/var/ftp/root

今回は公開用の「var」配下に「ftp」ディレクトリを作成して、その配下にユーザー毎のアップデートディレクトリをそれぞれ作成して、そこを指定します。

アップロード用のディレクトリ作成

FTPアップデート用のディレクトリがない為、作成します。

mkdir -p /var/ftp/root

アップデート用の権限に気をつけましょう。今回はrootユーザーなので問題ありませんがftp専用のユーザーを作成して対応する場合は権限を気にしましょう!

「ls -l」で権限を確認出来ます。

SELinuxの設定を無効にする

その他の設定でSELinuxの設定で拒否される可能性があります。

SELinuxの確認コマンド

getenforce
SELinuxの設定値意味
EnforcingSELinux有効、アクセス制限あり
PermissiveSELinux有効、アクセス制限なし
DisabledSELinux無効
SELinux値一覧

SELinuxを一時的に変更する

SELinuxの一時的な設定コマンド効果
setenforce 0SELinuxを一時的に無効
setenforce 1SELinuxを一時的に有効
SELinux値一覧

SELinuxの起動時の設定を変更する

SELinuxの設定ファイルの値を変更します。

パスは「/etc/selinux/config」です。

SELinuxの設定ファイル設定値意味
SELINUX=EnforcingSELinux有効、アクセス制限あり
SELINUX=PermissiveSELinux有効、アクセス制限なし
SELINUX=DisabledSELinux無効
SELinux値一覧

この「SELINUX=」の値を「Disabled」にしておきましょう!

SELinuxの全体設定確認コマンド

sestatus

sestatusコマンドの結果が以下になります。

sestatusコマンドの結果

「Current mode:」で現在の設定が確認できます。

「Mode from config file:」でOS起動時の設定が確認できます。

この設定まで行うとCentOSのFTPサービスでファイル転送可能です。

vsftpdサービスでその他の見る項目

その他の権限ファイル

その他の権限系ファイルのパス「/etc/hosts.allowと/etc/hosts.deny」。ファイルがなければ問題ない。

vsftpdサービスが有効か確認

vsftpdサービスが有効か確認して、無効なら有効にする

firewalldサービスが無効か確認

firewalldサービスが無効か確認。有効であれば無効にするかftpポートを解放する。

vsftpdサービスでエラーが出た時に見るログの原因と解決法

vsftpdサービスでの見るログファイルのパス

/var/log/secure

vsftpdサービスのログの内容

Nov 17 00:15:25 localhost vsftpd[2872]: pam_listfile(vsftpd:auth): Refused user root for service vsftpd
Nov 17 00:15:26 localhost vsftpd[2872]: pam_succeed_if(vsftpd:auth): requirement "uid >= 1000" not met by user "root"

vsftpdサービスのログで確認したものの原因

rootはそもそもFTPすべきでないユーザーというログです。

「ftpusers」ファイルに記載しているユーザはFTPすべきでないユーザーがはいっている

vsftpdサービスのログで確認したもののログの解決法

「ftpusers」ファイルから該当ユーザー名を削除するかコメントアウトする。もしくは他のユーザーを作成してログインできるように設定する

vsftpdで出るその他のエラー

エラーメッセージ「553 Could not create file.」

原因はファイルがアップロードできない、selinux有効になっている可能性が高い

setenforce 0で一時的に無効にしてファイルアップロード出来たらSELinuxが原因

モバイルバージョンを終了