web-dev-qa-db-ja.com

Vsftpdユーザー認証

Centos7とVSFTPDを実行する仮想マシンをセットアップしました。

VSFTPDは、ローカルユーザーと接続するときにうまく機能します。 / ftp/pub/{user_name} with "useradd -d"で以前に作成したホームにユーザーをchrootします。私もうまく機能しているTLS暗号化を追加しました(何が悪かったのかを確認するためにここでは無効にしています)。 / ftpのSElinuxコンテキストをpublic_content_tに設定しました; / ftp/pub(/.*)?からpublic_content_rw_tそして/ ftp/pubに755の権限を設定します

最近、次のようにしてLDAP認証をVSFTPDサーバーに追加しようとしました。

authconfig --enableldap --enableldapauth --ldapserver=name_of_my_server --ldapbasedn="dc=item1,dc=item2,dc=item3" --enablemkhomedir --update    

ただし、認証はサーバー自体にのみ追加され(ローカル以外のアカウントでサーバーにSSHで接続できます)、サービス(vsftp)には追加されないため、次のことに遭遇しました。

500 OOPS:ディレクトリを変更できません:/ home/default/path

このエラーから私が理解しているのは、新しいホームを作成せずに、デフォルトのホーム(明らかに存在しない)にログインしようとしているということです。私がやりたいのは、非ローカルユーザーが私のサーバーでFTPを実行しようとすると、/ ftp/pub/{user_name}に新しいホームが作成され、そこでchrootされます。

Pam.d/loginは次のとおりです。

#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so

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

vsftpd.conf:

anonymous_enable=NO
#Permet aux utilisateurs locaux de RW
local_enable=YES
write_enable=YES
local_umask=022
pasv_enable=YES
pasv_max_port=1026
pasv_min_port=1025
dirmessage_enable=YES
connect_from_port_20=YES
ascii_download_enable=YES
ascii_upload_enable=YES
ftpd_banner=Welcome to blah FTP service.

#Partie chroot
chroot_local_user=YES
allow_writeable_chroot=YES
local_root=/ftp/pub/$USER
user_sub_token=$USER
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list

#logs
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES

listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

# Ajouts
use_localtime=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
require_ssl_reuse=NO
ssl_ciphers=HIGH
ssl_enable=NO
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

私は本当にVSFTPDのLDAP認証に固執していて、serverfaultの他の投稿で何をすべきかを見つけることができませんでした。誰かが私を助けたり、ドキュメントを推薦したりできれば、それは大いにありがたいです。

[〜#〜] edit [〜#〜]:SSHログインはデフォルトパス(/ home)にユーザーのホームを正常に作成し、FTPログインは/ homeにも-にも作成しません。 / ftp/pub私の目標は、FTPログインでユーザーのホームを作成することです/ ftp/pub

EDIT2:mxttieが提案しているように、pam_execを使用できますが、実際に解決せずに問題を「回避」する方がよいでしょう。 2つの連続した500 OOPSエラーを解決するために、接続するユーザーごとに「/ home」にフォルダーを作成し、次に「/ ftp/pub」にフォルダーを作成する必要があります。

1
Vex -

pam_execモジュールを使用して、必要なコマンドを実行するスクリプトを呼び出します(つまり、ローカル以外のユーザーの場合は/ ftp/pubにホームを作成します)

1
mxttie