我正在尝试在亚马逊 ami 64 位盒子上设置 vsftpd,免费层微型。
按照这些说明,http://wiki.centos.org/HowTos/VirtualVsFtpd我已经成功地启动并运行了我的 ftp。只要我手动创建用户主目录,就可以完美运行。
需要帮助自动设置用户主目录。对于 ftp 客户端
我想做的下一件事是设置一个脚本来自动设置用户主目录,而不必手动执行此操作。我在这里找到了一些文档,http://t3chnick.blogspot.com/2011/12/vsftp-mysql-virtual-with-auto-create.html我花了几个小时试图让它发挥作用,但没有成功。
就像 nicks 文档一样,我修改了我的/etc/pam.d/vsftpd
文件以包含以下代码行。
#%PAM-1.0
session optional pam_keyinit.so force revoke
# Auth in MySQL
auth requisite pam_mysql.so user=vsftpd-ro passwd=readonly host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=0
auth required pam_script.so onerr=success dir=/etc/pam-script**
现在我的困惑
由于我缺乏知识,我不确定我是否应该创建脚本文件,或者它是否已经包含在盒子中,我只需要修改它。我假设当 Nick 发布他的示例时,他在 32 位机器上创建了脚本,但在他的文章底部他谈论了 64 位脚本。
无论如何,当我尝试导航到时,$ cat /etc/pam-script/pam_script_auth
我发现脚本和pam-script
目录都不存在。如果我尝试创建它,除非我使用,否则我会收到权限被拒绝错误sudo vi /etc/pam-script/pam_script_auth
现在,我再次不确定手动创建脚本是否是解决此问题的正确方法。我不确定是否应该下载某些内容,或者是否在 64 位框中下载它们是否是现有脚本,其他地方需要修改。无论如何,在手动创建它并授予脚本读取、写入、执行权限后,我最终得到了这个。
$ cat /etc/pam-script/pam_script_auth
pam_script_auth
#!/bin/sh
if [ ! -d "/opt/ftp/$PAM_USER" ]; then
/usr/bin/env mkdir /opt/ftp/$PAM_USER
/usr/bin/env chown ftp:ftp /opt/ftp/$PAM_USER
fi
现在我仍然可以登录该框,但它似乎无法针对数据库进行身份验证,并且我没有看到用户文件的创建位置。我猜他们的剧本有问题。我还发现了以下 ubuntu 问题,其中 nick 回答了类似的问题。
提前致谢。
编辑
jayhendren 建议使用 pam_mkhomedir.so 而不是脚本。
/etc/pam.d/vsftpd
如果我错了,请纠正我,但我的假设是像这样配置我的
#%PAM-1.0
session optional pam_keyinit.so force revoke
# Auth in MySQL
auth requisite pam_mysql.so user=vsftpd-ro passwd=readonly host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=0
session required pam_mkhomedir.so skel=/opt/ftp/ umask=0022 debug
account required pam_mysql.so user=vsftpd-ro passwd=readonly host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=0
有人可以验证这个配置吗?
答案1
以下是一些想法:
1)您可能需要使用 pam_script 模块或类似的模块来创建用户 homedir。 pam 模块 pam_mkhomedir 将主目录基于 passwd 文件(或 ldap 等)中看到的内容,并假定多个 uid/gid/homedir 映射。您的用户在 mysql 中是虚拟的,而不是基于系统识别的 passwd 条目,并且可以在 vsftp 世界中很好地发挥作用。
pam_script 模块很可能不包含在您的发行版中,您可能需要查找外部包或从源代码编译该包。
2) $PAM_USER 是一个传递给 pam 模块的环境变量: 使用 pam_script,如何在所有情况下传递 PAM_AUTHTOK 和 PAM_USER?
3) 当您到达脚本部分时,请检查 selinux 错误,因为 /etc/pam-script/pam_script_auth 可能会被写入到您的发行版的非标准位置。
4) 将 /etc/pam-script/pam_script_auth 中的输出发送到日志文件,以便您可以查看是否收到与命令相关的错误。
$ cat /etc/pam-script/pam_script_auth
#!/bin/sh
echo "I got here" >> /tmp/script.out 2>&1
if [ ! -d "/opt/ftp/$PAM_USER" ]; then
/usr/bin/env mkdir /opt/ftp/$PAM_USER >> /tmp/script.out 2>&1
/usr/bin/env chown ftp:ftp /opt/ftp/$PAM_USER >> /tmp/script.out 2>&1
fi
祝你好运,
缺口
答案2
所以这是你的脚本:
#!/bin/sh
if [ ! -d "/opt/ftp/$PAM_USER" ]; then
/usr/bin/env mkdir /opt/ftp/$PAM_USER
/usr/bin/env chown ftp:ftp /opt/ftp/$PAM_USER
fi
尝试使用您的脚本:
#!/bin/sh
if [ ! -d "/opt/ftp/${PAM_USER}" ]; then
/usr/bin/env mkdir /opt/ftp/${PAM_USER}
/usr/bin/env chown ftp:ftp /opt/ftp/${PAM_USER}
fi
PAM_USER 是一个变量,对吗?但我不知道你在哪里创建这个变量。
我有一个类似的脚本,他检查我的主机名以在 tftp 服务器上获取文件。