Script kullanarak mümkündür.
İlk önce OS X menü çubuğunda script menüsünü etkinleştirmelisiniz. Burada "Script Menüsü" bölümünü okuyun: Script Menüsünü Etkinleştirin
Şimdi Library / Scripts klasörünüzü açın ve bu içerikleri içeren "run_with_password.rb" adlı bir dosya oluşturun ("johndoe" u kullanıcı adınıza değiştirin):
#!/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
Ardından, Script Editor'ı başlatın ve bu koda yapıştırın (johndoe'yu tekrar kullanıcı adınıza getirin):
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
Dosya Formatının "Komut Dosyası" olduğundan emin olarak, dosyayı Kitaplık / Komut Dosyalarına "mail_with_password" olarak kaydedin.
Şimdi script menüsünde "mail_with_password" görünecektir. Her çalıştırışınızda, sizden şifrenizi isteyecek (tıpkı bazı kurucularda olduğu gibi). Çalışması tamamlandıktan sonra normal Mail uygulamasına erişimi devre dışı bırakacaktır. Bu yüzden komut dosyasını bir kez çalıştırın, ardından Posta uygulamasını çalıştırmayı deneyin. Çalışmayacak. Unutmayın ki, makinenizdeki TÜM kullanıcıların, yalnızca kullanıcı değil, doğrudan Posta kullanmaları engellenir.
Mail'in normal şekilde tekrar çalışmasına izin vermek istiyorsanız, bu komutu Terminal'de çalıştırın:
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
"Sudo" yu atlayabilirsin. "İşleme izin verilmedi" alırsanız sudo kullanın. Sudo'nun ayrıcalıklı işleme izin vermek için sizden şifrenizi isteyeceğini unutmayın.
Uyarılar
- Chmod'u yapmak için yukarıdaki "sudo" komutuna ihtiyacınız yoksa, bu meraklı bir kullanıcı Posta uygulamasının nasıl yeniden etkinleştirileceğini çözebileceği anlamına gelir. MacOS / Mail dosyasının sahibini root olarak değiştirerek güvenliği artırabilirsiniz. Bu okuyucu için bir egzersiz olarak kaldı.
- Birisi Posta uygulamasını bilgisayarınıza kopyalayabiliyorsa (örneğin, USB sürücü aracılığıyla) postalarınıza erişebilir.
- Yakut betiğin çoğu OS X uygulama paketi için çalışması amaçlanmıştır. Ne yaptığınızı tam olarak bilmiyorsanız ruby betiğini çimdiklemenizi tavsiye etmiyorum, çünkü kök olarak bazı şeyler yapıyor (ayrıcalıklı kullanıcı). El yazısı kodunu düzeltmek zararsız olmalıdır; ancak uygulamanızı doğrudan yeniden çalıştırılabilir hale getirmek için chmod komutunu nasıl ayarlayacağınızı bilmelisiniz.
- Applecript dosyasındaki uygulamanın yolu boşluk veya başka özel karakterlere sahipse, tüm yolun etrafına tek tırnak koymak gibi bir şey yapmanız gerekir.
- Düzenleme: Kullanıcı Austin, bu yordamın .emlx dosyalarını korumadığını önerdi. Aslında Mail uygulamasını kullanmıyorum, bu yüzden veri depolamasına aşina değilim. Benzer uygulamalar tüm uygulamalar için geçerlidir - çünkü bu çözüm kullanıcı verilerini gizlemez.
Paranoya
Yakutu tanıyan biri oturum açmış kullanıcınıza erişebiliyorsa, yakut komut dosyasını çalıştırdığınızda, bir süre boyunca kök olarak çalıştığından, yakut komut dosyasını her türlü hasara yol açacak şekilde değiştirebilirler. Bunun olabileceğini düşünüyorsanız, senaryoyu sadece root tarafından yazılabilir yapmalısınız. Ayrıca birisinin betiği kendi ile değiştirmeyeceğinden de emin olmalısınız - eğer klasör sizin tarafınızdan yazılabilirse bunu yapabilirler. Bu uyarılardan korkmaya başlıyorsanız ve kendinizi nasıl koruyacağınızı bilmiyorsanız, muhtemelen bu çözümü unutmalı ve bilgisayarı terk ederken ekranı kilitlemeyi unutmamalısınız.
What's the best way to protect my email from snooping?
Bunun cevabı, yetkisiz kullanıcıların hesabınızı kullanmasını tamamen önlemenin en iyisi olacaktır - örneğin, ekran koruyucuyu devre dışı bırakmak için bir şifre istemek veya sistemi uyku modundan çıkardıktan sonra.