SIP(System Security Protection)是苹果在OSX EI Capitan及其后版本的操作系统中引入了一种新的安全机制。望文生义就可以看出,这个安全机制是用来维持系统的完整性,保护系统免收恶意软件的篡改。具体来说,SIP限制了root账户的权限范围,限制了root用户在对一些系统保护目录即其中文件的操作能力。但是任何对于安全性加强都意味着对灵活性的削弱。
SIP(System Security Protection)是苹果在OSX EI Capitan及其后版本的操作系统中引入了一种新的安全机制。望文生义就可以看出,这个安全机制是用来维持系统的完整性,保护系统免收恶意软件的篡改。具体来说,SIP限制了root账户的权限范围,限制了root用户在对一些系统保护目录即其中文件的操作能力。
SIP的保护范围包括下列路径:
- /System
- /usr
- /bin
- /sbin
- OSX的预装应用
第三方应用可以继续操作的目录包括:
- /Applications
- /Library
- /usr/local
但是任何对于安全性加强都意味着对灵活性的削弱。例如,在SIP保护下,类似proxychains-ng的程序无法再给受保护的目录下的程序添加网络钩子(hook)。
proxychains ng (new generation) - a preloader which hooks calls to sockets in dynamically linked programs and redirects it through one or more socks/http proxies.
一般来说,很多解决方案都建议关闭SIP功能(例如proxychains-ng的issue中给出的方法:# issue78)。不过这样也意味着丧失了SIP提供的保护功能。这篇文章给出了一个妥协的做法。在保留SIP的保护的同时,为保护目录下的程序应用proxychains-ng(其他类似的应用场景也可以使用这个办法)。这个解决方案的思路其实很简单:既然保护目录下的程序我们不能动,那么我们把保护目录下的程序复制一份到其他目录下运行就可以。
首先创建一个新的文件夹:
mkdir ~/.unprotected_apps
然后将这个路径添加到PATH
环境变量的头部:
# 可以添加到shell的配置文件中,如~/.bashrc或者~/.zshrc
export PATH="~/.unprotected_apps:$PATH"
然后将需要添加钩子的应用复制到这个目录下就可以了,例如:
cp $(which ssh) ~/usr/bin/ssh
cp $(which curl) ~/usr/bin/curl