Por que meu `rootless.conf` nem sempre afeta a escolha do SIP de quais arquivos recebem o tratamento de sinalizador` restrito`?

8

O que dizem as fontes

Como todos os outros, meu /System/Library/Sandbox/rootless.confarquivo contém as seguintes entradas:

$ cat /System/Library/Sandbox/rootless.conf
[…]
        /System
[…]
*       /System/Library/Extensions
        /System/Library/Extensions/*
[…]

Todas as fontes sobre o assunto que encontrei (exemplo 1 2 3 ) parecem sugerir que, de acordo com as regras de rootless.conf, essas entradas serão aplicadas no momento da inicialização e podem ser interpretadas da seguinte maneira:

  1. Dentro da /Systemhierarquia , nenhum processo pode gravar em nenhum arquivo ou pasta, exceto quando uma regra mais específica concede esse acesso;

  2. por dentro/System/Library/Extensions , qualquer processo com privilégios de root pode criar novos arquivos e subpastas;

  3. no entanto, nenhum processo é permitido modificar ou excluir quaisquer arquivos ou subpastas existentes dentro /System/Library/Extensions.

O que eu realmente observo

No entanto, quando examinei o conteúdo real /System/Library/Extensions, descobri para minha surpresa vários arquivos e pastas que, apesar de o SIP estar ativo, são perfeitamente editáveis ​​e excluídos:

$ csrutil status
System Integrity Protection status: enabled.
$ ls -lAO /System/Library/Extensions | tail -16
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 corecrypto.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 exfat.kext
drwxr-xr-x  3 root  wheel  -            102 19 Aug  2013 hp_Inkjet9_io_enabler.kext
drwxr-xr-x  3 root  wheel  -            102 27 Apr  2013 hp_fax_io.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 iPodDriver.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 mcxalr.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 msdosfs.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 ntfs.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 pmtelemetry.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 pthread.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 smbfs.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 triggers.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 udf.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 vecLib.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 webcontentfilter.kext
drwxr-xr-x@ 3 root  wheel  restricted   102 20 Apr  2016 webdav_fs.kext

Observe que hp_Inkjet9_io_enabler.kexte hp_fax_io.kextsão extensões de kernel de terceiros que já estavam presentes no momento em que atualizei para o El Capitan (o que fiz em maio de 2016).

Quando pesquiso a lista de exceções de SIP em /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths, também não vejo as extensões de terceiros listadas lá:

$ defaults read /System/Library/Sandbox/Compatibility.bundle/Contents/Info.plist CFBundleVersion
12.0
$ grep Extensions /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths
/System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/AppleRTL815XComposite109.kext
/System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/AppleRTL815XEthernet109.kext

Encontrei mais de uma dúzia de extensões de kernel que também não possuem o restrictedsinalizador e o com.apple.rootlessatributo; todas as extensões afetadas do kernel parecem ser extensões de terceiros que eu instalei ao longo da última década e aparentemente sobreviveram à atualização para o El Capitan.

O que me faz pensar nos seguintes enigmas:

O que eu adoraria saber

Q1 Bandeiras ausentes

Como é que nenhuma extensão de kernel de terceiros - e de fato nenhum arquivo que eu criei manualmente /System/Library/Extensions- recebe um restrictedsinalizador ou com.apple.rootlessatributo, mesmo que a rootless.confregra pareça exigir o contrário?

Por exemplo, uma ls -dlOcadeia ao longo do caminho hp_fax_io.kextrevela:

$ ruby -rpathname -e 'puts Pathname.new("/System/Library/Extensions/hp_fax_io.kext").enum_for(:ascend).to_a' | xargs ls -dlO
drwxr-xr-x   39 root  wheel  -           1394 19 Jan 11:36 /
drwxr-xr-x@   4 root  wheel  restricted   136 19 Jan 11:29 /System
drwxr-xr-x   80 root  wheel  restricted  2720 10 Jan 19:19 /System/Library
drwxr-xr-x  297 root  wheel  sunlnk     10098 22 Jan 00:57 /System/Library/Extensions
drwxr-xr-x    3 root  wheel  -            102 27 Apr  2013 /System/Library/Extensions/hp_fax_io.kext

Lembro-me também de que, na época em que fiz o upgrade de Yosemite, o instalador do El Capitan decidiu mudar basicamente tudo e a avó para a quarentena do SIP em muitos casos.

Q2 Hora da execução

Se eu fosse:

  • inicialize em um volume de recuperação,

  • depois adicione rootless.conf(no volume original) uma linha:

    /usr/local/*
    
  • e, em seguida, reinicie novamente no volume original,

o macOS apagaria todos os arquivos /usr/local/com restrictedsinalizadores na próxima reinicialização?

Caso contrário, isso me leva à minha pergunta final:

Q3 Finalidade real

Que finalidade rootless.conf realmente serve?

Synoli
fonte
2
Certamente gostaria que alguém da comunidade tivesse algumas respostas ou até dicas. Eu tenho perguntas semelhantes.
CXJ
2
De acordo com isso, a edição do rootless.conf (desativar o SIP, editar o arquivo, reativar o SIP) não deve alterar quais diretórios estão protegidos? Isso não parece realmente acontecer ... então o arquivo está sendo lido?
Wowfunhappy