스크립트를 사용하여 가능합니다.
먼저, OS X 메뉴 표시 줄에서 스크립트 메뉴를 활성화해야합니다. "스크립트 메뉴"섹션을 읽으십시오 : 스크립트 메뉴 활성화
이제 Library / Scripts 폴더를 열고 다음 내용으로 "run_with_password.rb"라는 파일을 만듭니다 ( "johndoe"를 사용자 이름으로 변경).
#!/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
다음으로 Script Editor를 시작하고 johndoe를 사용자 이름으로 변경 하여이 코드를 붙여 넣습니다.
do shell script "ruby /Users/johndoe/Library/Scripts/run_with_password.rb /Applications/Mail.app" with administrator privileges
파일 형식이 "스크립트"인지 확인하여 파일을 라이브러리 / 스크립트에 "mail_with_password"로 저장하십시오.
이제 "mail_with_password"가 스크립트 메뉴에 나타납니다. 암호를 실행할 때마다 암호가 필요합니다 (일부 설치 관리자와 동일). 실행이 끝나면 일반 메일 응용 프로그램에 대한 액세스가 비활성화됩니다. 스크립트를 한 번 실행 한 다음 Mail 앱을 실행 해보십시오. 실행되지 않습니다. 이는 컴퓨터의 모든 사용자가 사용자뿐만 아니라 메일을 직접 실행할 수 없음을 의미합니다.
Mail이 정상적으로 다시 실행되도록하려면 터미널에서 다음 명령을 실행하십시오.
sudo chmod +x /Applications/Mail.app/Contents/MacOS/Mail
"스도"를 생략 할 수 있습니다. "작업이 허용되지 않음"이 표시되면 sudo를 사용하십시오. sudo는 권한있는 작업을 허용하기 위해 암호를 요구합니다.
경고
- chmod를 수행하기 위해 위의 "sudo"명령이 필요하지 않은 경우, 정통한 사용자는 Mail 앱을 다시 활성화하는 방법을 알아낼 수 있습니다. MacOS / Mail 파일의 소유자를 루트로 변경하여 보안을 강화할 수 있습니다. 그것은 독자를위한 연습으로 남겨졌습니다.
- 누군가가 메일 앱을 컴퓨터에 복사 할 수있는 경우 (예 : USB 드라이브를 통해) 여전히 메일에 액세스 할 수 있습니다.
- 루비 스크립트는 대부분의 OS X 응용 프로그램 번들에서 작동합니다. 루트 (특권 사용자)로 특정 작업을 수행하고 있기 때문에 수행중인 작업을 실제로 알지 않는 한 루비 스크립트를 조정하지 않는 것이 좋습니다. 애플 스크립트 코드를 수정하는 것은 무해해야합니다. 그러나 앱을 직접 다시 실행할 수 있도록 chmod 명령을 조정하는 방법을 알아야합니다.
- Applescript 파일의 앱 경로에 공백이나 다른 특수 문자가있는 경우 전체 경로를 작은 따옴표로 묶는 것과 같은 작업을 수행해야합니다.
- 편집 : 사용자 Austin은이 절차가 .emlx 파일을 보호하지 않을 것을 제안했습니다. 실제로 메일 앱을 사용하지 않으므로 데이터 저장소에 익숙하지 않습니다. 이 솔루션은 사용자 데이터를 숨기지 않기 때문에 모든 앱에 유사한 문제가 적용됩니다.
편집병
루비를 아는 사람이 로그인 한 사용자에게 접근 할 수 있다면, 일부 시간 동안 루트로 실행되므로 스크립트를 실행할 때 모든 종류의 혼란을 초래하는 방식으로 루비 스크립트를 수정할 수 있습니다. 이런 일이 발생할 수 있다고 생각되면 루트 만 스크립트를 쓸 수 있어야합니다. 또한 누군가가 스크립트를 자신의 스크립트로 바꾸지 않도록해야합니다. 사용자가 폴더를 쓸 수있는 경우이를 수행 할 수 있습니다. 이러한 경고로 인해 겁이 나기 시작하고 자신을 보호하는 방법을 모른다면이 해결 방법을 잊고 컴퓨터를 떠날 때 화면을 잠그는 것을 잊지 마십시오.
What's the best way to protect my email from snooping?
권한이없는 사용자가 계정을 사용하는 것을 완전히 막는 것이 가장 좋습니다. 예를 들어 스크린 세이버를 비활성화하기 위해 암호를 요구하거나 시스템을 절전 모드에서 해제 한 후.