Es posible usar scripts.
Primero, debe habilitar el menú de secuencia de comandos en la barra de menú de OS X. Lea la sección "Menú de script" aquí: Habilite el menú de script
Ahora abra su carpeta Biblioteca / Scripts y cree un archivo llamado "run_with_password.rb" con estos contenidos (cambie "johndoe" a su nombre de usuario):
#!/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
A continuación, inicie Script Editor y pegue este código (nuevamente cambiando johndoe por su nombre de usuario):
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
Guarde el archivo en Biblioteca / Scripts como "mail_with_password", asegurándose de que el Formato de archivo sea "Script".
Ahora aparecerá "mail_with_password" en su menú de script. Cada vez que lo ejecute, le pedirá su contraseña (al igual que algunos instaladores). Una vez que termine de ejecutarse, deshabilitará el acceso a la aplicación de correo normal. Así que ejecute el script una vez, luego intente ejecutar la aplicación Mail. No correrá. Tenga en cuenta que significa que TODOS los usuarios de su máquina no podrán ejecutar Mail directamente, no solo su usuario.
Si alguna vez desea permitir que el Correo vuelva a ejecutarse normalmente, ejecute este comando en la Terminal:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
Es posible que pueda omitir el "sudo". Use sudo si obtiene "Operación no permitida". Tenga en cuenta que sudo le pedirá su contraseña para permitir una operación privilegiada.
Advertencias
- Si no necesita el comando "sudo" anterior para hacer el chmod, eso significa que un usuario inteligente podría descubrir cómo habilitar la aplicación de Correo nuevamente. Puede reforzar la seguridad cambiando el propietario del archivo MacOS / Mail a root. Eso queda como ejercicio para el lector.
- Si alguien puede copiar la aplicación de Correo en su computadora (por ejemplo, a través de una unidad USB), aún puede acceder a su correo.
- El script ruby está destinado a funcionar para la mayoría de los paquetes de aplicaciones OS X. No recomiendo ajustar el script ruby a menos que realmente sepas lo que estás haciendo porque está haciendo ciertas cosas como root (el usuario privilegiado). Ajustar el código de AppleScript debería ser inofensivo; pero debe saber cómo ajustar el comando chmod para que su aplicación vuelva a ejecutarse directamente.
- Si la ruta a la aplicación en el archivo AppleScript tiene espacios u otros caracteres especiales, tendrá que hacer algo como poner comillas simples en toda la ruta.
- Editar: el usuario Austin sugirió que este procedimiento no protege los archivos .emlx. En realidad no uso la aplicación de correo, así que no estoy familiarizado con el almacenamiento de datos. Se aplican problemas similares a todas las aplicaciones, porque esta solución no oculta los datos del usuario.
Paranoia
Si alguien que conoce a Ruby obtiene acceso a su usuario conectado, podría modificar el script de Ruby de una manera que causa todo tipo de estragos cuando ejecuta el script, ya que se ejecuta como root durante parte del tiempo. Si cree que esto podría suceder, debe hacer que el script solo se pueda escribir desde la raíz. También tendrá que asegurarse de que alguien no reemplace el script con el suyo; puede hacerlo si usted puede escribir en la carpeta. Si estas advertencias te asustan y no sabes cómo protegerte, probablemente deberías olvidarte de esta solución y solo recordar bloquear la pantalla cuando salgas de la computadora.
What's the best way to protect my email from snooping?
Y la respuesta a eso sería que es mejor evitar por completo que los usuarios no autorizados usen su cuenta, por ejemplo, requerir una contraseña para desactivar el protector de pantalla o después de despertar el sistema del modo de suspensión.