Definindo uma senha de firmware

1

Atualmente, tentando usar um script (preferencialmente shell) para configurar a senha do firmware em uma nova instalação do OSX. Eu obviamente achei isso:

http://osxdaily.com/2014/01/06/set-firmware-password-mac/

que funcionaria durante uma instalação manual, mas gostaríamos de automatizar isso o máximo possível. Não consigo encontrar nenhuma documentação sobre como escrever um script para configurar uma senha de firmware (dinâmica).

Minha pergunta é:

É possível usar um script ou programa para configurar uma senha de firmware dinâmica no OSX 10.8 / 10.9? Se sim, você sabe como? Você conhece alguma documentação?

Nathan Lafferty
fonte
1
Se você estiver considerando uma senha de firmware, recomendo que você leia também esta e suas respostas. apple.stackexchange.com/questions/22275/...
zigg

Respostas:

6

Se você montar a partição oculta "Recovery HD" no Terminal:

sudo diskutil mount Recovery\ HD

e monte novamente o "BaseSystem.dmg" clicando duas vezes nele:

insira a descrição da imagem aqui

você poderá usar o setregproptool, localizado dentro de "Firmware Password Utility.app":

insira a descrição da imagem aqui

Para chegar à pasta que contém setregproptoolo botão direito do mouse (ou clique com o botão Control pressionado) "Firmware Password Utility.app", selecione "Mostrar conteúdo do pacote" e navegue até Conteúdo / Recursos.

Como alternativa à descrição neste link:

Defina uma senha de firmware na linha de comando - (consulte a publicação de "13 de setembro de '11 05:04:00")

você pode copiar o "Firmware Password Utility.app" para um local mais aceitável (por exemplo, na unidade local) e usá-lo a partir daí.

Estas são as opções de setregproptool:

$ sudo Firmware\ Password\ Utility.app/Contents/Resources/setregproptool -h
Password:
setregproptool v 2.0 (9) Aug 24 2013
Copyright (C) 2001-2010 Apple Inc.
All Rights Reserved.

Usage: setregproptool [-c] [-d [-o <old password>]] [[-m <mode> -p <password>] -o <old password>]

-c              Check whether password is enabled.
                        Sets return status of 0 if set, 1 otherwise.
-d              Delete current password/mode.
                        Requires current password on some machines.
-p              Set password.
                        Requires current password on some machines.
-m              Set security mode.
                        Requires current password on some machines.
                        Mode can be either "full" or "command".
                        Full mode requires entry of the password on
                        every boot, command mode only requires entry
                        of the password if the boot picker is invoked
                        to select a different boot device.

                When enabling the Firmware Password for the first
                time, both the password and mode must be provided.
                Once the firmware password has been enabled, providing
                the mode or password alone will change that parameter
                only.

-o              Old password.
                        Only required on certain machines to disable
                        or change password or mode. Optional, if not
                        provided the tool will prompt for the password.
Rene Larsen
fonte
1
Ótima resposta! Adicionei mais informações sobre como montar o HD de recuperação e onde BaseSystem.dmge onde setregproptoolestão localizados.
jaume
Se estiver usando o modo "completo", o que não é possível com a GUI, a senha do firmware será solicitada em cada inicialização, e não apenas quando um dispositivo de inicialização diferente deve ser usado (o modo "comando" usado com a GUI) .
Rene Larsen
2

Eu fiz um script de shell que faz o truque

#!/bin/sh    
diskutil mount Recovery\ HD & wait
hdiutil attach -quiet -nobrowse /Volumes/Recovery\ HD/com.apple.recovery.boot/BaseSystem.dmg & wait
echo "What is the current Firmware password?"
read -s OLDPASSWORD
echo "What is the NEW Firmware password?"
read -s NEWPASSWORD
echo "Confirm the NEW Firmware password?"
read -s CONFIRMPASSWORD
while [ "$NEWPASSWORD" != "$CONFIRMPASSWORD" ]; 
    do
        read -s -p $'\x0aPasswords don\'t match. What is the NEW Firmware password?' NEWPASSWORD
        read -s -p $'\x0aConfirme the NEW Firmware password?' CONFIRMPASSWORD
    done

echo $'\x0aEnter the computer\'s admin password'
sudo /Volumes/OS\ X\ Base\ System/Applications/Utilities/Firmware\ Password\ Utility.app/Contents/Resources/setregproptool -m command -p $CONFIRMPASSWORD -o $OLDPASSWORD
diskutil unmount force Recovery\ HD & wait
echo "New Password is Set"

O único problema que encontrei é que ele está gravando a senha no log do console em texto sem formatação.

Alguém sabe como impedir o registro nos logs do console?

Traço
fonte
1
A senha está aparecendo no log do console como parte do comando sudo? Se você sudo o script de shell inteiro, poderá remover o sudo do comando setregproptool. Outra opção seria armazenar $ CONFIRMPASSWORD em um arquivo temporário e, em seguida, colocá-lo no lugar de $ CONFIRMPASSWORD
Kent
como eu iria rodar o shell inteiro no sudo? Nunca faça isso antes.
Dash
Supondo que seu script seja "SetFirmware.sh", sudo SetFirmware.shprimeiro solicite a senha do root e execute o script inteiro como root. Em seguida, tudo o que aparece no log do console será o nome do arquivo SetFirmware.sh.
Kent
Isso funcionou! Existe uma maneira de adicionar o arquivo ao arquivo para que ele permaneça um executável clicável e não precise sudo path / to / file a partir de outra janela do terminal?
Dash
Isso pode ajudar: stackoverflow.com/questions/5125907/… ... na verdade, não, não vai ajudar. Porque não pode fazer o sudo.
Kent