我在 Linux 机器上设置了 Mercurial 服务器,它运行良好。例如,用户可以使用以下方式向其推送和拉取数据:
hg push ssh://...
用户还可以通过 ssh 进入服务器。
对于某些用户,我想限制他们的访问权限,使他们只能访问 Mercurial。
我该如何处理这个问题?
答案1
你真正想问的是这。这正是 Gitorious 为 git 所做的——它通过command=
ssh 密钥文件中的条目运行,并确保只有使用 ssh 密钥才能执行 git 操作。链接的问题询问有关 Mercurial 的 Gitorious 类软件。我不是 Mercurial 用户,因此无法评论答案的质量。
答案2
Mercurial 附带了一个专门用于此目的的脚本!使用contrib/hg-ssh
我们提供的脚本用于限制命令。该文件包含此标头以解释如何使用它:
~/.ssh/authorized_keys
要与该选项一起使用command
,请参阅 sshd(8):command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ...
(可能与这些其他有用的选项一起:
no-port-forwarding
,,no-X11-forwarding
)no-agent-forwarding
这允许通过 SSH 从/向作为参数指定的存储库进行拉取/推送。如果您的所有存储库都是公共目录的子目录,则可以使用以下方法允许更短的路径:
command="cd path/to/my/repositories && hg-ssh repo1 subdir/repo2"
您可以使用普通 shell 的模式匹配,例如:
command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}"
答案3
您可以修改 /etc/security/access.conf 指令以仅允许特定用户登录,而不允许其他用户登录。
该行看起来像这样,但包含您的本地化组/用户:
-:ALL EXCEPT your_group your_user1 your_user2 :ALL
或者如果你有一个特定的组,你想将特定的用户/组列入黑名单:
-: blacklist_group1 blacklist_user :ALL
或者,您可以在 sshd.conf 中通过组允许 ssh 访问,但 access.conf 方法更全局一些。这应该允许您的用户仍然访问主机,但不能登录。
埃里克
答案4
这可能与 ssh 密钥有关。不幸的是,我不知道您需要在密钥后面放什么,您需要找出hg push
执行推送时会做什么。例如,使用 rsync,您可以执行以下操作:
命令“rsync --server -vlogDtpre.iL . /path/to/dir/”,no-pty,no-agent-forwarding,no-port-forwarding ssh-dss Adslkjhdfslw.......rest_of_key
将以上内容放入 .ssh/authorized_keys2 中,然后看看是否可以找出 hg push 正在运行什么命令并将其放入命令字段中。
hg push 可能只执行 scp,在这种情况下 scponly shell 也可能完成这项工作。
希望这能为您指明正确的方向。