Mac OS X El Capitan 的 SIP 安全策略

文章目录

    SIP 是 System Integrity Protection 的简写,即系统完整性保护。是 Mac OS X 10.11 El Capitan 引入的一项安全特性。

    SIP 的作用

    保护系统进程、文件及目录不被其他进程篡改,即使是 root 用户及拥有 sudo 权限的用户也不可以。
    因为大苹果坚信拥有 root 权限的用户是系统安全的隐患。

    看看哪些目录被 SIP 包养了吧,

    /System, /bin, /sbin and /usr

    吓尿了吧,/usr 都被和谐了,但是好消息是 /usr/local 不在此列。

    SIP 引发的血案

    周末使用 F2E.im 搭建本地测试环境, 在导入 mysql-python 依赖包时报错

    Traceback (most recent call last):
      File "application.py", line 18, in <module>
        import torndb
      File "/Library/Python/2.7/site-packages/torndb.py", line 33, in <module>
        import MySQLdb.constants
      File "/usr/local/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
        import _mysql
    ImportError: dlopen(/usr/local/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
      Referenced from: /usr/local/lib/python2.7/site-packages/_mysql.so
      Reason: image not found
    
    $ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib                                                             
    ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
    

    是不是感觉不可思议,sudo 都没有权限! 是的, SIP 就是这么嚣张。

    解决方法就是使用 /usr/local 绕过 SIP

    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
    

    虽然网上好多采用关闭 SIP 的方式解决,但是个人不推荐这样做,如果我不是开发人员,我举双手赞同 SIP 的做法。毕竟邪恶的大公司太多了。

    信帮主得永生。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式