有没有办法用密码保护单个应用程序?


27

可以使用密码保护特定的Mac应用程序吗?

例如,我对保护邮件感兴趣,因为即使您无法检索新电子邮件,您仍然可以阅读所有已经收到的电子邮件。

这不是关于安全性的问题。这是关于在家庭中共享设备。我没有重要信息。我只是想避免我的女儿或儿子从我的帐户中意外发送电子邮件或阻止他们阅读其中的一些电子邮件。


30
这听起来像是XY问题的一个示例。您想防止别人窥探您的电子邮件(X),所以您要询问如何保护电子邮件程序(Y)。您真正想问的是What's the best way to protect my email from snooping? ,答案是最好是完全防止未经授权的用户使用您的帐户-例如,要求输入密码以停用屏幕保护程序或将系统从睡眠状态唤醒后。
奥斯丁,

3
支持@Austin的评论。即使您阻止Mail.app的打开,也没有阻止某人访问您的电子邮件。Mail.app将您的电子邮件以纯文本格式保存在磁盘上~/Library/Application Support-如果有人想要您的电子邮件,他们会知道只是从那里抓取文件并从中取走。
伊恩·C

4
@Everybody:这不是关于安全性的问题。这是关于在家庭中共享设备。我没有重要信息。我只是想避免我的女儿或儿子从我的帐户中意外发送电子邮件或阻止他们阅读其中的一些电子邮件。
Pierre Watelet 2011年

1
这使事情变得更加清晰-只需阅读裸露的文字,这就会带来很多您根本不会对儿童和事故产生的影响。我很好奇,在这种情况下,您是只是设置他们自己的帐户,还是根据我的建议来父母控制您帐户中的某些应用...(或者您自己回答一下-您可以说出自己的选择,假设您仍在寻找解决方案,就不太可能继续尝试帮助做出更好的答案)
bmike

4
→Rabskatran:您的问题是一个基本的安全问题。您的需求是一个基本需求:控制谁可以读取您的文件(包括存储的电子邮件)。如果我正确地猜到了您的问题☂,我将投票给Mike的建议:每个人一个账!免费 :)。
2013年

Answers:


27

关于您对Paul的回答的评论,想离开您的计算机片刻:您必须锁定计算机。期。

打开“系统偏好设置”,单击“安全性”(第一行,倒数第二个选项),在“常规”选项卡下,选中“在睡眠或屏幕保护程序启动后立即输入密码”复选框。

然后,当您离开计算机时;

Ctrl ⌃+ Shift ⇧+Eject ⏏

(附加说明:单击上面的行。)

锁定您的Mac。走开。回来,输入密码解锁。安全控制台。


3
+1保罗是第一个在自己的回答下方的评论中提及此问题的人,但由于他尚未将其整合到自己的回答中,因此我将对此投反对票。我希望我能给这个+3you have to lock your computer. Period.
奥斯丁,

-1,因为这是对所提问题的答案。OP明确要求密码保护多用户帐户中的单个应用。另一种情况:还有一位管理员可以轻松地重置密码,并以您的身份登录并访问您的所有应用程序。
leymannx

我在第一句话中谈到了这一点。另外,如果还有另一个本地管理员帐户,则无法用密码保护应用程序远离它们。只是不可能。
杰森·萨拉兹

10

您可以在帐户上设置家长控制,然后确定可以使用哪些应用。

另外,您可以在屏幕保护程序上设置密码,并定义合适的“热角”来激活屏幕保护程序-这样,当您离开计算机时,只需将鼠标移到热角即可有效锁定屏幕,例如需要输入密码才能访问。


否,例如,我希望能够让计算机保持登录状态,并确保没有人能够阅读我收到的电子邮件(如果尚未启动邮件)。但更笼统地说,在我缺席期间,没有人能够启动应用程序,制作某些东西并退出。
皮埃尔·瓦特莱

10
在这种情况下,只需在屏幕保护程序中设置一个“热点”,并要求输入密码以退出屏幕保护程序。当您离开Mac时,请将鼠标推入热角以锁定屏幕。
Paul R

或将屏幕保护程序的超时时间设置为短-邮件不一定是您要隐藏的唯一应用程序
user151019 2011年

因此,无法在应用程序上设置密码...
Pierre Watelet

1
@Paul +1我建议编辑有关将密码保护的屏幕保护程序直接设置到您的答案中的好建议。
奥斯丁,

9

可以使用脚本。

首先,您应该在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

