授予 root 拥有的子文件夹的 SSH 访问权限

授予 root 拥有的子文件夹的 SSH 访问权限

我有一个文件夹 /srv/jarvis,它有多个子文件夹,其中一个叫做 carl (/srv/jarvis/carl)

jarvis Dir 拥有这些权利

drwxrwxrwx 12 root root    4096 Jun  9 11:34 jarvis

卡尔拥有这些权利

drwxr-xr-x  4 carl carl 4096 Jun  9 13:02 carl

在 /etc/ssh/sshd_config 中我添加了以下几行

Match user carl
    ChrootDirectory /srv/jarvis/carl
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

但是如果我添加这些行并执行 service ssh restart

然后用户就无法登录到该服务器写入失败:管道损坏。如果从 sshd_config 中删除这些行,他可以再次登录,但我不希望这样

我希望用户只能访问 /srv/jarvis/carl/ 并在那里做任何他想做的事情,而且他不能做任何 root 操作 :)

我该如何解决这些问题

答案1

从您的 auth.log 记录来看,这似乎是一个权限问题。具体来说,日志行显示

21:10:18 localhost sshd[16609]: fatal: bad ownership or modes for chroot directory component "/srv/"

如果您保留当前sshd_config行内容,则此路径中的每个目录都需要具有以下特征:ChrootDirectory /srv/jarvis/carl

  • 它需要由 root 用户拥有(组并不重要)
  • 它不能是组或世界可写的(即需要chmod 755

同样,这些适用于/srv/srv/jarvis/srv/jarvis/carl。不幸的是,这样做的结果是该用户carl将无法写入他的顶级目录(在 chroot 生效后)。解决这个问题的一种方法是准备一个子目录并授予他所有权,这样他就有地方创建文件和文件夹了。


我自己还没有测试过,但网络上关于这个话题的一些讨论让我相信,如果你将ChrootDirectory指令改为:

ChrootDirectory /srv/jarvis/%u

(在您的情况下,这始终意味着/srv/jarvis/carl因为他是唯一匹配的人),sshd可能会以不同的方式处理通配符匹配的文件夹。这样,您可能能够让用户 carl 拥有该carl文件夹。同样,没有保证。如果不行,描述的第一种方法应该有效。

相关内容