您如何允许用户使用“ su -用户”登录,但阻止用户使用SSH登录?

我试图将外壳设置为/bin/false,但是当我尝试使用su时却没有?

是否有几种方法仅允许通过su登录? (如果可以的话,我该怎么办)

#1 楼

如果只有几个允许通过ssh登录的用户/组,则可以使用AllowUsers / AllowGroups;如果只有几个不允许登录的用户/组,则可以使用DenyUsers / DenyGroups。请注意,这仅限制通过ssh登录,其他登录方式(控制台,ftp,...)仍然可行。对于大多数ssh安装,您需要将这些选项添加到/ etc / ssh / sshd_config文件中。

如果将登录shell设置为/ bin / false,则可以使用su -s /bin/bash user(替换/ bin / bash随您选择的外壳)

评论


非常感谢大家。我没想到我的问题会受到2+的反对:)我非常喜欢“ su -s ...”结构,而console / ftp是一个不错的选择。我真的很喜欢“ su -s”之类的东西。

– NoozNooz42
2010年6月9日在16:27

su -s的把戏是金。我一直在为需要测试权限(例如apache,nobody等)的系统帐户使用它。我通常会执行su-user -s / bin / bash。可选参数-可用于提供类似于用户直接登录后所期望的环境。

– dmourati
2013年12月31日下午2:22

如果您需要加载环境变量(例如来自/ etc / profile的变量),则传递额外的破折号即可:su--s / bin / bash用户

–狮子座
2014年1月29日在18:34



#2 楼

如果仍然要让su工作,则可以使用sudo -u [username]或将-s /bin/bash传递给su作为临时外壳。它们在/etc/passwd中没有外壳的情况下都相同。

#3 楼

如果帐户没有密码(passwd -d用户名),则它们将无法交互登录(控制台,SSH等)。如果它们具有有效的外壳,su仍然可以工作。但是请注意“交互式”;如果有人决定为该帐户设置SSH密钥对,那么它将起作用!

评论


用户需要具有有效的外壳程序才能运行吗?我敢肯定,在您su到另一个用户之后,您仍然在同一原始shell中……您实际上并没有以其他用户身份登录……所以,仅将shell设置为/ dev / null可能有效还有。

–布莱恩·波斯托(Brian Postow)
2010年6月9日在16:24

是的,它仍然需要有效的外壳程序:[root @ localhost〜]#su daemon该帐户当前不可用。 [root @ localhost〜]#su-守护程序该帐户当前不可用。 (RHEL系统,守护程序的shell是/ sbin / nologin)

–astrostl
2010年6月9日在16:41

#4 楼

在sshd_config中添加一行DenyUser [username]

注意,这不会阻止该用户通过控制台登录。

评论


应该是DenyUsers,并带有“ s”。

– David G
16-3-21在18:39

#5 楼

除了上面提到的内容(禁用和/或未设置用户密码)之外,pam_access模块​​(在pam_access和access.conf上查找手册页)还可用于控制登录访问。

#6 楼

就像其他人所说的那样:

DenyUser username中的DenyGroup groupnamesshd_config会阻止通过ssh登录密钥对/密码。尽管我通常会做类似AllowGroup ssh之类的事情,或者明确地将需要ssh访问权限的人添加到该组中。

然后,您可以按照他人的说法进行操作:passwd -d username可以清空用户密码,以便他们无法在控制台上登录或以其他方式登录。或者更好的选择“锁定”帐户。 ssh可能即使使用密钥也会拒绝访问锁定的帐户,但我并不肯定。

评论


实际上,即使帐户密码已锁定,ssh仍允许您使用密钥身份验证登录。

–理查德·霍洛威(Richard Holloway)
2010年6月9日22:34

#7 楼

正如我在评论中提到的那样,我认为您仍然可以使用无效的shell进入帐户。因此,如果将用户的外壳程序设置为/ dev / null或bin的外壳程序,则您仍应该能够su到该用户...但是任何以任何方式登录的尝试都会使您退出...

#8 楼

通过添加来编辑/ etc / shadow!到密码哈希的开头。

username:!<hash>:#####:#:#####:#:::


当确保新安装的安全时,这是我在安装sudo之后要做的第一件事,因此没有人能够使用root用户登录或ssh进入系统, sudo用户仍可以以root用户身份执行。

#9 楼

知道哪种机制最好取决于需求。如果知道要求,则可以选择适当的机制。以上所有答案对于某些要求均有效。

您是否只想限制SSH访问?您需要访问邮件或ssh方法吗?只能从根访问吗?

如果以root以外的用户身份运行,则su - user将要求该用户提供密码。但是,sudo -u user -i不需要用户密码。

#10 楼

不要为不允许登录或删除的用户指定密码。

# passwd -d myuser


#11 楼

假设您只想从root用户的帐户中获取用户,并禁用所有其他访问权限:

使用此命令(以root用户身份运行):

usermod -e 1 -L user


这会禁用密码登录(如建议其他答案一样),但也会使该帐户过期。您无法登录过期的帐户,例如使用SSH密钥。您仍然可以su user,尽管它会显示该帐户已过期的通知。