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 8年前
大象腿 8年前