我想按如下方式配置我的 Debian box sudoers 文件:
- 如果 USERNAME 从 IP aaaa 远程登录:使用 sudo 不需要密码
- 如果 USERNAME 是从其他地方或本地远程登录的:需要密码才能使用 sudo
我知道如何使它们始终被需要,或者永远不需要,但我不知道如何为多个位置进行配置。
答案1
我认为您误解了 sudoers 文件中主机列表的用途。它的存在是为了让您能够在多台主机上使用同一个文件,但不允许在每个主机上都拥有相同的权限。
相反,您应该使用 ssh 密钥来允许以 root 身份无密码登录。您可以为相关用户创建两个密钥。使用密码短语加密其中一个密钥,并保留另一个密钥为明文。在您的服务器上,将公钥放入 root 的 .ssh/authorized keys 文件中。然后将其添加到from="a.a.a.a"
无密码公钥的行前面,以防止任何人从其他主机使用它。
这要求您允许 root 通过 ssh 登录,但您应仅允许使用 ssh 密钥的 root 登录。确保您的 sshd_config 具有以下设置:
PermitRootLogin without-password
答案2
我不确定是否已经有可以执行此操作的模块,但您绝对可以使用 PAM 系统来实现这一点。
可以使用该行将确认用户已通过 ssh 登录并使用正确 IP 的模块输入到 sudo 配置中,sufficient
然后它将授予访问权限。
我会看一下http://www.netbsd.org/docs/guide/en/chap-pam.html#pam-appl-prog并可能从那里开始或使用 pam_rhosts 作为样本。
requisite authorized_user #sudoers file / existing module?
sufficient via_ssh_from_listed_host
required password #usual sudo thing
这就是所需的模块模式。