如何防止用户login,但在Linux中允许“su – user”?

你如何让用户使用“ su - userlogin,但阻止用户使用SSHlogin?

我试图将shell设置为/bin/false但是当我尝试su它不起作用。

有几种方法只允许sulogin?

SSH的AllowUser的路要走吗? (如果要走的话,我将如何做到这一点)

如果只有几个允许通过ssh或DenyUsers / DenyGroupslogin的用户/组(如果只有一些不允许login的用户/组),则可以使用AllowUsers / AllowGroups 。 请注意,这只能通过ssh限制login,其他login方式(console,ftp,…)仍然是可能的。 您需要将这些选项添加到大多数ssh安装的/ etc / ssh / sshd_config文件中。

如果你已经把loginshell设置为/ bin / false,你可以使用su -s /bin/bash user (用你select的shellreplace/ bin / bash

如果你仍然想要工作,你可以使用sudo -u [username]或传递-s /bin/bash作为临时shell。 它们在/etc/passwd中没有shell的情况下也是这样做的。

如果一个帐户没有密码( passwd -d用户名 ),他们不能以交互方式login(控制台,SSH等)。 如果他们有一个有效的shell, 仍然会工作。 注意“交互式”,虽然; 如果有人决定为该帐户设置一个SSH密钥对,它将起作用!

在sshd_config中添加一行DenyUser [username]

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

除了上面提到的(禁用和/或不设置用户密码)之外,还可以使用pam_access模块​​(在pam_access和access.conf中查找手册页)来控制login访问。

正如别人所说;

sshd_config DenyUser usernameDenyGroup groupname会阻止通过sshlogin密钥对/密码。

虽然我通常做类似于AllowGroup ssh东西,但是要明确地添加需要ssh访问权限的用户。

那么你可以像其他人那样说: passwd -d username来清空用户的密码,这样他们就不能在控制台login或者其他的方式。 或更好的passwd -l username来“locking”帐户。 有可能ssh会拒绝访问一个locking的帐户,即使有密钥,但我不积极。

正如我在评论中提到的那样,我认为你仍然可以用一个无效的shell进入账户。 所以,如果你把用户的shell设置为/ dev / null或者bin的shell,你应该仍然能够访问这个用户…但是任何以任何方式login的尝试都会退出你。

编辑/ etc / shadowjoin! 到密码哈希的开头。

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

在安装新安装时,这是我安装sudo后首先要做的事情,所以没有人能够使用root用户login或ssh进入系统,sudo用户仍然可以以root用户身份执行。

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

 # passwd -d myuser 

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

使用这个(以root身份运行):

 usermod -e 1 -L user 

这将禁用密码login(许多其他答案已build议), 但它也过期的帐户 。 您无法login到过期帐户,例如使用SSH密钥。 您仍然可以su user ,但会显示该帐户已过期的通知。

知道哪个机制最好取决于要求。 如果你知道要求,你可以select适当的机制。 以上所有答案都适用于一些要求。

你只想限制SSH访问? 你需要访问邮件或SSH方法? 只能从根访问吗?

如果用户运行的是非root用户, su - user将需要su - user的密码。 但是, sudo -u user -i不需要sudo -u user -i的密码。