如果您还没有设置安全偏好,要求在一段时间的休眠和/或屏幕保护后需要输入密码,那么在一天开始时强制登录实际上没有任何好处 - 它在此期间一直是容易受攻击的,并且在早上6点锁定它,然后在一天的其余时间解锁它只会使其成为一个无效的安全策略。
但是,如果您想每天早上6点强制进行身份验证,您需要执行以下操作:
- 编写一个锁定计算机的bash脚本。有两种方法...
- pmset
- CGSession
- 使用launchd在每天指定的时间运行该脚本。
关于脚本/终端命令的注意事项:
- 我建议您在将其交给launchd之前先进行测试。只需在终端中键入命令以查看它们是否有效。
- 您必须使用命令chmod +x 将脚本设置为可执行,否则将无法正常工作。
使用pmset
假设在锁定屏幕或激活屏幕保护程序后的一段时间内需要“要求密码”,您可以在bash脚本中使用以下命令每天使计算机进入睡眠状态:
pmset sleepnow
脚本可以保存在~/Library/Scripts中,可以随意命名。让我们以sleep1.sh为例。
#!/bin/bash
#
/usr/bin/pmset sleepnow
运行该脚本后,您的Mac将立即进入睡眠状态。如果您设置了密码,并根据您设定的时间间隔唤醒它,它将要求您输入密码。
使用CGSession
这个使用“快速用户切换”机制来锁定您的桌面。您可以通过执行以下命令进行测试:
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
当你执行这个命令时,你的桌面将被锁定,并且你应该会看到一个登录界面,在那里你需要选择一个用户(如果你有多个用户)或者输入用户名和密码。
这个脚本,就像之前的例子一样,可以保存在~/Library/Scripts中,而且可以随意命名。让我们用sleep2.sh来作为这个例子的名称。
#!/bin/bash
#
# Get User ID
id=$(id -u
# Put the system to sleep but switch to current user
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend -switchToUserID $id
注意:如果您打算为所有已登录用户执行此操作(如果您的计算机上有多个用户),请将“id”行更改为以下内容:
id=$(id -u `whoami`)
这将确保命令使用当前登录用户的用户ID。
使用launchd每天运行此任务
为了让此任务每天运行,我们需要在指定时间由一个守护进程启动它。macOS自带了这样的工具,称为launchd。我在文章中详细介绍了它,你可以参考launchd plist格式,在特定时间的工作日运行命令。然而,在这里我们将使用一个基本的.plist文件来每天早上启动这个脚本。我喜欢使用文件命名规则com.user.XXXX.plist,将"XXX"替换成你喜欢的任何内容。例如,在这个例子中,我使用com.user.lockmachine.plist。
还要确保引用你打算使用的脚本,script1.sh或者script2.sh
你想如何运行这个守护进程?
放置脚本的位置很重要。请参考链接的帖子获取更多细节,然后决定是只为您自己还是所有用户使用。以下是一个快速总结:
- 只为您自己 - 放在~/Library/LaunchAgents中
- 所有用户 - 放在/Library/LaunchAgents中
然后,从您放置新创建的.plist文件的目录中,使用launchctl加载它。
sudo lauchctl load com.user.lockmachine.plist
验证一下吧!
完成了。每天早上6点,您的机器将被强制进入睡眠状态或切换会话(取决于您选择的脚本),您将被迫进行身份验证。在登录或启动时进行此操作没有意义,因为如果您对安全性如此关注,您就不会启用自动登录来绕过身份验证。