如何防止用户登录,但在Linux中允许“ su-user”?


93

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

我尝试将外壳设置为,/bin/false但是尝试时su不起作用。

有几种方法仅允许登录su吗?

SSH是AllowUser要走的路吗?(如果可以的话,我将如何做)

Answers:


113

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

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


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

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

2
如果您需要环境变量(例如,从/ etc / profile中加载),则传递一个破折号即可:su - -s /bin/bash user
Leons 2014年

13

如果您仍然希望su工作,则可以将su用作临时shell sudo -u [username]或将其传递-s /bin/bash给su。在没有shell的情况下,他们都做同样的事情/etc/passwd


7

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


用户需要具有有效的外壳程序才能运行吗?我很确定您在向另一个用户求助之后,您仍在同一原始外壳中...您实际上没有以其他用户身份登录...因此,只需将外壳设置为/ dev / null还有。
Brian Postow 2010年

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

3

在sshd_config中添加一行 DenyUser [username]

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


1
应该是DenyUsers,带有“ s”。
David G

2

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


1

正如其他人所说的;

DenyUser usernameDenyGroup groupnamesshd_config将防止密钥对/密码登录通过ssh。

尽管我通常按照类似的方式做类似的AllowGroup ssh事情,或者明确地添加需要ssh访问该组的人。

然后,您可以按照别人所说的做:passwd -d username清空用户密码,使他们无法在控制台上登录或以其他方式登录。还是最好passwd -l username“锁定”帐户。ssh有可能会拒绝访问已锁定的帐户,即使使用密钥也是如此,但我对此并不乐观。


1
实际上,即使帐户密码已锁定,ssh仍允许您使用密钥身份验证登录。
理查德·霍洛威

1

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


1

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

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

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



0

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

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

usermod -e 1 -L user

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


0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.