我有外部客户端通过 Ubuntu 18.04 上的 vsftpd FTP 上传/下载文件。他们使用 linux 帐户(不是虚拟帐户),被 chroot 并且只需要(并且确实)在他们自己的目录下查看。
现在,他们的家需要以某种方式从 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 将/如何与上述设置一起使用。
在这里猜测,但我会尝试 3 种方法:
事实证明,即使是虚拟用户和实际用户的混合也有效!该指南适用于 Ubuntu 18.04 LTS,但也应适用于其他 Linux,尽管文件位置可能会更改。
因此,一种方法是:
/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
添加虚拟用户是通过
htpasswd -d
/etc/vsftpd.passwd 文件上的命令完成的。该文件也可以是 root 访问权限,仅用于一些次要的安全措施。请注意,当使用 htpasswd 时 pam_pwdfile 似乎仅支持 vsftpd.passwd 文件的 CRYPT 加密,这是不安全的,因此您应该按照链接中的说明使用 openssl 生成密码,或者另外至少使用 SSL 或 IP 地址限制来进行 FTP 访问。
本地用户:
auth required pam_shells.so
所有这些行都应该与通常的 @include common-* 行以及您在 vsftpd pam 文件中需要的任何其他行一起出现。
为 /etc/vsftpd.conf/ 中命名为用户的每个本地和虚拟用户添加文件。
本地用户应该只有 idle_session_timeout 的正常值或您需要的任何值。他的 homedir 将是通常的 /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 登录都有各自的 homedir 的 chroot 并且可以在其中读取和写入。