550 Failed to open file. FTP

estis2010/03/15 (月) 01:41 に投稿

CentOS 5.4 環境で、vsftpdを起動させたが、接続できなかった。
クライアントは、Windws XP Pro SP3 の cmd 。

# /etc/init.d/iptables stop

で、とりあえずファイアーウォール停止。

目的のファイルをダウンロードすると、
550 Failed to open file. FTP
とエラーが出て、サイズ0のファイルがローカルにできる。

xferlogにはエラー無し。

/var/log/messages に次のメッセージを発見。

localhost setroubleshoot: SELinux is preventing the ftp daemon from reading users home directories (./bootchart.png). For complete SELinux messages. run sealert -l 51f52bbf-1c78-43d4-961a-ae77b500cfb1

○対応策1

素直にメッセージに従ってみる。

# sealert -l 51f52bbf-1c78-43d4-961a-ae77b500cfb1

要約:

SELinux is preventing the ftp daemon from reading users home directories
(./bootchart.png).

詳細説明:

[SELinux is in permissive mode, the operation would have been denied but was
permitted due to permissive mode.]

SELinux has denied the ftp daemon access to users home directories
(./bootchart.png). Someone is attempting to login via your ftp daemon to a user
account. If you only setup ftp to allow anonymous ftp, this could signal a
intrusion attempt.

アクセスを許可:

If you want ftp to allow users access to their home directories you need to turn
on the ftp_home_dir boolean: "setsebool -P ftp_home_dir=1"

次のコマンドがこのアクセスを許可します:

setsebool -P ftp_home_dir=1

追加情報:

ソースコンテキスト user_u:system_r:ftpd_t
ターゲットコンテキ・user_u:object_r:user_home_t
ターゲットオブジェ・./bootchart.png [ file ]
Source vsftpd
Source Path /usr/sbin/vsftpd
Port <不明>
Host localhost.localdomain
Source RPM Packages vsftpd-2.0.5-16.el5_4.1
Target RPM Packages
ポリシー RPM selinux-policy-2.4.6-255.el5_4.4
Selinux 有効化 True
ポリシータイプ targeted
MLS 有効化 True
強制モード Permissive
プラグイン名 ftp_home_dir
ホスト名 localhost.localdomain
プラットフォーム Linux localhost.localdomain 2.6.18-164.11.1.el5 #1
SMP Wed Jan 20 07:39:04 EST 2010 i686 i686
通知カウント 8
First Seen Mon Mar 15 00:17:32 2010
Last Seen Mon Mar 15 00:47:03 2010
Local ID 51f52bbf-1c78-43d4-961a-ae77b500cfb1
行番号

生の監査メッセージ

host=localhost.localdomain type=AVC msg=audit(1268581623.191:61): avc: denied { read } for pid=6015 comm="vsftpd" name="bootchart.png" dev=dm-0 ino=5144724 scontext=user_u:system_r:ftpd_t:s0 tcontext=user_u:object_r:user_home_t:s0 tclass=file

host=localhost.localdomain type=SYSCALL msg=audit(1268581623.191:61): arch=40000003 syscall=5 success=yes exit=5 a0=83ffd98 a1=8800 a2=0 a3=8800 items=0 ppid=6012 pid=6015 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=(none) ses=3 comm="vsftpd" exe="/usr/sbin/vsftpd" subj=user_u:system_r:ftpd_t:s0 key=(null)

再び素直に指示通り
# setsebool -P ftp_home_dir=1

これでダウンロード可能。

○対応策2

SELinuxの設定を無効にする。
# setenforce Permissive
または
# setenforce 0

Permissive のところは大文字・小文字関係ないみたい。permissIve などでも反応した。

有効にする場合は、
# setenforce Enforcing
または
# setenforce 1

確認は、
# getenforce

Comments

Comment

このコマンドの引数、例えば 51f52bbf-1c78-43d4-961a-ae77b500cfb1 は、あるデーモンに対しての要求(デーモンのふるまい?)毎に一定みたいだ。
上記のコマンドの結果は、最終的にファイルをダウンロードできた後で見たからで、
失敗直後だと、

# sealert -l 51f52bbf-1c78-43d4-961a-ae77b500cfb1

要約:

SELinux is preventing the ftp daemon from reading users home directories
(./bootchart.png).

詳細説明:

SELinux has denied the ftp daemon access to users home directories
(./bootchart.png). Someone is attempting to login via your ftp daemon to a user
account. If you only setup ftp to allow anonymous ftp, this could signal a
intrusion attempt.

アクセスを許可:

If you want ftp to allow users access to their home directories you need to turn
on the ftp_home_dir boolean: "setsebool -P ftp_home_dir=1"

次のコマンドがこのアクセスを許可します:

setsebool -P ftp_home_dir=1

追加情報:

ソースコンテキスト user_u:system_r:ftpd_t
ターゲットコンテキ・user_u:object_r:user_home_t
ターゲットオブジェ・./bootchart.png [ file ]
Source vsftpd
Source Path /usr/sbin/vsftpd
Port <不明>
Host localhost.localdomain
Source RPM Packages vsftpd-2.0.5-16.el5_4.1
Target RPM Packages
ポリシー RPM selinux-policy-2.4.6-255.el5_4.4
Selinux 有効化 True
ポリシータイプ targeted
MLS 有効化 True
強制モード Enforcing
プラグイン名 ftp_home_dir
ホスト名 localhost.localdomain
プラットフォーム Linux localhost.localdomain 2.6.18-164.11.1.el5 #1
SMP Wed Jan 20 07:39:04 EST 2010 i686 i686
通知カウント 13
First Seen Mon Mar 15 00:17:32 2010
Last Seen Mon Mar 15 01:49:36 2010
Local ID 51f52bbf-1c78-43d4-961a-ae77b500cfb1
行番号

生の監査メッセージ

host=localhost.localdomain type=AVC msg=audit(1268585376.366:100): avc: denied { read } for pid=5771 comm="vsftpd" name="bootchart.png" dev=dm-0 ino=5144724 scontext=user_u:system_r:ftpd_t:s0 tcontext=user_u:object_r:user_home_t:s0 tclass=file

host=localhost.localdomain type=SYSCALL msg=audit(1268585376.366:100): arch=40000003 syscall=5 success=no exit=-13 a0=83ffd10 a1=8800 a2=0 a3=8800 items=0 ppid=5767 pid=5771 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=(none) ses=3 comm="vsftpd" exe="/usr/sbin/vsftpd" subj=user_u:system_r:ftpd_t:s0 key=(null)

というように、「生の監査メッセージ」の「success=no」、「exit=-13」などが違う。

success=no が、Enforcing 時。
success=yes が、Permissive時。
disabled だったら、ログそのものが残らないし、変更されない。