C'est possible en utilisant des scripts.
Tout d'abord, vous devez activer le menu de script dans la barre de menus OS X. Lisez la section "Menu Script" ici: Activez le menu Script
Ouvrez maintenant votre dossier Library / Scripts et créez un fichier appelé "run_with_password.rb" avec ces contenus (changez "johndoe" en votre nom d'utilisateur):
#!/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
Ensuite, démarrez l'éditeur de script et collez ce code (en changeant à nouveau johndoe en votre nom d'utilisateur):
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
Enregistrez le fichier dans Library / Scripts sous "mail_with_password", en vous assurant que le format de fichier est "Script".
Maintenant "mail_with_password" apparaîtra dans votre menu de script. Chaque fois que vous l'exécutez, il vous demandera votre mot de passe (comme le font certains installateurs). Une fois l'exécution terminée, il désactivera l'accès à l'application Mail standard. Exécutez donc le script une fois, puis essayez d'exécuter l'application Mail. Cela ne fonctionnera pas. Notez que cela signifie que TOUS les utilisateurs de votre ordinateur ne pourront pas exécuter Mail directement, pas seulement votre utilisateur.
Si jamais vous souhaitez autoriser Mail à s'exécuter à nouveau normalement, exécutez cette commande sur le terminal:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
Vous pourrez peut-être omettre le "sudo". Utilisez sudo si vous obtenez "Opération non autorisée". Notez que sudo vous demandera votre mot de passe pour permettre un fonctionnement privilégié.
Avertissements
- Si vous n'avez pas eu besoin de la commande "sudo" ci-dessus pour faire le chmod, cela signifie qu'un utilisateur averti pourrait être en mesure de comprendre comment réactiver l'application Mail. Vous pouvez renforcer la sécurité en changeant le propriétaire du fichier MacOS / Mail en root. Cela reste un exercice pour le lecteur.
- Si quelqu'un est en mesure de copier l'application Mail sur votre ordinateur (par exemple via une clé USB), il peut toujours accéder à votre messagerie.
- Le script ruby est censé fonctionner pour la plupart des ensembles d'applications OS X. Je ne recommande pas de modifier le script ruby à moins que vous ne sachiez vraiment ce que vous faites parce qu'il fait certaines choses en tant que root (l'utilisateur privilégié). Ajuster le code applescript devrait être inoffensif; mais vous devez savoir comment ajuster la commande chmod pour rendre votre application directement exécutable à nouveau.
- Si le chemin d'accès à l'application dans le fichier applescript comporte des espaces ou d'autres caractères spéciaux, vous devrez faire quelque chose comme mettre des guillemets simples tout au long du chemin.
- Edit: l'utilisateur Austin a suggéré que cette procédure ne protège pas les fichiers .emlx. En fait, je n'utilise pas l'application Mail, donc je ne connais pas le stockage de données. Des problèmes similaires s'appliquent à toutes les applications, car cette solution ne masque pas les données utilisateur.
Paranoïa
Si quelqu'un qui connaît ruby a accès à votre utilisateur connecté, il peut modifier le script ruby d'une manière qui provoque toutes sortes de ravages lorsque vous exécutez le script, car il s'exécute en tant que root pendant une partie du temps. Si vous pensez que cela peut arriver, vous devez rendre le script accessible en écriture uniquement par root. Vous devrez également vous assurer que quelqu'un ne remplace pas le script par le sien - il peut le faire si le dossier est accessible en écriture par vous. Si vous commencez à avoir peur de ces avertissements et ne savez pas comment vous protéger, vous devriez probablement oublier cette solution et n'oubliez pas de verrouiller votre écran lorsque vous quittez l'ordinateur.
What's the best way to protect my email from snooping?
que la meilleure solution consiste à empêcher complètement les utilisateurs non autorisés d'utiliser votre compte - par exemple, exiger un mot de passe pour désactiver l'économiseur d'écran ou après avoir réveillé le système du sommeil.