You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MacOS下编辑/System/Library/LaunchDaemons/tftp.plist文件遇权限问题,求助搭建TFTP服务器的可行方案

MacOS下编辑/System/Library/LaunchDaemons/tftp.plist文件遇权限问题,求助搭建TFTP服务器的可行方案

嗨,太懂你这种被MacOS权限卡得头疼的感觉了!你遇到的核心问题其实是**系统完整性保护(SIP)**在搞事情——它会牢牢锁住/System目录下的原生系统文件,哪怕用sudo也没法直接修改或替换,这就是前两种方法失败的原因;而defaults命令本来就不是用来修改这类系统级plist文件的,报错也在情理之中。

下面给你两个靠谱的解决思路,按需选就行:

方案一:临时禁用SIP修改原生文件(仅临时操作,不推荐长期关闭)

如果一定要改系统自带的tftp.plist,只能先临时关掉SIP,步骤如下:

  1. 重启Mac,开机时按住Command+R进入恢复模式
  2. 点击顶部菜单栏「实用工具」→「终端」
  3. 输入命令:csrutil disable,回车执行后重启Mac
  4. 回到正常系统后,就能用sudo vim /System/Library/LaunchDaemons/tftp.plist编辑并保存文件了
  5. 改完务必立刻恢复SIP:再次进入恢复模式,终端执行csrutil enable,重启系统

⚠️ 划重点:禁用SIP会降低系统安全性,只适合临时操作,完成后一定要马上开启!

方案二:创建自定义TFTP服务(更安全,推荐首选)

其实完全没必要碰系统原生文件,我们可以在用户可自定义的/Library/LaunchDaemons目录下搭建自己的TFTP服务,全程不受SIP限制:

  1. 先创建TFTP根目录并设置权限:
    sudo mkdir /private/tftpboot
    sudo chmod 777 /private/tftpboot
    
  2. /Library/LaunchDaemons下创建自定义plist文件,比如:
    sudo vim /Library/LaunchDaemons/com.custom.tftp.plist
    
    写入以下配置(可以根据需求调整,比如你需要的IPv4监听):
    <?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>
    
  3. 设置plist文件的系统权限:
    sudo chown root:wheel /Library/LaunchDaemons/com.custom.tftp.plist
    sudo chmod 644 /Library/LaunchDaemons/com.custom.tftp.plist
    
  4. 加载并启动服务:
    sudo launchctl load /Library/LaunchDaemons/com.custom.tftp.plist
    sudo launchctl start com.custom.tftp
    
  5. 验证服务是否运行:用netstat -an | grep 69查看TFTP默认端口(69)是否在监听

这样就能避开系统权限限制,安全搭建属于自己的TFTP服务器啦。

备注:内容来源于stack exchange,提问作者l1tsolaiki

火山引擎 最新活动