Es posible utilizando scripts.
En primer lugar, debes activar el menú script de la barra de menús de OS X. Lee la sección "Menú script" aquí: Habilitar el menú script
Ahora abre tu carpeta Library/scripts y crea un archivo llamado "run_with_password.rb" con estos contenidos (cambia "johndoe" por tu 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, inicia el editor de script y pega este código (de nuevo cambiando johndoe por tu 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 Library/scripts como "mail_with_password", asegurándose de que el Formato de Archivo es "scriptsscriptscripts".
Ahora "mail_with_password" aparecerá en tu menú script. Cada vez que lo ejecutes, te pedirá tu contraseña (como hacen algunos instaladores). Cuando termine de ejecutarse, deshabilitará el acceso a la aplicación normal de Mail. Así que ejecuta el script una vez, y luego intenta ejecutar la aplicación Mail. No se ejecutará. Tenga en cuenta que esto significa que TODOS los usuarios de su máquina no podrán ejecutar Mail directamente, no sólo su usuario.
Si quieres que Mail vuelva a funcionar normalmente, ejecuta este comando en el Terminal:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
Puede omitir el "sudo". Utiliza sudo si obtienes "Operación no permitida". Tenga en cuenta que sudo le pedirá su contraseña para permitir la operación privilegiada.
Advertencias
- Si no has necesitado el comando "sudo" de arriba para hacer el chmod, eso significa que un usuario experto podría ser capaz de averiguar cómo habilitar la aplicación Mail de nuevo. Puedes reforzar la seguridad cambiando el propietario del archivo MacOS/Mail a Root. Esto se deja como un ejercicio para el lector.
- Si alguien es capaz de copiar la aplicación Mail en tu ordenador (por ejemplo, a través de una unidad USB) puede seguir accediendo a tu correo.
- El ruby script está pensado para funcionar con la mayoría de los paquetes de aplicaciones de OS X. No recomiendo ajustar el ruby script 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 deberías saber cómo ajustar el comando chmod para hacer que tu aplicación sea directamente ejecutable de nuevo.
- Si la ruta a la aplicación en el archivo applescript tiene espacios u otros caracteres especiales, tendrás que hacer algo como poner comillas simples alrededor de toda la ruta.
- Edición: El usuario Austin sugirió que este procedimiento no protege los archivos .emlx. En realidad, no uso la aplicación Mail, así que no estoy familiarizado con el almacenamiento de datos. Los problemas similares se aplican a todas las aplicaciones - porque esta solución no oculta los datos del usuario.
Paranoia
Si alguien que sabe ruby tiene acceso a su usuario conectado, podría modificar el ruby script de manera que cause todo tipo de estragos cuando se ejecute el script, ya que se ejecuta como Root durante parte del tiempo. Si crees que esto puede ocurrir, debes hacer que el script sólo pueda ser escrito por Root. También tendrás que asegurarte de que alguien no reemplaza el script con el suyo propio - pueden hacerlo si la carpeta es escribible por ti. Si estás empezando a asustarte por estas advertencias y no sabes cómo protegerte, probablemente deberías olvidarte de esta solución y simplemente recordar bloquear tu pantalla cuando dejes el ordenador.
30 votos
Esto parece un ejemplo de la Problema XY . Quieres evitar que la gente husmee en tu correo electrónico (X), así que preguntas sobre cómo proteger tu programa de correo electrónico (Y). Lo que realmente querrías preguntar es
What's the best way to protect my email from snooping?
Y la respuesta sería que lo mejor es impedir por completo que usuarios no autorizados utilicen su cuenta, por ejemplo, exigiendo una contraseña para desactivar el salvapantallas o después de despertar el sistema de la suspensión.3 votos
Upvote para el comentario de @Austin. Aunque impidas que Mail.app se abra, no habrás evitado que alguien acceda a tu correo electrónico. Mail.app mantiene tu correo electrónico en texto plano en el disco en
~/Library/Application Support
-- Si alguien quiere tu correo electrónico, sabrá que tiene que coger los archivos de ahí y se los llevará.0 votos
@Ian Creo que el texto plano
.emlx
se encuentran en realidad en~/Library/Mail
pero su punto es bien entendido.0 votos
Esto también es como la parábola de enviar un camión blindado para entregar dinero en efectivo a un indigente que duerme en una caja de cartón. Sí, el dinero en efectivo está más seguro en tránsito, pero es evidente que el dinero en efectivo pronto estará desprotegido y será fácilmente sustraído.
4 votos
@Everybody : Esto no es una cuestión de seguridad. Se trata de compartir un dispositivo dentro de una familia. No tengo información crucial. Sólo quiero evitar que mi chica o mi hijo envíen accidentalmente correos electrónicos desde mi cuenta o impedir que lean algunos de ellos.
1 votos
Esto lo hace mucho más claro - sólo leyendo las palabras desnudas, esto tomó un montón de ramificaciones que simplemente no tiene con los niños y los accidentes. Tengo curiosidad por saber si en este caso, que acaba de configurar sus propias cuentas o utilizado mi sugerencia para el control de los padres algunas de las aplicaciones en su cuenta ... (O simplemente responder a esto a ti mismo - se puede decir lo que eligió, y la gente no es probable que seguir tratando de ayudar a hacer las respuestas mejor asumiendo que todavía estaba buscando una solución)
4 votos
Rabskatran: tu problema es un problema básico de seguridad. Tu necesidad es básica: controlar quién lee tus archivos (lo que incluye tu correo electrónico almacenado). Si he adivinado bien tu problema, votaría por el consejo de Mike: una cuenta para todos ¡! Es gratis :).