LinuxのCentOSでファイルを扱う時にViエディタなど使用しますが、扱いにくいのでwindowsパソコンでファイルを作成してFTPでアップロードしたい。その為にvsftpサービスをインストールしたけど接続失敗して諦めたりしていないでしょうか?
そういった問題を解決します。vsftpの設定をみていきます。
筆者はWindowsサーバーやLinuxサーバーの運用構築を11年以上おこなってきました。その経験を元に知識を公開していきます!
CentOSのvsftpの設定のやり方
vsftpdサービスでファイル転送できるまでに設定する事をまとめます。
- vsftpdサービスの設定ファイル編集
- vsftpdサービスのファイル作成や編集
- chrootの設定を行う
- SELinuxの設定を無効にする
vsftpdサービスの設定ファイル編集
設定ファイルである「vsftpd.conf」ファイルの設定をviエディタで編集します。
ファイルのパスは「/etc/vsftpd/vsftpd.conf」です。
設定ファイル「vsftpd.conf」の編集内容
設定値 | 設定の意味 |
---|---|
anonymous_enable=NO | nonymousログインを認めるかの設定 |
ascii_upload_enable=YES | アップロードでASCII転送を認めるかの設定 |
ascii_download_enable=YES | ダウンロードでASCII転送を認めるかの設定。認めるのでコメントを外し有効にする |
chroot_local_user=YES | ローカルユーザーがログイン後にホームディレクトリにchrootするかの設定。コメントを外し有効にする |
chroot_list_enable=YES | chrootを有効にするか。有効にするのでコメントを外す |
chroot_list_file=/etc/vsftpd/chroot_list | chroot_list_enableがYESの場合のユーザーを記述するファイルを指定する |
user_config_dir=/etc/vsftpd/user_config_directory | ユーザー毎の設定ファイルの置き場所指定 |
userlist_deny=NO | YESの場合、ユーザーリストはアクセスを拒絶するユーザーのリストになる NOの場合、ユーザーリストはアクセスを許可するユーザーのリストになる |
userlist_file=/etc/vsftpd/user_list | user_listの場所を指定 |
chrootの設定の意味とは
chrootは特に設定しなくても動きます。しかしデフォルトだとファイルアップロードする時にhomeディレクトリなど浅い階層にアクセスを可能にします。
セキュリティ的にも問題がある為、公開用のディレクトリにアップロードさせる方が安心です。なのでchrootを設定してデフォルトのアップロード先を変更しています。
vsftpdサービスのファイル作成や編集
続いてファイルを作成したり、設定ファイル以外の編集をまとめます。
- ftpusersから許可するユーザーを削除またはコメントアウトする
- user_listに許可するユーザーを記入する
- chroot_listファイルを作成してchrootするユーザー名を記入する
ftpusersに記入しているユーザーをコメントアウトする
「ftpusers」ファイルにユーザーが記入されているとFTPできません
パスは「/etc/vsftpd/ftpusers」です。このファイルを編集してユーザー名を確認します。名前がある場合はコメントアウトするか削除してください。
Linuxでコメントアウトする場合は先頭に「#」を付けます。
user_listに許可するユーザーを記入する
設定ファイルで「userlist_deny=NO」の設定にしたので、user_listにFTPを許可するユーザーを記入します。
パスは「/etc/vsftpd/user_list」です。このファイルを編集してユーザー名を記入します。
chroot_listファイルを作成してchrootするユーザー名を記入する
chroot_listを新規作成します。chrootするユーザーを記入すれば、該当ユーザーはchrootされます。
パスは「/etc/vsftpd/chroot_list」です。このファイルを作成してユーザー名を記入します。
vsftpでchrootの設定を行う
vsftpでchrootの設定をまとめます。
- 設定ファイル保存用ディレクトリとユーザー毎ファイルの作成
- ユーザー毎ファイルの編集
- アップロード用のディレクトリ作成
設定ファイル保存用ディレクトリとユーザー毎ファイルの作成
設定ファイル保存用ディレクトリを作成します。
今回の設定は以下になります。
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専用のユーザーを作成して対応する場合は権限を気にしましょう!
SELinuxの設定を無効にする
その他の設定でSELinuxの設定で拒否される可能性があります。
SELinuxの確認コマンド
getenforce
SELinuxの設定値 | 意味 |
---|---|
Enforcing | SELinux有効、アクセス制限あり |
Permissive | SELinux有効、アクセス制限なし |
Disabled | SELinux無効 |
SELinuxを一時的に変更する
SELinuxの一時的な設定コマンド | 効果 |
---|---|
setenforce 0 | SELinuxを一時的に無効 |
setenforce 1 | SELinuxを一時的に有効 |
SELinuxの起動時の設定を変更する
SELinuxの設定ファイルの値を変更します。
パスは「/etc/selinux/config」です。
SELinuxの設定ファイル設定値 | 意味 |
---|---|
SELINUX=Enforcing | SELinux有効、アクセス制限あり |
SELINUX=Permissive | SELinux有効、アクセス制限なし |
SELINUX=Disabled | SELinux無効 |
この「SELINUX=」の値を「Disabled」にしておきましょう!
SELinuxの全体設定確認コマンド
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が原因