MacOS下编辑/System/Library/LaunchDaemons/tftp.plist文件遇权限问题,求助搭建TFTP服务器的可行方案
MacOS下编辑/System/Library/LaunchDaemons/tftp.plist文件遇权限问题,求助搭建TFTP服务器的可行方案
嗨,太懂你这种被MacOS权限卡得头疼的感觉了!你遇到的核心问题其实是**系统完整性保护(SIP)**在搞事情——它会牢牢锁住/System目录下的原生系统文件,哪怕用sudo也没法直接修改或替换,这就是前两种方法失败的原因;而defaults命令本来就不是用来修改这类系统级plist文件的,报错也在情理之中。
下面给你两个靠谱的解决思路,按需选就行:
方案一:临时禁用SIP修改原生文件(仅临时操作,不推荐长期关闭)
如果一定要改系统自带的tftp.plist,只能先临时关掉SIP,步骤如下:
- 重启Mac,开机时按住Command+R进入恢复模式
- 点击顶部菜单栏「实用工具」→「终端」
- 输入命令:
csrutil disable,回车执行后重启Mac - 回到正常系统后,就能用
sudo vim /System/Library/LaunchDaemons/tftp.plist编辑并保存文件了 - 改完务必立刻恢复SIP:再次进入恢复模式,终端执行
csrutil enable,重启系统
⚠️ 划重点:禁用SIP会降低系统安全性,只适合临时操作,完成后一定要马上开启!
方案二:创建自定义TFTP服务(更安全,推荐首选)
其实完全没必要碰系统原生文件,我们可以在用户可自定义的/Library/LaunchDaemons目录下搭建自己的TFTP服务,全程不受SIP限制:
- 先创建TFTP根目录并设置权限:
sudo mkdir /private/tftpboot sudo chmod 777 /private/tftpboot - 在
/Library/LaunchDaemons下创建自定义plist文件,比如:
写入以下配置(可以根据需求调整,比如你需要的IPv4监听):sudo vim /Library/LaunchDaemons/com.custom.tftp.plist<?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.custom.tftp</string> <key>ProgramArguments</key> <array> <string>/usr/libexec/tftpd</string> <string>-i</string> <string>/private/tftpboot</string> </array> <key>Sockets</key> <dict> <key>Listeners</key> <dict> <key>SockFamily</key> <string>IPv4</string> <key>SockServiceName</key> <string>tftp</string> <key>SockType</key> <string>dgram</string> </dict> </array> <key>inetdCompatibility</key> <dict> <key>Wait</key> <false/> </dict> <key>RunAtLoad</key> <true/> <key>Disabled</key> <false/> </dict> </plist> - 设置plist文件的系统权限:
sudo chown root:wheel /Library/LaunchDaemons/com.custom.tftp.plist sudo chmod 644 /Library/LaunchDaemons/com.custom.tftp.plist - 加载并启动服务:
sudo launchctl load /Library/LaunchDaemons/com.custom.tftp.plist sudo launchctl start com.custom.tftp - 验证服务是否运行:用
netstat -an | grep 69查看TFTP默认端口(69)是否在监听
这样就能避开系统权限限制,安全搭建属于自己的TFTP服务器啦。
备注:内容来源于stack exchange,提问作者l1tsolaiki




