Por que o OS X requer privilégios de administrador para desmontar uma unidade do terminal usando `umount`, mas não ao usar o Finder?

21

Qualquer pessoa pode desmontar uma unidade USB do Finder, clicando no ícone "ejetar" ao lado. No entanto, apenas um usuário com privilégios administrativos pode desmontar uma unidade do terminal usando umount.

O umount"ejetar" é diferente de alguma forma que requer mais segurança umountdo terminal?

Nota Estou executando o OS X 10.8.2

DQdlM
fonte

Respostas:

34

umounté um comando UNIX que segue a perspectiva tradicional do UNIX de que desmontar um sistema de arquivos é uma tarefa de administração do sistema .

A lógica por trás disso é que a desmontagem de um sistema de arquivos, se mal planejada ou executada, pode ser perturbadora e até destrutiva, especialmente em um sistema multiusuário. Portanto, usuários regulares estão protegidos contra esse comando potencialmente perigoso e apenas o usuário root ou privilegiado tem permissão para executá-lo.

Isso faz muito sentido quando o UNIX é usado como um sistema operacional de servidor, mas um sistema operacional de desktop baseado em UNIX (por exemplo, OS X ou Ubuntu ) tem outras necessidades: qualquer usuário deve poder desmontar unidades flash, discos rígidos removíveis etc. .

O Finder e diskutil(consulte man diskutil para obter mais informações) funcionam dessa maneira. Por exemplo, eu posso abrir o Terminal e executar com êxito:

$ diskutil unmount /Volumes/Untitled
Volume Untitled on disk2s2 unmounted

considerando que umountfalha:

$ umount /Volumes/Untitled
umount: unmount(/Volumes/Untitled): Operation not permitted

O que o Finder está diskutilfazendo de maneira diferente? Nos bastidores, eles enviam uma solicitação para um daemon chamado com.apple.SecurityServer (consulte a página do manual para obter mais informações), que concede o direito de desmontar o sistema de arquivos:

$ tail -f /var/log/system.log
Feb  6 16:57:37 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/System/Library/CoreServices/Finder.app' [171] for authorization created by '/System/Library/CoreServices/Finder.app' [171] (100013,0)
Feb  6 16:57:37 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskarbitrationd' [18] for authorization created by '/System/Library/CoreServices/Finder.app' [171] (100002,0)
Feb  6 17:01:46 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskutil' [646] for authorization created by '/usr/sbin/diskutil' [646] (100013,0)
Feb  6 17:01:46 avallone.local com.apple.SecurityServer[17]: Succeeded authorizing right 'system.volume.removable.unmount' by client '/usr/sbin/diskarbitrationd' [18] for authorization created by '/usr/sbin/diskutil' [646] (100002,0)

Isso permite que qualquer usuário desmonte uma unidade sem exigir autenticação adicional. (O Ubuntu tem uma filosofia semelhante. Se você estiver interessado, dê uma olhada nesta resposta no AskUbuntu.)

Para dar suporte ao comportamento explicado acima no Finder e diskutilusar várias estruturas da Apple:

$ otool -L $(which diskutil) | grep Disk
/System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/DiskManagement (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
$ otool -L /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder | grep Disk
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/DiskImages.framework/Versions/A/DiskImages (compatibility version 1.0.8, current version 344.0.0)
/System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/DiskManagement (compatibility version 1.0.0, current version 1.0.0)

umount, por outro lado, está vinculado apenas a esta biblioteca dinâmica:

$ otool -L $(which umount) 
/sbin/umount:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

( /usr/lib/libSystem.B.dylibusa várias outras bibliotecas, mas não está vinculado a nenhuma estrutura.)

jaume
fonte
11
Resposta incrível! Obrigado. Eu vim para o mac do linux, então eu não sabia diskutil. Esse é um bom conhecimento para ter.
DQdlM
Obrigado, estou feliz por poder ajudar a esclarecer as diferenças entre umounte diskutil/ Finder.
jaume