我正在尝试使用 Winbind 配置 VSFTPD,以将通过 Active Directory 身份验证的用户限制为仅属于特定组的用户。
我正在使用 vsftpd 的通用配置文件,并做了一些更改:
$ cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
local_root=/data/ftp
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_enable=Yes
pasv_max_port=51000
pasv_min_port=50000
port_enable=yes
local_max_rate=0
use_localtime=YES
session_support=YES
Winbind 已配置并且服务器成功加入域:
$ wbinfo -u
administrator
guest
...
在 PAM 配置文件中,我放置了这些配置文件:
$ cat /etc/pam.d/vsftpd
... (Default settings) ...
# Calls the vsftpd-winbind PAM config file:
auth include vsftpd-winbind
account include vsftpd-winbind
session include vsftpd-winbind
$ /etc/pam.d/vsftpd-winbind
auth required pam_env.so debug
auth required pam_winbind.so require_membership_of=GROUPNAME debug debug_state
auth sufficient pam_winbind.so require_membership_of=GROUPNAME debug debug_state
auth required pam_deny.so debug
account sufficient pam_winbind.so require_membership_of=GROUPNAME debug debug_state
account required pam_deny.so
password required pam_cracklib.so retry=3
password sufficient pam_unix.so nullok use_authtok md5 shadow
password required pam_deny.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session required pam_limits.so
session required pam_unix.so
当我测试 vsftpd 时,/var/log/secure 中返回以下错误:
Jun 15 16:48:01 localhost vsftpd[2615]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=joao rhost=rj1.ticorporativa.alog.com.br user=joao
Jun 15 16:48:01 localhost vsftpd[2615]: pam_krb5[2615]: error reading keytab 'FILE:/etc/krb5.keytab'
Jun 15 16:48:01 localhost vsftpd[2615]: pam_krb5[2615]: TGT verified
Jun 15 16:48:01 localhost vsftpd[2615]: pam_krb5[2615]: authentication succeeds for 'joao' ([email protected])
Jun 15 16:48:01 localhost vsftpd[2615]: pam_winbind(vsftpd:account): user 'joao' granted access
Jun 15 16:48:01 localhost vsftpd[2615]: pam_winbind(vsftpd:account): pam_parse: unknown option: require_membership_of=GROUPNAME
最初,我以为这是一个语法错误,但我尝试了 PAM 配置文件中的几个语法:
require_membership_of=GROUPNAME debug debug_state
require_membership_of="GROUPNAME" debug debug_state
require_membership_of=DOMAIN\\GROUPNAME debug debug_state
require_membership_of="DOMAIN\\GROUPNAME" debug debug_state
require_membership_of=GROUP_SID debug debug_state
require_membership_of="GROUP_SID" debug debug_state
在这些带有“DOMAIN\”的语法中,我依赖于 PAM_WINBIND 手册页: https://www.samba.org/samba/docs/current/man-html/pam_winbind.8.html
如果我从 PAM 配置文件中删除“require_membership_of”,FTP 就可以工作,但显然 GROUP 成员资格过滤器不适用。
有谁遇到过类似的事情并能提供帮助吗?
答案1
你用的是 Gentoo 教程吧?我试过用它,但对我不起作用。当/etc/pam.d/vsftpd创建后,它会导入普通账户,通用认证和公共会话文件。如果您使用pam-auth-更新命令,PAM 工作正常,但 vsftpd 不行。
如果你使用的是 Debian,请复制上述文件中的内容,但要进行更改。将以下内容放入/etc/pam.d/vsftpd:
auth required pam_winbind.so require_membership_of=GROUPNAME krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=3 default=ignore] pam_krb5.so minimum_uid=1000
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
account [success=1 new_authtok_reqd=done default=ignore] pam_winbind.so
account requisite pam_deny.so
account required pam_permit.so
account required pam_krb5.so minimum_uid=1000
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_krb5.so minimum_uid=1000
session required pam_unix.so
session optional pam_winbind.so
session optional pam_systemd.so
session optional pam_mkhomedir.so
## Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# See: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/managing_smart_cards/pam_configuration_files
password required pam_cracklib.so retry=3
password sufficient pam_unix.so nullok use_authtok md5 shadow
password required pam_deny.so
如您所见,我没有更改核心内容,只做了一些更改。看到“顺序改变了结果”。在 @common-auth@ 文件中,以下行pam_krb5.so是第一个,但如果你这样设置,所有域用户都会登录 ftp。所以,这样设置必需的这pam_winbind.so仅显示您想要的 GROUPNAME。之后,它会在pam_krb5.so. 它是一个 AND 运算符。
重要提示:如果您删除 pam_permit.so 行,我不知道为什么,但它将不起作用。
尝试一下并且祝你好运!