iOSでは、10回のログイン試行の失敗後にデバイスがすべてのデータを削除するオプションがあります。xがユーザーアカウントにログインしようとして失敗した後にSSDが削除/再フォーマットされるように、macOSで同じオプションを使用するにはどうすればよいですか?
iOSでは、10回のログイン試行の失敗後にデバイスがすべてのデータを削除するオプションがあります。xがユーザーアカウントにログインしようとして失敗した後にSSDが削除/再フォーマットされるように、macOSで同じオプションを使用するにはどうすればよいですか?
回答:
オンボードツールを使用すると(「iMacを介して「Macを探す」や「Macをリモートで消去」などの外部サービスを使用せずに)diskutil ...
、ディスクがビジーであるため、でブートボリュームを消去または再フォーマットすることはできません。
ただし、ユーザーフォルダを削除することもできます。
以下の方法ではパスワードポリシーを使用し、ユーザーログイン機能の状態に応じて、起動デーモンとデーモンによって呼び出されるbashスクリプトがユーザーフォルダーを削除します。
デスクトップにパスワードポリシーのplistを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>policyCategoryAuthentication</key>
<array>
<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) or (policyAttributeCurrentTime > policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds)</string>
<key>policyIdentifier</key>
<string>com.apple.maximumFailedLoginAttempts</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>31536000</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>10</integer>
</dict>
</dict>
</array>
</dict>
</plist>
31536000秒間(= 1年)10回ログインに失敗すると、ユーザーログイン機能は無効になります。
bashスクリプトrmuserdir.shを作成します。
#!/bin/bash
PWPOL=$(pwpolicy -u username authentication-allowed)
if [[ $PWPOL == 'User <username> is not allowed to authenticate: Failed global policy "com.apple.maximumFailedLoginAttempts"' ]]
then rm -fR /Users/username
fi
/ usr / local / bin /にあり、実行可能にします。文字列usernameを自分のユーザー名に置き換えますが、山括弧はifステートメントに含めてください!
次の内容の起動デーモンorg.userdirrm.plistを/ Library / LaunchDaemons /に作成します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.userdirrm</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/usr/local/bin/rmuserdir.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/org.userdirrm.stderr</string>
<key>StandardOutPath</key>
<string>/tmp/org.userdirrm.stdout</string>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
ファイルの所有者とグループはroot:wheelで、ファイルのアクセス権は644である必要があります。デーモンは60秒ごとに実行されます。これは、キーStartIntervalの整数を変更することで調整できます。
パスワードポリシーをインポートします。
pwpolicy setaccountpolicies ~/Desktop/pwpolicy.plist
(authenticator = admin)パスワードを入力する必要があります。
デーモンを起動します。
sudo launchctl load /Library/LaunchDaemons/org.userdirrm.plist
スタブユーザーを作成し、bashスクリプトでユーザー名を一時的に変更し、このスタブユーザーでログインしようとする間違ったパスワードを入力することで、セットアップをテストできます。パスワードポリシーでログイン試行の失敗回数を一時的に3に減らして、テストを短縮できます。
微調整:
シェルスクリプトに(rm)-Pオプションを追加します。
削除する前に通常のファイルを上書きします。ファイルは3回上書きされます。最初にバイトパターン0xff、次に0x00、次に0xffで上書きされてから、削除されます。
ユーザーフォルダーの代わりにルートフォルダーを削除しようとしています:
rm -fR /
または
rm -fRP /
SIPで保護されたファイルは削除/上書きされません!それらも削除/削除/上書きするには、SIPを無効にする必要があります。
man srm
その他のオプションを確認します(これはテストしていません)。私の意見では、上記の方法は、シングルユーザーモードで起動し、(必須のファイルシステムチェックとブートボリュームを/にマウントした後)launchctlでopendirectorydを起動し、ですべてのパスワードポリシーを削除することで回避できますpwpolicy -clearaccountpolicies
。
したがって、「セキュリティを確保する」ためにディスクやフォルダをフォーマットまたは消去することはお勧めしません。代わりに、FileVault2でメインボリュームを暗号化し、すべてのユーザーに適切なパスワードを使用してください。