将 vsftpd 主目录放在 Windows AD 共享上

将 vsftpd 主目录放在 Windows AD 共享上

我有外部客户端,他们通过 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

这是猜测,但我会尝试三种方法:

  1. 在 Linux 上使用 AD 用户(可能使用 SSSD)
  2. 在 vsftpd 上使用虚拟用户(我认为您需要确保 CIFS 挂载的文件系统文件归 vsftpd 用户所有)
  3. 做相反的事情:安装 Samba 并让管理员和操作员通过它访问文件(在我看来,这是更简单的解决方案)

答案2

事实证明,即使虚拟用户和实际用户混合使用也能正常工作!该指南适用于 Ubuntu 18.04 LTS,但也适用于其他 Linux,尽管文件位置可能会发生变化。

因此,一种方法是这样的:

  1. 在您的 CIFS 服务器上创建适当的目录,并在其上设置具有适当权限的单个 AD 用户(例如 unix_server_user@domain)。
  2. 使用 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 才能访问,以获得一些小小的安全奖励。

  1. /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

  1. 您需要修改/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 到其各自的主目录并可以在其中进行读写。

相关内容