È possibile usare gli script.
Innanzitutto, è necessario abilitare il menu degli script nella barra dei menu di OS X. Leggi la sezione "Menu Script" qui: Abilita il menu Script
Ora apri la tua cartella Library / Scripts e crea un file chiamato "run_with_password.rb" con questi contenuti (cambia "johndoe" con il tuo nome utente):
#!/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
Quindi, avvia Script Editor e incolla questo codice (cambiando di nuovo johndoe con il tuo nome utente):
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
Salvare il file in Libreria / Script come "mail_with_password", assicurandosi che il formato del file sia "Script".
Ora "mail_with_password" apparirà nel menu dello script. Ogni volta che lo esegui, ti chiederà la password (proprio come fanno alcuni installatori). Al termine della sua esecuzione, disabiliterà l'accesso alla normale applicazione Mail. Quindi esegui lo script una volta, quindi prova a eseguire l'app Mail. Non funzionerà. Tieni presente che a TUTTI gli utenti del tuo computer verrà impedito di eseguire Mail direttamente, non solo il tuo utente.
Se mai vuoi consentire a Mail di funzionare normalmente, esegui questo comando sul Terminale:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
Potresti essere in grado di omettere il "sudo". Usa sudo se ottieni "Operazione non consentita". Nota che sudo ti chiederà la password per consentire operazioni privilegiate.
Avvertenze
- Se non hai bisogno del comando "sudo" sopra per eseguire il chmod, ciò significa che un utente esperto potrebbe essere in grado di capire come abilitare nuovamente l'app Mail. Puoi rafforzare la sicurezza cambiando il proprietario del file MacOS / Mail in root. Questo è lasciato come esercizio per il lettore.
- Se qualcuno è in grado di copiare l'app Mail sul tuo computer (ad esempio tramite un'unità USB), può comunque accedere alla tua posta.
- Lo script ruby funziona per la maggior parte dei bundle di applicazioni OS X. Non ho raccomandato di modificare lo script ruby a meno che tu non sappia davvero cosa stai facendo perché sta facendo determinate cose come root (l'utente privilegiato). Modificare il codice di applecript dovrebbe essere innocuo; ma dovresti sapere come regolare il comando chmod per rendere nuovamente eseguibile la tua app direttamente.
- Se il percorso dell'app nel file applecript contiene spazi o altri caratteri speciali, dovrai fare qualcosa come mettere le virgolette singole in tutto il percorso.
- Modifica: l'utente Austin ha suggerito che questa procedura non protegge i file .emlx. In realtà non uso l'app Mail, quindi non ho familiarità con l'archiviazione dei dati. Problemi simili si applicano a tutte le app, poiché questa soluzione non nasconde i dati dell'utente.
Paranoia
Se qualcuno che conosce ruby ha accesso al tuo utente che ha effettuato l'accesso, potrebbe modificare lo script ruby in un modo che provoca ogni sorta di caos quando esegui lo script, poiché viene eseguito come root per una parte del tempo. Se pensi che ciò possa accadere, dovresti rendere lo script scrivibile solo da root. Dovrai anche assicurarti che qualcuno non sostituisca lo script con il proprio: possono farlo se la cartella è scrivibile da te. Se stai iniziando a spaventarti con questi avvisi e non sai come proteggerti, probabilmente dovresti dimenticare questa soluzione e ricordarti di bloccare lo schermo quando lasci il computer.
What's the best way to protect my email from snooping?
E la risposta a ciò sarebbe che è meglio impedire completamente agli utenti non autorizzati di utilizzare il tuo account, ad esempio richiedere una password per disattivare lo screensaver o dopo aver riattivato il sistema dalla modalità di sospensione.