V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jeesk
V2EX  ›  macOS

macos 普通用户如何不使用密码修改代理设置?

  •  
  •   jeesk · 134 天前 · 1092 次点击
    这是一个创建于 134 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我自己发现有些软件在非管理员用户下, 打开软件后,自动在代理中设置了代理服务器. 这是如何实现的?
    4 条回复    2024-06-30 00:14:19 +08:00
    josexy
        1
    josexy  
       134 天前
    参考 sing-box: https://github.com/SagerNet/sing-box/blob/dev-next/common/settings/proxy_darwin.go

    networksetup -setwebproxy
    networksetup -setsecurewebproxy
    networksetup -setsocksfirewallproxy
    geekdonie
        2
    geekdonie  
       133 天前   ❤️ 1
    macOS 下修改代理服务器是通过 SystemConfiguration 这个系统库实现的,应该是需要高权限的。
    用户空间 APP 内的提权方式一般有两种,一种是随用随授权,比如每次设置系统代理的时候都需要提示用户授权,适用于提权操作比较少的场景。
    还有一种是 Privileged Helper 方式,简单来说就是 APP 在首次打开的时候提示用户授权安装一个 helper 程序,这个 helper 本质上是由 launchd 管理的一个拥有高权限的 XPC Service 。这样只需要一次授权安装之后,用户空间的 APP 就可以通过 XPC 这种进程间通信的方式间接的让 helper 去做高权限操作。

    Apple 对于提权的文档: https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/AccessControl.html

    具体示例可以参考 macOS 下的各种 GUI 翻墙工具,比如 ClashX 、V2rayU 之类的,它们都会在首次打开的时候去安装一个 helper 。
    jeesk
        3
    jeesk  
    OP
       133 天前
    @josephxrays networksetup 命令从文档里面看到是需要管理员权限的。
    coffeelake
        4
    coffeelake  
       133 天前
    /etc/sudoers. xxxx ALL = (ALL) NOPASSWD: /usr/sbin/networksetup
    sudo /usr/bin/security authorizationdb write system.preferences.network allow
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:10 · PVG 07:10 · LAX 15:10 · JFK 18:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.