macOS后台启动项配置文件
macOS后台启动项配置文件

macOS后台启动项配置文件

在 macOS 中,许多程序(包括系统服务、第三方软件和恶意软件)都需要在后台长期运行。为了实现「持久化启动」,macOS 提供了统一的机制 —— launchd 启动管理器。

后台启动项配置文件就是由 launchd 读取的属性列表(.plist)文件,用来告诉系统要运行哪个程序、在什么时机运行、是否常驻。

启动项的类型

1、LaunchAgents

1、位置

/System/Library/LaunchAgents/(系统自带)

/Library/LaunchAgents/(全局第三方软件)

~/Library/LaunchAgents/(仅当前用户)

2、启动时机:用户登录时加载。

3、运行环境:用户会话环境,可以访问 GUI(如菜单栏、弹窗)。

4、常见用途:云盘同步客户端(Dropbox Helper)、输入法、菜单栏工具。

2、LaunchDaemons

1、位置

/System/Library/LaunchDaemons/(系统自带)

/Library/LaunchDaemons/(全局第三方软件)

2、启动时机:系统开机时即加载,不依赖用户登录。

3、运行环境:系统后台,通常以 root 权限运行,无法直接显示 UI。

4、常见用途:驱动程序、VPN 服务、数据库服务(MySQL、PostgreSQL)、杀毒软件守护进程。

Agents和Daemon区别

1、Agents:在用户登录时才会加载,必须有用户会话(GUI桌面环境)才能运行。

2、Daemons:在系统启动时就会加载,不依赖用户是否登陆,可以在登陆界面之前运行。

对比总结

1、/System/Library/LaunchAgents:系统自带的用户级服务,macOS资源,不要动;

2、/System/Library/LaunchDaemons:系统自带的全局后台服务,macOS资源,

不要动;

3、/Library/LaunchAgents:全局第三方用户级服务,例如微信、QQ、杀毒软件等,可清理;

4、/Library/LaunchDaemons:全局第三方后台服务,例如Docker、数据库、驱动等,可清理;

5、~/Library/LaunchAgents:当前用户的第三方服务,例如Dropbox、输入法等,可清理。

配置文件结构(示例)

一个典型的 .plist 文件如下(以 Docker 网络服务为例):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.docker.vmnetd</string>

    <key>ProgramArguments</key>
    <array>
        <string>/Library/PrivilegedHelperTools/com.docker.vmnetd</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

    <key>Sockets</key>
    <dict>
        <key>Listener</key>
        <dict>
            <key>SockPathName</key>
            <string>/var/run/com.docker.vmnetd.sock</string>
        </dict>
    </dict>
</dict>
</plist>

关键字段

1、Label:任务的唯一标识或称

2、Program / ProgramArguments:要运行的可执行文件及参数,例如这里执行的程序路径:

/Library/PrivilegedHelperTools/com.docker.vmnetd

3、RunAtLoad:是否在加载时立即运行。这里表示一旦用户登陆,就立即运行这个程序。

4、KeepAlive:是否保持常驻(崩溃后自动重启)。

5、Sockets / WatchPaths / StartInterval:触发条件(监听端口、目录变化、定时任务)。

「登录项」

登录项(Login Items):用户在「设置 –> 通用 -> 登录项与扩展」里能看到。

一般是完整的应用程序(如微信、QQ、Chrome)。

安全风险

1、正常用途:应用自启、驱动加载、服务守护。

2、恶意用途:黑客或木马会写入一个 LaunchAgent/Daemon,让恶意程序在开机或登录时自动运行,从而实现持久化驻留。

3、判断标准

文件名是否正规(如 com.microsoft.update.agent.plist 属于微软)。

程序路径是否可信(如 /Library/Application Support/… 里陌生的可执行文件就值得警惕)。

是否有数字签名(用 codesign -dv 检查)。

管理方法

1、查看当前启动项

launchctl list

这个命令会列出当前系统由launchd管理的所有job(任务)。

这些job可能来自:

配置文件(,plist),如/Library/LaunchAgents/、/Library/LaunchDaemons/、~/Library/LaunchAgents/ 等目录加载的。

App 运行时动态注册的 job:有些 App 会在启动时直接调用 API 注册后台任务,不一定会留下 .plist 文件。

launchctl list 显示的是“已经在运行或注册中的任务”,而不仅仅是“硬盘上有配置文件的启动项”。

2、卸载某个启动项

sudo launchctl bootout system /Library/LaunchDaemons/com.xxx.plist
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.xxx.plist

launchctl bootout:停止并卸载一个已经加载到内存的任务(job),但它并不会删除硬盘上的 .plist 文件。

system指的是系统级 domain(root/所有用户),对应 LaunchDaemons。

gui/$(id -u) 指的是当前用户的 GUI 会话 domain(登录桌面之后的环境),对应 LaunchAgents。

举例

/Library/LaunchDaemons/com.xxx.plist,表示系统开机时加载的后台守护进程,需要 sudo 停止。

~/Library/LaunchAgents/com.xxx.plist,表示只对当前用户生效的登录启动项,可以不用 sudo。

这两行命令的作用是:

第一行:停止一个全局的后台服务(Daemon)。

第二行:停止一个当前用户的后台代理(Agent)。

如果 .plist 文件还在的话,下次开机/登陆会重新加载。

3、结束进程+卸载进程

launchctl bootout可以卸载进程,kill命令也可以卸载进程。

先杀死进程:

ps aux | grep weixin
kill -9 <进程号>

卸载应用和残留文件:

rm -rf ~/Library/Application\ Support/WeChat
rm -rf ~/Library/Preferences/com.WeChat*
rm -rf ~/Library/Caches/com.WeChat*

4、彻底禁用

停止运行的job:

sudo launchctl bootout system /Library/LaunchDaemons/com.xxx.plist
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.xxx.plist

删除对应的 .plist 文件(建议先备份)。

sudo rm -f /Library/LaunchDaemons/com.xxx.plist
rm -f ~/Library/LaunchAgents/com.xxx.plist

重启系统,确保不会被重新加载。

再次检查:

launchctl list | grep com.xxx

总结

LaunchAgents:随用户登录启动,能显示 UI。

LaunchDaemons:随系统启动加载,后台运行,无 UI。

Login Items:用户可见的图形化登录启动项。

launchctl bootout = 停掉已经运行的任务(job)。

.plist 文件 = 定义启动项的配置,存放在不同目录。

系统的 /System/Library/… 路径是 macOS 内建服务,不要清理。

第三方软件的启动项主要在 /Library/… 和 ~/Library/…,清理它们才是安全的。

扩展知识

其他启动项

1、Shell配置文件里的启动项

~/.zshrc、~/.bash_profile、~/.zprofile、~/.profile

如果有人在这里偷偷加了 curl … | sh 或 launchctl load 之类的命令,每次打开终端都会运行。

2、StartupItems(旧机制)

/Library/StartupItems/
~/Library/StartupItems/

macOS 10.10 之后基本废弃,但老旧软件(或盗版软件)可能还会写这里。

3、内核扩展(驱动类启动项)

/Library/Extensions/
/System/Library/Extensions/

驱动层面的“启动项”,随系统启动而加载,风险更高。

木马进程

如果电脑安装过盗版软件,就需要检查系统里有没有莫名其妙(可能是木马)的守护进程:

1、/Library/LaunchAgents

2、 /Library/LaunchDaemons

3、~/Library/LaunchAgents/

或者登陆项。

如果有的话,参考前面的方法,先禁用再删除(记得备份),重启电脑检查是否彻底删除。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注