设想这样一个场景:你管理的服务器上运行着多个系统,大量用户每天都在登录操作。总有一些人用完就忘,会话长期挂在那里,既不退出也不关闭。一个处于连接状态的闲置会话有多危险,无需多言——有人可能趁机搞破坏,数据泄露、系统被篡改都不是小事。作为管理员,你不可能一台一台检查每个用户是否已经登出,面对成百上千台机器,那样做会累到怀疑人生。其实,完全可以交给系统自动处理:一旦超过指定时间不活跃,直接强制下线。下面分享几种在类 Unix 系统上实现的方法,操作并不复杂,关键看你怎么选择。
在 Linux 上自动登出非活动用户:闲置超时设置详解
有以下三种实现思路,先看第一种,也是最直接的方式。
方法 1:修改用户级配置文件(~/.bashrc 或 ~/.bash_profile)
编辑你的 Bash 配置文件:
$ vi ~/.bashrc
或者:
$ vi ~/.bash_profile
在文件末尾添加一行:
TMOUT=100
这里的 100 代表秒数,你可以根据实际需求调整。保存并退出后,执行以下命令让更改立即生效:
$ source ~/.bashrc
或
$ source ~/.bash_profile
现在,让会话闲置 100 秒。时间一到,你会看到类似下面的提示,然后自动退出:
timed out waiting for input: auto-logoutConnection to 192.168.43.2 closed.
这个方法有个明显的缺陷:配置文件归用户自己管理,用户可以随时修改。如果他想取消超时,只需删除那一行再 source 一下,甚至可以直接运行 export TMOUT=0 或 unset TMOUT 来绕过。要想强制用户无法改动,请看下一种方法。
方法 2:全局强制配置(/etc/profile.d/autologout.sh)
以 root 身份登录,新建一个脚本文件:
# vi /etc/profile.d/autologout.sh
写入以下内容:
TMOUT=100readonly TMOUTexport TMOUT
保存退出,然后赋予可执行权限:
# chmod +x /etc/profile.d/autologout.sh
接下来注销或重启系统。此后,任何本地或远程登录的用户,在闲置 100 秒后都会被强制登出。因为变量被 readonly 锁定,普通用户即使想改也无法修改,只能乖乖按时下线。对于大多数需要统一安全策略的团队来说,这是比较推荐的做法。
方法 3:仅针对 SSH 会话(/etc/ssh/sshd_config)
前两种方法对本地和远程会话都生效。如果你只想控制远程 SSH 登录,本地控制台不受影响,那么使用这个方法更加精准。
编辑 SSH 服务端配置文件:
$ sudo vi /etc/ssh/sshd_config
找到(或添加)下面两行,并改为你想要的数值:
ClientAliveInterval 100ClientAliveCountMax 0
保存后重启 sshd 服务:
$ sudo systemctl restart sshd
然后从远程机器 SSH 登录这台服务器。100 秒不活动,连接会被远程主机主动关闭,你会看到:
$ Connection to 192.168.43.2 closed by remote host.Connection to 192.168.43.2 closed.
这样一来,本地管理员不受影响,远程用户却必须保持活跃,否则就会被踢下线。适合需要精细控制远程访问风险的场景。
三种方法各有优劣,根据实际情况选用即可。值得提醒的是:方法 1 适合个人开发机临时设置;方法 2 适合生产环境统一管控;方法 3 适合只约束远程登录的精细化策略。动手试试,几分钟就能搞定。
