実証済みのvsftpd構成をFedora 16の新しいサーバーに移動すると、問題が発生しました。すべて正常に機能しているように見えますが、ユーザー認証は失敗します。何が起こったのかを示すログのエントリが見つかりません。
以下は完全な設定ファイルです:
_anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=0
data_connection_timeout=0
nopriv_user=ftpsecure
connect_from_port_20=YES
listen=YES
chroot_local_user=YES
chroot_list_enable=NO
ls_recurse_enable=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
_
FTPはユーザー名とパスワードを要求します、私はそれらを提供します、ログインが正しくありません。私は確認しました、このユーザーはsshからログインできます。 _pam_service
_が原因で問題が発生しています。
匿名(許可に変更した場合)はうまく機能するようです。
SELinuxが無効になっています。
Ftpsecureは正しく構成されているようです...私は完全に途方に暮れています!
以下は、私が調べたが成功しなかったログファイルです。
_/var/log/messages
/var/log/xferlog #empty
/var/log/vsftpd.log #empty
/var/log/secure
_
_/var/log/audit/audit.log
_で何かが見つかりました:
type=USER_AUTH msg=audit(1335632253.332:18486): user pid=19528 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication acct="kate" exe="/usr/sbin/vsftpd" hostname=ip68-5-219-23.oc.oc.cox.net addr=68.5.219.23 terminal=ftp res=failed'
多分私は_/var/log/wtf-is-wrong.help
_を見る必要があります:-)
詳細情報:
/etc/pam.d/vsftpdは次のようになります。
_#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
_
ふew。私は問題を解決しました。構成に相当しますが、/ etc/pam.d/vsftpd内にあります
Ftpセッションが失敗したときにsshセッションが成功したため、
/etc/pam.d/vsftpd、そこにあったものをすべて削除し、代わりに./sshdの内容を配置してルールに正確に一致させます。すべてがうまくいきました!
除去の方法により、問題のある行は次のとおりであることがわかりました。
auth required pam_shells.so
それを削除すると、続行できます。
「pam_shellsは、ユーザーのシェルが/ etc/shellsにリストされている場合にのみシステムへのアクセスを許可するPAMモジュールです。」私はそこを見ました、そして確かに、bashも何もありません。これは、私の意見ではvsftpd構成のバグであり、ドキュメントのどこにも/ etc/shellsを編集させる必要がないためです。したがって、デフォルトのインストールと指示は、記載されたとおりに機能しません。
今すぐバグを送信できる場所を探しに行きます。
私はubuntuを使用していますが、同じ問題がありました
解決:
add-Shell /sbin/nologin
Sudo usermod -s /sbin/nologin ftpme
Sudo vi /etc/pam.d/vsftpd
次にコメントし、次のように行を追加します
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
@include common-auth
@include common-account
@include common-password
@include common-session
また、FTPユーザーが次のように構成されている場合と同じ奇妙な動作に遭遇しました。
# finger <user>
Login: <user> Name:
Directory: /home/user-dir Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
一方のシステムではログインでき、もう一方ではログインできません。
@KateYoakの回答を拡張すると、/etc/shells
ファイルが異なり、/sbin/nologin
シェルが含まれていないことがわかりました。 /etc/pam.d/vsftpd
でPAM認証を行った
auth required pam_shells.so
fail
/etc/shells
ファイルに不足している行を追加するだけで
/sbin/nologin
/usr/sbin/nologin
/etc/pam.d/vsftpd
のチェックが機能しました。
したがって、動作する/etc/shells
ファイルには次のものが必要です。
# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
あなた自身の答えで述べたように、ユーザーShellは/etc/shells
。 /sbin/nologin
ユーザーShellとして、sshを禁止し、pam構成を変更せずにftpを許可します。
usermod -s /sbin/nologin restricted_ftp_user
私の場合、/ etc/pam.d/vsftpd構成ファイルのauth行にコメントを付けることを選択しました
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/f$
#auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
ここにあなたが理由があります。 / sbin/nologinをシェルシステムとして追加すると、システムで不要なバックドアが開かれる可能性があります。代わりに、このファイルを変更しても、影響があるのはvsftpdだけです。
sshdのような別のプロセスがシステムシェルを探すかどうかはわかりませんが、pam.dファイルを変更する方法が他の方法よりも優れていると思います。
Vsftpdが次のエラーで失敗した場合
vsftpd.service:制御プロセスが終了しました、コード=終了ステータス= 2
次に、pasv_addr_resolve=YES
ファイルに/etc/vsftpd/vsftpd.conf
が設定されているかどうかを確認することもできます。これにより、FTPサーバーのホスト名がDNSを介して解決されます。 ping yourhostname.example.com
ができないなど、DNSが解決しない場合は、DNS解決の問題を修正するか、pasv_addr_resolve=NO
に/etc/vsftpd/vsftpd.conf
を設定する必要があります。 vsftpdはエラーなしで起動します。