Zio*_*yte 10 ssh accounts usermod
如果可能的话,我需要锁定一些用户帐户,而又不弄乱他们的主页。
正常的方式是,usermod -L user但它似乎保留开放的 ssh 登录与公钥身份验证(通常在此服务器上使用)。
我知道我可以mv /home/user/.ssh /home/user/_ssh或类似的东西,但这是这样做的正确方法吗?
我缺少什么?
roa*_*ima 13
文档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
Run Code Online (Sandbox Code Playgroud)
如果您可能设置了默认到期日期,则/etc/default/useradd可以将其值(如果有)包含在解锁过程中:
usermod -U -e "$( . /etc/default/useradd; echo "$EXPIRE")" someuser
Run Code Online (Sandbox Code Playgroud)
对于帐户过期的用户来说,计划的作业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
Run Code Online (Sandbox Code Playgroud)
安排的作业at仍未尝试。(我不清楚一旦过了截止日期它们是否会运行;从经验来看似乎不会。)
已在锁定且过期的帐户下运行的其他进程不受影响并继续运行。
Mic*_* P. 11
发出“usermod -L user”后,您可以通过将此行添加到/etc/ssh/sshd_config文件的末尾来拒绝 ssh 访问:
DenyUsers user
Run Code Online (Sandbox Code Playgroud)
或者您可以为此目的创建一个组,以便通过将用户添加到该组来拒绝 ssh 登录:
groupadd deny-ssh
usermod -a -G deny-ssh user
Run Code Online (Sandbox Code Playgroud)
并将该组添加到/etc/ssh/sshd_config文件的末尾:
DenyGroups deny-ssh
Run Code Online (Sandbox Code Playgroud)
每次更改/etc/ssh/sshd_config文件后,请确保重新加载 sshd 守护进程以应用更改:
systemctl reload sshd
Run Code Online (Sandbox Code Playgroud)
reload 命令将加载新设置并保持所有现有 ssh 会话打开。
或者,您可以更改用户 shell,这样即使他登录也不会获得 shell:
usermod --shell /usr/sbin/nologin user
Run Code Online (Sandbox Code Playgroud)
我建议创建一个简单的 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
Run Code Online (Sandbox Code Playgroud)
现在您只需像这样执行脚本:
./deny-logon.sh user
Run Code Online (Sandbox Code Playgroud)
并且它会自动为“用户”进行上述所有更改。
编辑:@roaima 解决方案是最正确的解决方案,帐户过期会禁用对其的所有访问,如果您想阻止用户登录,则应该这样做。
您应该能够通过添加用户的用户名或组来禁用用户的 ssh 登录
/etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)
在设置DenyUsers和/或DenyGroup.
看man 5 sshd_config。
不要忘记HUPsshd。
| 归档时间: |
|
| 查看次数: |
4867 次 |
| 最近记录: |