我有外部客户端,他们通过 Ubuntu 18.04 上的 vsftpd FTP 上传/下载文件。他们使用 Linux 帐户(不是虚拟的),已 chrooted,并且只需要(并且确实)查看自己的目录。
现在,他们的家需要以某种方式从 Windows 访问,以便我们的应用程序管理员和特定应用程序操作员(他们是常规 Windows AD 用户)查看并编辑上传的内容。
我想将他们的整个 /home 从我们文件服务器上的 Windows AD 共享中移出,并让特定的 AD 安全组可以访问,但我不确定这是否适用于 Linux 权限?我明确希望避免通过网络共享 Ubuntu 文件夹。
想法:
从 AD 文件服务器将 /home 挂载为 CIFS 共享。
vsftpd——FTP 用户 chroot 到挂载的 /home——每个用户都可以读取/写入自己的目录
Windows AD 用户 - 可以在其现有共享上查看 Windows 下的目录,并且具有适当的 AD 安全组可以读取/写入任何主子目录下的任何文件
这有用吗?如果不行,我还能做什么?也许我需要转向虚拟 vsftpd 用户?
我已经在 Ubuntu 上安装了几个 CIFS 共享,但它们都映射到单个 uid/gid,而且我不确定 vsftpd 是否能/如何使用上述设置。
答案1
这是猜测,但我会尝试三种方法:
- 在 Linux 上使用 AD 用户(可能使用 SSSD)
- 在 vsftpd 上使用虚拟用户(我认为您需要确保 CIFS 挂载的文件系统文件归 vsftpd 用户所有)
- 做相反的事情:安装 Samba 并让管理员和操作员通过它访问文件(在我看来,这是更简单的解决方案)
答案2
事实证明,即使虚拟用户和实际用户混合使用也能正常工作!该指南适用于 Ubuntu 18.04 LTS,但也适用于其他 Linux,尽管文件位置可能会发生变化。
因此,一种方法是这样的:
- 在您的 CIFS 服务器上创建适当的目录,并在其上设置具有适当权限的单个 AD 用户(例如 unix_server_user@domain)。
- 使用 unix_server_user 和本地用户的 AD 权限挂载 CIFS 共享,并将其映射到 VSFTPD 服务器用户。
/etc/fstab
:
//Your_CIFS_Server/share /mnt/cifs_homes cifs credentials=/etc/your_AD_password_data_file,uid=ftpuser,gid=ftpusers,file_mode=0770,dir_mode=0770 0 0
显然,不要忘记将密码文件设置为只有 root 才能访问,以获得一些小小的安全奖励。
/etc/vsftpd.conf
至少应该有这些行:
local_enable=YES nopriv_user=ftpuser chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd user_config_dir=/etc/vsftpd.userconf
- 您需要修改
/etc/pam.d/vsftpd
以支持虚拟用户和本地用户:
虚拟用户:
auth sufficient pam_pwdfile.so pwdfile /etc/vsftpd.passwd account sufficient pam_permit.so
通过 /etc/vsftpd.passwd 文件上的命令添加虚拟用户htpasswd -d
。出于一些较小的安全措施,此文件也只能由 root 访问。
请注意 pam_pwdfile使用 htpasswd 时似乎仅支持 vsftpd.passwd 文件的 CRYPT 加密,这并不安全,因此您应该按照链接中所述使用 openssl 生成密码,或者至少使用 SSL 或 IP 地址限制进行 FTP 访问。
本地用户:
auth required pam_shells.so
所有这些行都应该与常见的 @include common-* 行以及 vsftpd pam 文件中所需的其他任何内容一起出现。
在 /etc/vsftpd.conf/ 中为每个本地和虚拟用户添加以用户命名的文件。
本地用户应该只具有正常的 idle_session_timeout 值或您需要的任何值。他的主目录将是通常的 /home 或 /etc/passwd 中设置的任何值。
虚拟用户除了需要本地用户之外,还应具有以下几行:
chroot_local_user=YES local_root=/mnt/cifs_homes/$USER user_sub_token=$USER virtual_use_local_privs=YES guest_enable=YES nopriv_user=ftpuser guest_username=ftpusers
最后你得到的是:
1) 从 Windows 方面来看,访问由您为其设置 AD 权限的任何 AD 用户和组控制。请记住,unix_server_user@domain 应该对其具有写访问权限,除非您想要只读 FTP。
2) 从 Unix 开始,所有虚拟用户访问都映射到 ftpuser.ftpusers。本地用户照常使用 Unix 服务器 /home。
3)所有 FTP 登录都已 chroot 到其各自的主目录并可以在其中进行读写。