Es ist möglich, Skripte zu verwenden.
Zunächst sollten Sie das Skriptmenü in der OS X-Menüleiste aktivieren. Lesen Sie hier den Abschnitt "Skriptmenü": Aktivieren Sie das Skriptmenü
Öffnen Sie nun Ihren Library / Scripts-Ordner und erstellen Sie eine Datei mit dem Namen "run_with_password.rb" mit den folgenden Inhalten (ändern Sie "johndoe" in Ihren Benutzernamen):
#!/usr/bin/env ruby
# run an app at lower privilege
require 'etc'
require 'find'
# Note: anyone with sudo access will be able to run as this user. But they could do that anyway.
# run 'id' at the terminal to find out what your username is.
RUN_USER = 'johndoe'
def get_root_info
root_entry = Etc.getpwnam('root')
return root_entry.uid, root_entry.gid
end
ROOT_UID, ROOT_GID = get_root_info
def ensure_root
Process.uid = ROOT_UID
Process.gid = ROOT_GID
end
def print_user_info
[
[:uid, Process.uid],
[:gid, Process.gid],
[:euid, Process.euid],
[:egid, Process.egid],
].each do |arr|
$stderr.puts arr.inspect
end
end
def set_effective(euid, egid)
$stderr.puts "setting effective to #{[euid, egid].inspect}" if $DEBUG
# must set group first
Process.egid = egid
Process.euid = euid
end
def do_privileged(&block)
orig_euid = Process.euid
orig_egid = Process.egid
begin
$stderr.puts "raising privileges" if $DEBUG
set_effective(ROOT_UID, ROOT_GID)
yield orig_euid, orig_egid
ensure
$stderr.puts "lowering privileges" if $DEBUG
set_effective(orig_euid, orig_egid)
end
end
# must be called after ROOT_UID, ROOT_GID are set
def chmod_files_in_dir(mode, dir)
mode_str = nil
case mode
when Integer
mode_str = '%o' % mode
when String
mode_str = mode
else
raise TypeError
end
chmod_proc = proc do
Find.find(dir) {|entry|
if File.directory?(entry) and entry != dir
Find.prune # don't recurse into subdirs
elsif File.file?(entry)
$stderr.puts "chmod #{mode_str} #{entry}" if $DEBUG
system 'chmod', mode_str, entry
end
}
end
# assume that if dir is owned by root, the executables are also.
if File.stat(dir).uid == ROOT_UID
do_privileged(&chmod_proc)
else
chmod_proc.call
end
end
def main(argv)
# Important: this is to abort if we're not running as root.
ensure_root
app_path = argv.shift or raise "Need path to .app file, e.g. /Applications/Mail.app"
app_macos_dir = File.join(app_path, 'Contents/MacOS')
File.directory?(app_path) or raise "#{app_path} is not an app bundle"
File.directory?(app_macos_dir) or raise "#{app_path} bundle doesn't have expected MacOS structure"
pw_entry = Etc.getpwnam(RUN_USER)
run_uid = pw_entry.uid
run_gid = pw_entry.gid
if $DEBUG
$stderr.puts [:run_uid, run_uid].inspect
$stderr.puts [:run_gid, run_gid].inspect
print_user_info
end
# Effectively become RUN_USER
set_effective(run_uid, run_gid)
if $DEBUG
print_user_info
end
begin
chmod_files_in_dir('+x', app_macos_dir)
# 'open' is asynchronous, so the ensure will run immediately after, and before the app exits.
$stderr.puts "Running app: #{app_path}" if $DEBUG
system 'open', app_path
ensure
chmod_files_in_dir('-x', app_macos_dir)
end
end
if __FILE__ == $0
$DEBUG = false
main(ARGV)
end
Starten Sie als Nächstes den Skript-Editor und fügen Sie diesen Code ein (ändern Sie johndoe erneut in Ihren Benutzernamen):
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
Speichern Sie die Datei in Library / Scripts als "mail_with_password" und stellen Sie sicher, dass das Dateiformat "Script" ist.
Jetzt erscheint "mail_with_password" in Ihrem Skriptmenü. Jedes Mal, wenn Sie es ausführen, werden Sie nach Ihrem Kennwort gefragt (genau wie bei einigen Installationsprogrammen). Nach Abschluss der Ausführung wird der Zugriff auf die reguläre Mail-Anwendung deaktiviert. Führen Sie das Skript also einmal aus und versuchen Sie dann, die Mail-App auszuführen. Es läuft nicht. Beachten Sie, dass ALLE Benutzer auf Ihrem Computer daran gehindert werden, Mail direkt auszuführen, nicht nur Ihre Benutzer.
Wenn Sie möchten, dass Mail wieder normal ausgeführt wird, führen Sie den folgenden Befehl am Terminal aus:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
Möglicherweise können Sie das "sudo" weglassen. Verwenden Sie sudo, wenn Sie "Operation nicht erlaubt" erhalten. Beachten Sie, dass sudo Sie zur Eingabe Ihres Passworts auffordert, um den privilegierten Betrieb zu ermöglichen.
Vorbehalte
- Wenn Sie den obigen "sudo" -Befehl nicht benötigen, um das chmod auszuführen, bedeutet dies, dass ein erfahrener Benutzer möglicherweise herausfinden kann, wie die Mail-App wieder aktiviert werden kann. Sie können die Sicherheit verbessern, indem Sie den Besitzer der MacOS / Mail-Datei in root ändern. Dies ist eine Übung für den Leser.
- Wenn jemand in der Lage ist, die Mail-App auf Ihren Computer zu kopieren (z. B. über ein USB-Laufwerk), kann er weiterhin auf Ihre E-Mails zugreifen.
- Das Ruby-Skript funktioniert für die meisten OS X-Anwendungspakete. Ich habe nicht empfohlen, das Ruby-Skript zu optimieren, es sei denn, Sie wissen wirklich, was Sie tun, weil es bestimmte Dinge als root (der privilegierte Benutzer) ausführt. Das Ändern des AppleScript-Codes sollte harmlos sein. Sie sollten jedoch wissen, wie Sie den Befehl chmod anpassen, um Ihre App wieder direkt ausführbar zu machen.
- Wenn der Pfad zur App in der Applescript-Datei Leerzeichen oder andere Sonderzeichen enthält, müssen Sie den gesamten Pfad in einfache Anführungszeichen setzen.
- Bearbeiten: Benutzer Austin schlug vor, dass dieses Verfahren die .emlx-Dateien nicht schützt. Ich benutze die Mail-App nicht, daher bin ich nicht mit dem Datenspeicher vertraut. Ähnliche Probleme treten bei allen Apps auf, da bei dieser Lösung keine Benutzerdaten ausgeblendet werden.
Paranoia
Wenn jemand, der Ruby kennt, Zugriff auf Ihren angemeldeten Benutzer erhält, kann er das Ruby-Skript so ändern, dass es beim Ausführen des Skripts alle Arten von Unheil anrichtet, da es zeitweise als Root ausgeführt wird. Wenn Sie glauben, dass dies passieren könnte, sollten Sie das Skript nur für Root-Benutzer beschreibbar machen. Sie müssen auch sicherstellen, dass das Skript nicht durch ein eigenes ersetzt wird. Dies ist möglich, wenn der Ordner von Ihnen beschreibbar ist. Wenn Sie vor diesen Warnungen Angst haben und nicht wissen, wie Sie sich schützen sollen, sollten Sie diese Lösung wahrscheinlich vergessen und sich daran erinnern, den Bildschirm zu sperren, wenn Sie den Computer verlassen.
What's the best way to protect my email from snooping?
Und die Antwort darauf wäre, dass es am besten ist, nicht autorisierte Benutzer daran zu hindern, Ihr Konto zu verwenden - zum Beispiel ein Kennwort zum Deaktivieren des Bildschirmschoners oder nach dem Aufwecken des Systems aus dem Ruhezustand.