El Capitan以后的MacOS安全机制

2017-03-31  本文已影响0人  柔软的胖

El Capitan之前的安全机制

MacOS中,总有一个root用户,uid为0

$ dscacheutil -q user -a name root
name: root
password: *
uid: 0
gid: 0
dir: /var/root
shell: /bin/sh
gecos: System Administrator

MacOS的登录用户不是root,没有最高权限。修改一些系统保护的资源时,需要临时切换到root用户。root具有最高权限,可以做任何事情。此时需要使用sudo命令。

比如登录用户是不能修改/etc/hosts文件的。

$ whoami
foo
$ vi /etc/hosts
'readonly' option is set for "/private/etc/hosts".
Do you wish to write anyway?

"/private/etc/hosts"
"/private/etc/hosts" E212: Can't open file for writing

要修改/etc/hosts文件,必须以root的身份执行这条命令。此时需要输入登录密码。

$ sudo vi /etc/hosts
Password:

El Capitan之后的安全机制

MacOS发现root的权限太大了,可以对系统做任何事情。如果用户使用root用户执行了一些误操作,会造成不可挽回的错误。从El Capitan(OS X 10.11)开始,MacOS限制了root用户的权限。以前可以用sudo执行的操作,现在不能执行了。

$ sudo mkdir /usr/root
mkdir: /usr/root: Operation not permitted

这个功能叫做System Integrity Protection。SIP在内核中对root的操作做了限制,即使使用sudo,也不能执行内核限制的操作。此时root失去最高权限,变成了一个缩水的root用户。

SIP增加的限制主要是以下四方面:

SIP保护目录

SIP保护以上目录,root不能在这些目录中执行写操作,否则会报错。

$ sudo touch /usr/IamRoot
Password:
touch: /usr/IamRoot: Operation not permitted

root也不能把设备挂载到这些目录上。

$ sudo mount -t nfs company.com:share_folder /System
mount_nfs: can't mount share_folder from company.com onto /System: Operation not permitted

SIP允许操作的目录

对开发者而言,现在不能随意放置文件。MacOS允许也推荐开发者把文件放到一下目录中。

这是我的Mac中,/usr/local目录下的内容。

$ tree /usr/local/ -L 1
/usr/local/
├── Cellar
├── Frameworks
├── Homebrew
├── bin
├── etc
├── go
├── include
├── lib
├── opt
├── remotedesktop
├── sbin
├── share
└── var

brew安装在/usr/local/Homebrew/bin/brew,brew安装的程序都放在/usr/local/Cellar/中。

$ tree -L 1 /usr/local/Cellar/
/usr/local/Cellar/
├── apr
├── apr-util
├── ascii
├── autoconf
├── automake
├── cmake
├── doxygen
├── erlang
├── git
├── htop
├── httpd24
├── jpeg
├── libevent
├── libpng
├── libtiff
├── libtool
├── mysql
├── openssl
├── pcre
├── pkg-config
├── rabbitmq
├── sphinx-doc
├── tree
├── wget
├── wxmac
└── zlib
上一篇 下一篇

猜你喜欢

热点阅读