windows本地账户可用net user命令硬性限制登录时段,如net user username /times:m-f,9:00-17:00,时间格式须严格(无空格、英文逗号、24小时制),错误将导致策略静默失效。
用户登录时间与工作站限制是账户安全策略的关键环节,必须在认证流程早期生效,不能依赖应用层控制。
Windows 本地账户:用 net user 命令直接设时段
管理员命令提示符中执行即可,无需图形界面或重启:
- 新建并限时:net user username P@ssw0rd /add /times:M-F,9:00-17:00
- 已有账户追加限制:net user username /times:M-F,9:00-17:00(注意不带 /add)
- 时间格式必须严格:用英文逗号分隔,工作日缩写为 M-F,时间用 24 小时制、无空格、无中文冒号;写错会导致策略静默失效
- 验证方式:退出当前会话,在非允许时段(如周六上午)尝试登录,系统直接提示“此用户在此时间不允许登录”
Windows 域环境:AD 用户属性统一配置
所有策略由域控制器下发,客户端重启或组策略刷新后自动同步:
将提醒同步至 Windows/Outlook 日历。用户提及「提醒我」「设置提醒」「加到日历」「同步到日历」「日程」「calendar」「日历」时触发。支持Microsoft Graph API 设备代码流认证,无需 Web 服务器,直接写入用户 Outlook 日历。
- 登录工作站限制:打开“Active Directory 用户和计算机”→右键用户→属性→【账户】选项卡→【登录到】→选“下列计算机”→输入目标计算机的 NetBIOS 名称(如 PC01),不加域名或后缀
- 登录时间控制:同一【账户】选项卡→点击【登录时间】→弹出二维时间网格→框选需禁止的时段(如周六全天、周日全天、工作日 18:00–次日 7:00)→点【拒绝登录】→确定;蓝色区域代表拒绝,白色为允许
- 注意:工作站名称必须精确匹配;时间网格操作后需点击【应用】再【确定】,否则不保存
Linux 系统:用 pam_time.so 实现精准时段拦截
这是最推荐的方式,不影响 cron 或服务调用,只拦截交互式登录,并可审计:
- 编辑 /etc/pam.d/sshd(SSH)和/或 /etc/pam.d/login(本地终端),在 account 段最上方添加:
account required pam_time.so - 确保 /etc/security/time.conf 存在且格式正确,每行一条规则,例如:
sshd;*;alice;Wk0830-1730(仅工作日 8:30–17:30 允许 SSH 登录) - 规则字段说明:service 必须写 sshd(不是 ssh);ttys 填 *;users 支持单名、@group 或 !exclude;times 用 Wk/Mo-Su/Al,24 小时制无冒号
- 生效后,非授权时段尝试登录会直接返回 Permission denied,不提示输密码——这是正常表现,也是明确反馈
补充要点:防止已登录会话滞留
时段限制只管“能不能登录”,不管“登录后待多久”。需额外加固:
- Shell 空闲超时:在 /etc/profile.d/autologout.sh 中添加 export TMOUT=900 并执行 readonly TMOUT
- SSH 主动断连:在 /etc/ssh/sshd_config 中加入
ClientAliveInterval 300
ClientAliveCountMax 1 - 定时清理异常会话:写脚本解析 who 或 w 输出,对非授权时段仍活跃的会话执行 kill -9,建议通过 cron 每 10 分钟运行一次










