如何动态限制特定用户的 SSH 访问

如何动态限制特定用户的 SSH 访问

这里的目标是创建一个脚本来轻松管理机器的预订。当用户预订机器时,它应该是给定时间内唯一能够访问机器的人(当然管理员除外)。

我已经找到了使用 PAM 的解决方案。下面这一行代码/etc/pam.d/sshd就可以解决我的问题:

auth required pam_listfile.so item=user sense=allow file=/etc/ssh/sshd.allow onerr=fail

用户登录后/etc/ssh/sshd.allow

但它根本不起作用:

$ cat /etc/ssh/sshd.allow 
foo

$ tail -f /var/log/auth.log
Dec  1 12:12:05 mini sshd[2697]: Accepted publickey for bar from 192.168.0.11 port 58087 ssh2
Dec  1 12:12:05 mini sshd[2697]: pam_unix(sshd:session): session opened for user bar by (uid=0)

这里的/etc/pam.d/sshd文件

# PAM configuration for the Secure Shell service
auth       required     pam_env.so # [1]
auth       required     pam_env.so envfile=/etc/default/locale
auth required pam_listfile.so item=user sense=allow file=/etc/ssh/sshd.allow onerr=fail
@include common-auth
account    required     pam_nologin.so
@include common-account
@include common-session
session    optional     pam_motd.so # [1]
session    optional     pam_mail.so standard noenv # [1]
session    required     pam_limits.so
@include common-password

我正在运行 Debian Squeeze 盒子,我不知道 PAM 的行为是否与此不同。

答案1

与上面类似的想法:您可以在 sshd.conf 中使用 AllowGroups 来允许特定组(+ 管理员组),然后使用您的身份验证系统在该组中添加和删除用户,从而防止您编辑文件,或者至少只编辑具有完善界面的文件(通过 usermod 等的 /etc/group)。

答案2

为什么你没有在 /etc/ssh/sshd_config 中的 AllowUsers user1 user2 user3 部分中使用

答案3

您可以非常轻松地使用 pam_access 来实现此目的:

# /etc/pam.d/system-auth
account     required      pam_access.so

然后按如下方式控制谁有访问权限:

# /etc/security/access.conf
+ : root otheruser : ALL
- : ALL : ALL

相关内容