接下来,启动脚本编辑器并粘贴以下代码(再次将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。请注意,sudo会要求您输入密码以允许特权操作。

注意事项

  1. 如果您不需要上面的“ sudo”命令来执行chmod,则意味着精明的用户可能能够弄清楚如何再次启用Mail应用程序。您可以通过将MacOS / Mail文件的所有者更改为root来加强安全性。留给读者练习。
  2. 如果有人能够将Mail应用程序复制到您的计算机上(例如,通过USB驱动器),他们仍然可以访问您的邮件。
  3. ruby脚本适用于大多数OS X应用程序捆绑包。我不建议调整ruby脚本,除非您真的知道自己在做什么,因为它以root用户(特权用户)的身份在做某些事情。调整applescript代码应该是无害的;但是您应该知道如何调整chmod命令,以使您的应用再次可以直接运行。
  4. 如果applescript文件中应用程序的路径包含空格或其他特殊字符,则必须执行诸如在整个路径周围加上单引号的操作。
  5. 编辑:奥斯汀用户建议此过程不保护.emlx文件。我实际上不使用邮件应用程序,因此我对数据存储不熟悉。类似的问题适用于所有应用程序-因为此解决方案不会隐藏用户数据。

偏执狂

如果知道ruby的人可以访问您的登录用户,则他们可以以某种方式修改ruby脚本,从而在运行脚本时造成各种破坏,因为该脚本在部分时间内作为root用户运行。如果您认为这可能发生,则应使脚本只能由root用户写入。您还必须确保不会有人用自己的脚本替换脚本-如果您可以写该文件夹,则他们可以这样做。如果您开始对这些警告感到害怕,并且不知道如何保护自己,则可能应该忘记此解决方案,并且只记得在离开计算机时锁定屏幕即可。


哇,4小时内有3票赞成票?我没想到会有太多的人使用这种hack,尤其是因为您必须为要保护的每个应用创建一个applescript。我想听听人们如何使用我的解决方案,即使只是为了学习新技巧。
开尔文

8
-1,但我希望这不是个人的看法。我真的很喜欢这里的详细程度,很显然对此有很多想法,但是我认为此解决方案给人一种危险的错误安全感。您没有提到的一个重要警告是,它不会阻止访问.emlx存储在中的纯文本邮件文件~/Library/Mail
奥斯丁,

3
@奥斯汀,您当然有权提出自己的反对意见,但我不明白您的原因。我认为我的警告和偏执部分应足以表明这并不意味着是安全的解决方案,而只是一种威慑作用。我添加了您的警告,但在警告2之后本质上是相同的。另外,OP表示他/她不在乎其他人正在阅读“已检索的电子邮件”。
开尔文

3
我对许多现实生活中从未使用过的复杂事物感到敬畏。这是一个-做得好,Kelvin-您从我这里获得了+1。:-)我怀疑它能否最终获得“最佳”答案,但我希望它能获得荣誉。
bmike

我认为您误解了问题的一部分(当然,它的措词可能更好)。@Rabskatran-如果我写错了,请纠正我,但我相当有信心OP正在尝试解释想要使用密码保护应用程序的原因。套用,即使窥探将无法取回邮件(大概是因为该帐户的密码没有被存储在邮件),他们能够读取现有下载邮件,这就是为什么一个OP想要的密码保护。
奥斯丁,

5

是的-有几种密码保护邮件的方法很实用。由于您担心孩子/家庭成员,最简单的方法可能就是只使用帐户上的“家长控制”来限制这些应用。在某些时候,他们可以拥有自己的帐户,并且您可以锁定整个帐户。


在锁定应用程序或数据应用程序可以访问的一般情况下,以下是我认为可行的选项。

  1. 将您的帐户设置为受保护的父母帐户,并将您要允许的应用列入白名单。您将知道单独的管理员用户/密码,以允许启动禁止的应用程序。瞧-您想要的任何应用现在都受到密码保护。

  2. 将应用程序移动到受密码保护的磁盘映像中,然后创建一个别名以存储在“应用程序”文件夹中。(首先删除原始应用程序)任何程序尝试访问该应用程序时,您都有机会输入密码,Finder会安装磁盘映像。您还可以在运行脚本以再次使应用程序运行之前,编写权限更改脚本和其他技术技巧,要求输入密码。

  3. 将应用程序数据存储在受密码保护的加密磁盘映像中。以下是一些常见的应用程序以及它们存储用户数据的文件夹

  4. 将您的邮件应用程序存储在可移动驱动器上-制作独立应用程序包以从USB驱动器运行应用程序是一个家庭手工业。

请记住,在安装图像之前,在应用程序内使用框架的诸如Spotlight和其他应用程序之类的东西将无法很好地工作。如果您的用户密码是安全的(不想让其他人看到数据),则可以将磁盘映像密码存储在钥匙串中。

另外-除非您保护数据文件-否则,这仅仅是出于安全性考虑,有人可以将您的数据复制到其他地方,或者只是从Spotlight或其他应用(例如文本编辑)中查看数据。他们还可以从另一台计算机上带回邮件(或任何其他)应用程序的副本。一旦管理员用户祝福应用在该系统上的首次运行,则应用可以在任何地方运行,而不仅仅是“应用”文件夹。

因此,#3是唯一的方法。锁定您的数据,不用担心应用程序。


5

这是一个Mac实用程序,可以满足您的要求。它可以用密码保护单个应用程序。另外,您可以设置一个超时值,该超时值将在选定时间段内处于非活动状态后退出应用程序。

