É possível usando scripts.
Primeiro, você deve ativar o menu de script na barra de menus do OS X. Leia a seção "Menu Script" aqui: Habilite o menu Script
Agora abra sua pasta Library / Scripts e crie um arquivo chamado "run_with_password.rb" com este conteúdo (altere "johndoe" para seu nome de usuário):
#!/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
Em seguida, inicie o Editor de scripts e cole neste código (novamente alterando johndoe para seu nome de usuário):
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
Salve o arquivo na Biblioteca / Scripts como "mail_with_password", certificando-se de que o Formato do arquivo seja "Script".
Agora "mail_with_password" aparecerá no seu menu de script. Toda vez que você o executa, solicita sua senha (assim como alguns instaladores). Depois de terminar a execução, desabilitará o acesso ao aplicativo Mail normal. Portanto, execute o script uma vez e tente executar o aplicativo Mail. Não vai correr. Observe que isso significa que TODOS os usuários da sua máquina serão impedidos de executar o Mail diretamente, não apenas o seu usuário.
Se você quiser permitir que o Mail seja executado normalmente novamente, execute este comando no Terminal:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
Você pode omitir o "sudo". Use sudo se você receber "Operação não permitida". Observe que o sudo solicitará sua senha para permitir uma operação privilegiada.
Ressalvas
- Se você não precisou do comando "sudo" acima para executar o chmod, isso significa que um usuário experiente poderá descobrir como habilitar o aplicativo Mail novamente. Você pode aumentar a segurança alterando o proprietário do arquivo MacOS / Mail para root. Isso é deixado como um exercício para o leitor.
- Se alguém puder copiar o aplicativo Mail para o seu computador (por exemplo, via unidade USB), ainda poderá obter acesso ao seu email.
- O script ruby deve funcionar para a maioria dos pacotes de aplicativos OS X. Eu não recomendo ajustar o script ruby, a menos que você realmente saiba o que está fazendo, porque ele está fazendo certas coisas como root (o usuário privilegiado). Ajustar o código AppleScript deve ser inofensivo; mas você deve saber como ajustar o comando chmod para tornar seu aplicativo executável diretamente novamente.
- Se o caminho para o aplicativo no arquivo AppleScript tiver espaços ou outros caracteres especiais, será necessário colocar aspas simples em todo o caminho.
- Edit: O usuário Austin sugeriu que este procedimento não protege os arquivos .emlx. Na verdade, eu não uso o aplicativo Mail, por isso não estou familiarizado com o armazenamento de dados. Problemas semelhantes se aplicam a todos os aplicativos - porque esta solução não oculta os dados do usuário.
Paranóia
Se alguém que conhece ruby obtém acesso ao seu usuário conectado, ele pode modificar o script ruby de uma maneira que causa todo tipo de confusão quando você executa o script, pois ele é executado como raiz por parte do tempo. Se você acha que isso pode acontecer, você deve tornar o script gravável somente pela raiz. Você também precisará garantir que alguém não substitua o script pelo próprio - eles podem fazer isso se a pasta for gravável por você. Se você está começando a ficar assustado com esses avisos e não sabe como se proteger, provavelmente deve esquecer esta solução e lembre-se de bloquear a tela quando sair do computador.
What's the best way to protect my email from snooping?
E a resposta é que é melhor impedir completamente que usuários não autorizados usem sua conta - por exemplo, exigindo uma senha para desativar o protetor de tela ou após acordar o sistema.