好的。我知道这是这里被问得最多的问题之一。但大多数答案要么告诉我将 nologin 添加到允许的 shell(不行……不这样做)要么禁用 SELinux(我没有 - Ubuntu Server 16.04 RPi3)。
另一个选项是看到将我的设置pam_service_name
为。好吧,这有效!但后来我进一步了解到,这允许任何人登录,因为它只是绕过了 PAM 服务。所以我想,好吧,让我们在目录中ftp
创建一个名为的文件并使用它。ftp
/etc/pam.d/
我在文件中填充了以下内容:
auth required /lib/arm-linux-gnueabihf/security/pam_nologin.so
account required /lib/arm-linux-gnueabihf/security/pam_unix.so
password required /lib/arm-linux-gnueabihf/security/pam_unix.so
我漏掉了一些东西,但我不知道是什么。这是我第一次使用 PAM,所以说实话我不知道自己在做什么。
我想要的设置是只允许具有nologin
shell 的 unix 用户通过 进行身份验证vsftpd
。
问候
答案1
阅读了几篇文章后,我有点了解了 PAM 的工作原理。
文件中/etc/pam.d
的内容基本上是使用该模块/服务时检查的条件列表。因此,当我将文件内容设置/etc/pam.d/ftp
为以下内容时:
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required pam_succeed_if.so quiet user ingroup ftp
auth required pam_succeed_if.so quiet shell = /usr/sbin/nologin
我得到了我需要的,即只有 UNIX 用户FTP分组暂无登录因为 shell 可以登录。
解释每行的作用:
- 如果
USER
在/etc/ftpusers file
然后 否定 别的 允许并转到下一个规则 - 如果
USER
在GROUP ftp
然后 允许并转到下一个规则别的 否定 - 如果
USER
的SHELL = /usr/sbin/nologin
然后 允许转到下一规则别的 否定 - 没有下一条规则:允许访问
所有规则基本上都是AND'ed
当它们属于类型时必需的。
我正在链接我所遵循的指南。我还使用了 PAM 的 Linux 手册页,但没有链接它们。
如有遗漏,请随时补充。这是我第一次使用 PAM,我认为我很喜欢这个功能。
问候!