Linux(CentOS 6) - FTP接続時のエラー「500 OOPS: cannot change directory」「500 OOPS: priv_sock_get_cmd」の原因と解決方法

Windows 7のPCからLinux(CentOS 6)サーバにFTP接続をしようとすると、FTPユーザ名、パスワードの入力後に

 500 OOPS: cannot change directory
 500 OOPS: priv_sock_get_cmd

といったエラーメッセージが表示され、接続できない場合がある。

《Windows 7のコマンドプロンプトでLinux(CentOS 6)サーバへのFTP接続に失敗した時の例》

ftp> open 192.168.0.9
192.168.0.9 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (192.168.0.9:(none)): user1
331 Please specify the password.
パスワード:
500 OOPS: cannot change directory:/home/user1
500 OOPS: priv_sock_get_cmd
接続がリモート ホストによって閉じられました。

以下のサイトで調べたところ、このエラーの原因は、SELinuxの設定にあるようだった。

《参考》SOLVED : 500 OOPS: cannot change directory:/home/user VSftp | Centos |  GNU Tool Box
http://www.gnutoolbox.com/solved-500-oops-change-directoryhomeuser-vsftp-centos/

Question :
I am getting 500 OOPS: cannot change directory:/home/user error on server setup with vsftp, what is the problem and how can i resolve this?

Answer :
This could be due to selinux enabled in the server which usually blocks programs that chrooting /home directory by its default security policy. To solve this problem, you need to disable the selinux if not need in your server or you need to set the selinux enable policy for ftp program to allow access.

上記のサイトを参照すると、上述のエラーを解決するには、以下の2つの解決方法があることが分かる。

(1)Disabling selinux completely   ← SELinuxを完全に無効化する。
(2)Enabling Selinux policy for ftp access   ←FTPアクセスができるようにSELinuxのポリシーを変更する。

上記のサイトを参考にしながら、どちらも試してみた。

(1)SELinuxを完全に無効化する。

[root@test ~]# getenforce   ←現在のSELinuxの実行状況を確認する。
Enforcing   ←現在、SELinuxはEnforcingモードで実行中のようであった。
[root@test ~]# setenforce 0   ←コマンドにより、一時的にSELinuxをPermissiveモードでに変更する。左記コマンドでの設定はOSを再起動すると設定が失われてしまうので注意。
[root@test ~]# getenforce   ←現在のSELinuxの実行状況を確認する。
Permissive   ←SELinuxがPermissiveモードで実行中状態にあることを確認する。(「Disabled」ではないので完全な無効化状態ではない。)。

SELinuxをEnforcingモードからPermissiveモードに変更した結果、Windows 7からのFTP接続ができるようになったことを確認できた。

したがって、上述のエラーメッセージは、SELinuxが原因であったと判断して間違いなさそうだ。

SELinuxを完全に無効化するには、SELinuxのコンフィグファイルを修正する必要がある。

[root@test ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing   ←左記の文字列をviエディタで「SELINUX=disabled」に修正する。
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

OSを再起動すると、設定内容が反映され、SELinuxが完全に無効化される。

(2)FTPアクセスができるようにSELinuxのポリシーを変更する

[root@test ~]# getenforce
Enforcing

[root@test ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
[root@test ~]# setsebool -P ftp_home_dir on   ←setseboolコマンドで、ftp_home_dirの設定を「off」から「on」に変更する。
[root@test ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off

SELinuxの設定で、ftp_home_dirの設定を「off」から「on」に変更すると、Windows 7からのFTP接続ができるようになったことを確認できた。

《Windows 7のコマンドプロンプトでLinux(CentOS 6)サーバへのFTP接続に成功した時の例》

ftp> open 192.168.0.9
192.168.0.9 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (192.168.0.9:(none)): user1
331 Please specify the password.
パスワード:
230 Login successful.

前へ

Linux(CentOS 6) - iptablesの設定を変更し、ftpでのアクセスを許可する

次へ

Linux(CentOS 6) - yum installコマンドでpostgresqlパッケージをインストールする