Mac App拦截器


1
Mac App Blocker正是他所寻找的。作为苹果技术公司,多年来我们一直对此功能提出要求(还记得Oulook 2001吗?)。用户不必担心他们的孩子或同事会去研究Library文件夹来拉出.emlx文件并读取它们。这不是重点-他们不介意让其他人使用Mac,只是不想让他们阅读电子邮件。干净利落。Mac App Blocker可以完成其工作,而这就是他们需要做的一切。


1

嗯 我已经想这样做了一段时间。让我们再举一个不告知本地文件的示例,例如,像Skype或Trillian这样的聊天程序。家长控制的问题在于您不能成为计算机上的管理员用户,而在您的管理员用户帐户上拥有家长控制。

我的建议是简单地执行以下操作:

chmod 600 /Applications/Trillian.app ; chown `whoami`:staff /Applications/Trillian.app

这会阻止任何人运行它,但会将其标记为您的

然后运行它,

sudo /Applications/Trillian.app/Contents/MacOS/Trillian

这已经超过了上面的600(rw- --- ---)访问权限,并且您将必须输入管理员密码才能运行它。

您还可以查看setuid位,看看是否有帮助(换句话说,使该应用程序以其他用户身份运行)。


顺便说一句,上面的“ whoami”必须在每侧都带有重音或反引号。该网站上的反黑客内容剥夺了这些标记。
约翰

2
固定。随时点击编辑,看看我如何修复它。
詹森·萨拉兹

1

如何使用自己的Apple ID设置单独的用户帐户,具有父母限制的电子邮件或完全不发送电子邮件,该怎么办?应用可以由不同的帐户共享。根据孩子的年龄,如果他们具有管理员权限,即您的帐户,他们可能会无意中损害您的帐户。成为管理员后,您可以控制他们可以使用其帐户执行的操作。


1

独立帐户是解决此问题的方法。

电子邮件可能是显而易见的,但是会有一些重要的文件,书签或打开的银行标签等,对于孩子随机删除/打开/乱搞邮件同样不利。

单独的帐户(只有父母作为管理员)意味着即使所有人都可以访问应用程序,也可以将每个人的文件,电子邮件,设置等分开。

如果用户X使用“邮件”应用程序,则仅当他们登录时才能访问其电子邮件和帐户设置。当用户Y打开“邮件”时,即使他们使用相同的“邮件”应用程序,他们也将拥有自己的帐户/邮件。

您可能有一个成人共享帐户,一个孩子共享帐户,或者每个人都有一个个人帐户。使用单独的帐户,您将要在离开计算机时锁定它(通过屏幕保护程序或返回登录屏幕)。但是,即使您忘记了,您的孩子也希望使用自己的帐户(带有自己的书签或保存游戏文件,高分或文档等)而不是您的帐户,这将有助于防止意外访问/损坏。甚至简单到不必从上次使用浏览器的用户注销Facebook(每个帐户都有自己的浏览器设置,该设置可以记住谁登录了Gmail,facebook,icloud等)。

您还可以阻止某些用户通过“系统偏好设置”中的“家长控制”访问特定的应用程序,网站等。


0

Mac App拦截器

确实满足您的要求。从他们的网站:

使用Mac App Blocker,您可以在Mac上用密码保护每个应用程序。确保您的应用程序和Mac安全。设置超时值可自动退出受保护的应用程序,因此即使您使计算机处于无人看管的状态,您仍然会受到保护。


关于“与众不同”的答案不仅需要链接。可以包含链接,但请在答案中进行总结或摘录。这个想法是使答案独立存在。
nohillside

感谢@Ian C.为该链接的句子从复制粘贴中删除。
2015年

0

快速又肮脏:打开磁盘实用程序,在应用程序文件夹中创建一个受密码保护的磁盘映像,然后将要保护的所有应用程序移动到该文件夹​​中。您每次登录时都必须输入一次密码才能使用它们,然后只需卸载磁盘映像,以便使用同一帐户的人仍然可以使用您的计算机,而无需访问这些应用程序。


0

如果您想使用某个应用来实现这一目标,那么“免费”范围似乎没有太多选择。AppLocker和AppCrypt 允许将1个应用锁定在免费版本中,还有一些其他应用可提供15天左右的免费试用期。否则,有付费选项。我猜想免费解决方案(针对1个以上应用)的方法是使用Kelvinscript方法

这是我设法找到的应用程序:

免费(中):

AppLocker

AppCrypt

免费试用:

iLocker

MacAppBlocker

付费:

iLock

锁定专业版

就个人而言,我只是尝试过,仍然使用AppLocker。我只需要一个应用程序,因此对我来说免费版本就可以了。是非常易于使用和坚如磐石。推荐的!


有关找到的应用程序的更多详细信息将增加答案的价值。
nohillside

好的,谢谢@nohillside :)
illustribe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.