在 Mac 中安装受密码保护的 CIFS 共享的安全方法

在 Mac 中安装受密码保护的 CIFS 共享的安全方法

我正在维护一个由 mac 和 linux 组成的异构网络,所以我决定创建一个小型 perl 脚本来统一跨机器的安装策略。

实际上,我已经有一个可以运行的 perl 脚本,但是,密码似乎是命令行的一部分,我不喜欢:

 mount_smbfs -d 755 -f 755 //username_here:[email protected]/cifs_share

尝试阅读 mount_smbfs 和 nsmb.conf 的手册页,但我仍然不清楚如何继续。

我的机器是 Snow Leopard、Leopard 和 Lion 机器。

答案1

比 SvenW 提出的解决方案更安全、更符合 Apple 做事方式的解决方案是将密码添加到钥匙串中。以下是针对 AFP 共享执行此操作的方法(我假设您需要做的就是更改 -r 选项指定的协议,但我现在无法使用 SMB 进行测试;请注意,“afp”中的空格是故意的且必要的,我只在 10.6 环境中使用过它):

sudo security add-internet-password -a "username_here" -D "Network Password" -r "afp " -l "cifs_share" -s "myserver.com" -p "cifs_share" -w "password_here"  -T "/System/Library/CoreServices/NetAuthAgent.app/Contents/MacOS/NetAuthAgent"

以下是手册页的相关部分安全命令:

add-internet-password [-h] [-a account] [-s server] [-w password] [options...] [keychain]
            Add an internet password item.

            -a account      Specify account name (required)
            -c creator      Specify item creator (optional four-character code)
            -C type         Specify item type (optional four-character code)
            -d domain       Specify security domain string (optional)
            -D kind         Specify kind (default is "application password")
            -j comment      Specify comment string (optional)
            -l label        Specify label (if omitted, service name is used as default label)
            -p path         Specify path string (optional)
            -P port         Specify port number (optional)
            -r protocol     Specify protocol (optional four-character SecProtocolType, e.g. "http", "ftp ")
            -s server       Specify server name (required)
            -t authenticationType
                            Specify authentication type (as a four-character SecAuthenticationType, default is "dflt")
            -w password     Specify password to be added
            -A              Allow any application to access this item without warning (insecure, not recommended!)
            -T appPath      Specify an application which may access this item (multiple -T options are allowed)
            -U              Update item if it already exists (if omitted, the item cannot already exist)

            By default, the application which creates an item is trusted to access its data without warning.  You can remove this default access
            by explicitly specifying an empty app pathname: -T "". If no keychain is specified, the password is added to the default keychain.

同样的方法也适用于 SMB 共享,但请注意,匹配钥匙串条目的机制非常特殊(例如,要求协议名称中存在奇数空格),因此您需要测试并准确存储密码。当我第一次使用这种方法时,我发现为了正确获取参数,首先通过 GUI 在钥匙串中创建密码(即在 Finder 中安装共享并勾选框以将身份验证凭据保存到钥匙串)然后通过检查钥匙串中的结果条目来反向操作会有所帮助。

正如 SvenW 所指出的,要使此方法有效,钥匙串需要解锁,但这应该会在用户登录时自动发生,根据您的描述,这应该不是问题。我还想确认 Kerberos 确实在 10.5 和 10.6 中有效,但在 10.7 中存在问题。

答案2

将包含以下内容的 ~/Library/Preferences/nsmb.conf 文件放入您要挂载的用户的主目录中:

[myserver.com]
username=username_here
password=password_here

之后你只需做

mount -t smbfs -o -d=755,-f=755 //myserver.com/cifs_share /mountpoint 

答案3

对我来说,关键在于看看在我的钥匙链里

在此处输入图片描述

和匹配我的auto_smb地图...

/../Volumes/ServiceData -fstype=smbfs,soft ://home._smb._tcp.local/ServiceData

答案4

关于文件的答案~/Library/Preferences/nsmb.conf几乎是正确的。您可能需要使用该-N标志。从mount_smbfs手册页中:

mount_smbfs [-N] [-o options] [-d mode] [-f mode] [-h] [-s] [-v] //[domain;][user[:password]@]server[/share] path
-N    Do not ask for a password. At run time, mount_smbfs reads the ~/Library/Preferences/nsmb.conf file for additional configuration parameters and a password. If no password is found, mount_smbfs prompts for it.

相关内容