在 AMI 机器上设置脚本来创建目录 - vsftpd、pam、mysql

在 AMI 机器上设置脚本来创建目录 - vsftpd、pam、mysql

我正在尝试在亚马逊 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 回答了类似的问题。

https://askubuntu.com/questions/406486/vsftpd-hanging-when-using-pam-exec-or-pam-script/408346#408346?newreg=bd1b0e5dec104d1abe5e91800d3a7763

提前致谢。

编辑

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 服务器上获取文件。

相关内容