Debian:如何检测用户首次使用 SFTP 连接?

Debian:如何检测用户首次使用 SFTP 连接?

我正在尝试设置以下内容:仅允许通过 ssh 密钥访问 OpenSSH sftp 服务器,即不允许密码验证。服务器上会自动生成 SSH 密钥。该服务器旨在用作 Web 托管服务器,每个网站一个用户。仅允许这些用户进行 sftp 访问,不允许使用 shell。

为了让新用户能够通过 sftp 检索密钥,我们允许他们第一次使用密码登录(仅限第一次!)。密码通过短信发送,每个新用户都有有限的时间来连接和获取密钥。第一次成功连接后,密码访问将被禁用,并且只允许该用户进行基于密钥的访问。

我已经配置了此工作流程的所有步骤,除了一个步骤:如何检测新用户首次通过 sftp 连接的时间?除了解析日志之外,还有其他优雅的方法吗?

答案1

除了解析日志之外,我还能想到另外两种方法。

  1. 安装 incron。然后您可以创建一个脚本,在读取和关闭文件时执行。该脚本可以锁定密码访问等。
  2. 使用 OTP(一次性密码)。这是一个完美的解决方案。 http://www.linotp.org/doc/latest/index.html

我会选择#2,但如果事情变得更加复杂,#1 也会很有用。

答案2

回答我自己的问题,指出另一种不需要安装任何额外软件的方法:PAM 模块 pam_exec。我的灵感来自这里(类似问题,不同语境):在我看来,

auth    optional     pam_exec.so /path/to/command

在 /etc/pam.d/ssh 文件中。这仅在 ssh/sftp 进行密码验证时运行,而不是在进行基于密钥的验证时运行。然后 /path/to/command 中的命令可能会

  • 将用户分配到只允许执行基于密钥的身份验证的组(sshd_config 中的 MatchGroup 指令)。

或者

  • 将用户名添加到一个简单的文本文件中。如果您随后在 /etc/pam.d/ssh 中输入“auth required pam_listfile.so item=user sense=deny file=/path/to/text/file”,pam_listfile 模块将在下次拒绝该用户。

有关 PAM 的优秀教程(包括我提到的两个模块),请参阅以下链接:

http://linuxtutorial.info/modules.php?name=Howto&pagename=User-Authentication-HOWTO/x115.html

http://susefaq.sourceforge.net/howto/pam.html

相关内容