Mungkin menggunakan skrip.
Pertama, Anda harus mengaktifkan menu skrip di bilah menu OS X. Baca bagian "Menu Skrip" di sini: Aktifkan Menu Skrip
Sekarang buka folder Library / Scripts Anda dan buat file bernama "run_with_password.rb" dengan konten ini (ubah "johndoe" menjadi nama pengguna Anda):
#!/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
Selanjutnya, mulai Script Editor dan rekatkan kode ini (lagi-lagi mengubah johndoe menjadi nama pengguna Anda):
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
Simpan file ke Library / Scripts sebagai "mail_with_password", pastikan Format File adalah "Script".
Sekarang "mail_with_password" akan muncul di menu skrip Anda. Setiap kali Anda menjalankannya, ia akan meminta kata sandi Anda (seperti yang dilakukan beberapa penginstal). Setelah selesai berjalan, ini akan menonaktifkan akses ke aplikasi Mail biasa. Jadi jalankan skrip sekali, lalu coba jalankan aplikasi Mail. Itu tidak akan berjalan. Perhatikan bahwa ini berarti SEMUA pengguna di mesin Anda akan dicegah menjalankan Mail secara langsung, bukan hanya pengguna Anda.
Jika Anda ingin mengizinkan Mail berjalan normal lagi, jalankan perintah ini di Terminal:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
Anda mungkin dapat menghilangkan "sudo". Gunakan sudo jika Anda mendapatkan "Operasi tidak diizinkan". Perhatikan bahwa sudo akan meminta kata sandi Anda untuk memungkinkan operasi istimewa.
Peringatan
- Jika Anda tidak memerlukan perintah "sudo" di atas untuk melakukan chmod, itu berarti pengguna yang cerdas mungkin dapat mengetahui cara mengaktifkan kembali aplikasi Mail. Anda dapat memperketat keamanan dengan mengubah pemilik file MacOS / Mail menjadi root. Itu dibiarkan sebagai latihan untuk pembaca.
- Jika seseorang dapat menyalin aplikasi Mail ke komputer Anda (mis. Melalui drive USB), mereka masih bisa mendapatkan akses ke email Anda.
- Script ruby dimaksudkan untuk bekerja pada sebagian besar bundel aplikasi OS X. Saya tidak merekomendasikan mengubah skrip ruby kecuali Anda benar-benar tahu apa yang Anda lakukan karena melakukan hal-hal tertentu sebagai root (pengguna istimewa). Tweak kode applescript seharusnya tidak berbahaya; tetapi Anda harus tahu cara menyesuaikan perintah chmod untuk membuat aplikasi Anda langsung dapat dijalankan kembali.
- Jika jalur ke aplikasi dalam file applescript memiliki spasi atau karakter khusus lainnya, Anda harus melakukan sesuatu seperti meletakkan tanda kutip tunggal di seluruh jalur.
- Sunting: Pengguna Austin menyarankan bahwa prosedur ini tidak melindungi file .emlx. Saya sebenarnya tidak menggunakan aplikasi Mail jadi saya tidak terbiasa dengan penyimpanan data. Masalah serupa berlaku untuk semua aplikasi - karena solusi ini tidak menyembunyikan data pengguna.
Paranoia
Jika seseorang yang mengetahui ruby mendapatkan akses ke pengguna login Anda, mereka bisa memodifikasi skrip ruby dengan cara yang menimbulkan segala macam malapetaka ketika Anda menjalankan skrip, karena itu berjalan sebagai root untuk sebagian waktu. Jika Anda berpikir ini mungkin terjadi, Anda harus membuat skrip hanya dapat ditulis oleh root. Anda juga harus memastikan seseorang tidak mengganti skrip dengan skrip mereka - mereka dapat melakukan ini jika folder tersebut dapat ditulis oleh Anda. Jika Anda mulai takut dengan peringatan ini dan tidak tahu bagaimana melindungi diri Anda sendiri, Anda mungkin harus melupakan solusi ini dan hanya ingat untuk mengunci layar Anda ketika Anda meninggalkan komputer.
What's the best way to protect my email from snooping?
Dan jawabannya adalah yang terbaik untuk mencegah pengguna yang tidak sah menggunakan akun Anda - misalnya, memerlukan kata sandi untuk menonaktifkan screensaver atau setelah membangunkan sistem dari tidur.