Mac OS X El Capitan 的 SIP 安全策略

更新日期: 2015-12-12 阅读次数: 13683 分类: Mac

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 聊聊, 查看更多联系方式

谈笑风生

Tanton.Green

OS X 10.11.6
mysql-5.6.21-osx10.8-x86_64
python2.7 
MySQL_python-1.2.5

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
这么做了之后,问题依旧存在

ImportError: dlopen(/Users/LK/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.11-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

大象腿

参考一下这里 http://stackoverflow.com/questions/10557507/rails-mysql-on-osx-library-not-loaded-libmysqlclient-18-dylib