如果可能的话,我需要锁定一些用户帐户,而又不弄乱他们的主页。
正常的方式是,usermod -L user
但它似乎保留开放的 ssh 登录与公钥身份验证(通常在此服务器上使用)。
我知道我可以mv /home/user/.ssh /home/user/_ssh
或类似的东西,但这是这样做的正确方法吗?
我缺少什么?
答案1
文档man usermod
为您提供了推荐的解决方案:
-L
,--lock
锁定用户的密码。这会!
在加密密码前面放置一个 ,从而有效地禁用密码。您不能将此选项与-p
或 一起使用-U
。注意:如果您希望锁定帐户(不仅仅是使用密码访问),您还应该将
EXPIRE_DATE
设为1
。
进而
-e
,--expiredate EXPIRE_DATE
用户帐户将被禁用的日期。日期以格式指定YYYY-MM-DD
。空
EXPIRE_DATE
参数将禁用帐户的过期时间。
所以,把它变成一个真实的例子
usermod -L -e 1 someuser # Lock
usermod -L -e '' someuser # Unlock
如果您可能设置了默认到期日期,则/etc/default/useradd
可以将其值(如果有)包含在解锁过程中:
usermod -U -e "$( . /etc/default/useradd; echo "$EXPIRE")" someuser
对于帐户过期的用户来说,计划的作业cron
也会被禁用,而不仅仅是帐户锁定的用户。错误消息journalctl -u cron
显示过期用户的帐户名(在本例中test2
):
Apr 30 11:47:01 pi CRON[26872]: pam_unix(cron:account): account test2 has expired (account expired)
Apr 30 11:47:01 pi cron[472]: Authentication failure
Apr 30 11:47:01 pi CRON[26872]: Authentication failure
安排的作业at
仍未尝试。 (我不清楚一旦过了截止日期它们是否会运行;从经验来看似乎不会。)
已在锁定且过期的帐户下运行的其他进程不受影响并继续运行。
答案2
发出“usermod -L user”后,您可以通过将此行添加到末尾来拒绝 ssh 访问/etc/ssh/sshd_config文件:
DenyUsers user
或者您可以为此目的创建一个组,以便通过将用户添加到该组来拒绝 ssh 登录:
groupadd deny-ssh
usermod -a -G deny-ssh user
并将该组添加到末尾/etc/ssh/sshd_config文件:
DenyGroups deny-ssh
每次更改后/etc/ssh/sshd_config文件确保重新加载 sshd 守护进程以应用更改:
systemctl reload sshd
reload 命令将加载新设置并保持所有现有 ssh 会话打开。
或者,您可以更改用户 shell,这样即使他登录也不会获得 shell:
usermod --shell /usr/sbin/nologin user
我建议创建一个简单的 bash 脚本,只需一个命令即可完成上述所有操作。
拒绝登录.sh:
#!/bin/bash
#Lock user account
usermod -L $1
#Deny SSH connections
usermod -a -G deny-ssh $1
#Remove user Shell
usermod --shell /usr/sbin/nologin $1
#Reload sshd
systemctl reload sshd
现在您只需像这样执行脚本:
./deny-logon.sh user
并且它会自动为“用户”进行上述所有更改。
编辑:@roaima 解决方案是最正确的解决方案,帐户过期会禁用对其的所有访问,如果您想阻止用户登录,则应该这样做。
答案3
您应该能够通过添加用户的用户名或组来禁用用户的 ssh 登录
/etc/ssh/sshd_config
在设置DenyUsers
和/或DenyGroup
.
看man 5 sshd_config
。
不要忘记HUP
sshd。
答案4
锁定账户才是正确的做法。您可能还想删除authorized_keys 文件以阻止SSH。
请记住,除了 SSH 之外,还有其他登录方式。
使用“*rc”例程执行任何操作都很笨拙,但通常用于“仅限 sftp”帐户(如果它是 sftp 或 SCP 所说的实用程序帐户)。
但是 !password 更好改变如果需要恢复,则提供他们的密码。
一如既往,安全地保留备份。