我已经为我的一个用户设置了一个 chroot 环境,名为客户在我的系统上。我正在使用 WINSCP 使用公钥身份验证从我的计算机连接到我的服务器。一切正常,我可以登录,查看主目录(监狱目录),但无法向上导航。
我目前遇到的问题是我无法将文件从本地计算机复制到服务器。当我这样做时,我得到了权限被拒绝:无法创建远程文件/home/client/test.txt
我的服务器是 Red Hat 服务器,这是我的 sshd 配置:
Match User client
ChrootDirectory %h
PubkeyAuthentication yes
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
我在网上查找了此内容,并发现了一些有关在客户端主目录上复制bin
和文件夹的注释,但这些解决方案没有帮助。lib
我现在需要的只是让用户能够将文件从本地计算机复制到我的服务器的 chroot 文件夹下。
编辑#1
这是我所做的快速描述:
我有一个 chroot 用户(用户名:clientd),我将其囚禁在他们的主目录中。此 chroot 目录/home/client/
由 root 拥有。
现在我需要这个客户端用户能够访问位于/mnt/datadrive/tomcat/webapps
.
我所做的是:
- 使用自己的公钥将用户 chroot 到主目录。
/home/client
在名为下创建一个文件夹tomcat_ROOT
并将所有权授予clientdev
。
现在当我运行命令时:
$ mount --bind /mnt/datadrive/tomcat/webapps /home/client/tomcat_ROOT
/home/client
如果我使用客户端登录,该文件夹将从内部目录列表中消失。我的 root 用户可以看到它,但看不到所需的用户。
以下是一些权限列表:
输出ls -l /home/client/tomcat_ROOT
:
drwxr-xr-x. 6 root root 4096 Apr 11 15:07 .
drwxrwxr-x. 12 root root 4096 Apr 11 15:07 ..
drwxr-xr-x. 3 root root 4096 Apr 9 22:10 webapp1
drwxr-xr-x. 4 root root 4096 Mar 18 18:43 webapp2
drwxr-xr-x. 3 root root 4096 Apr 9 22:11 webapp3
drwxrwxr-x. 10 root root 4096 Apr 11 15:20 ROOT
输出ls -l /home/client/
:
drwx------. 4 clientdev clientdev 4096 Apr 10 21:36 .
drwxr-xr-x. 7 root root 4096 Apr 10 22:07 ..
-rw-------. 1 client client 664 Apr 10 21:43 .bash_history
-rw-r--r--. 1 client client 18 Apr 23 2012 .bash_logout
-rw-r--r--. 1 client client 176 Apr 23 2012 .bash_profile
-rw-r--r--. 1 client client 124 Apr 23 2012 .bashrc
drwx------. 2 client client 4096 Apr 10 19:20 .ssh
drwxr-xr-x. 2 client client 4096 Apr 10 21:34 tomcat_ROOT
答案1
我有类似的设置并且它有效,因此您的配置对我来说看起来有效。我建议在匹配规则上方添加这一行,这将在日志中启用更详细的消息传递,这可能有助于您缩小对根本问题的关注范围。
Subsystem sftp internal-sftp -f AUTH -l INFO
sshd
更改后请务必重新启动。我相信您的问题与目录或用户文件夹的权限有关。使用时ChrootDirectory
有一些非常具体的条件,您必须确保遵守,否则 SSHD 将不会配合。
ChrootDirectory
Specifies the pathname of a directory to chroot(2) to after
authentication. All components of the pathname must be root-owned
directories that are not writable by any other user or group.
After the chroot, sshd(8) changes the working directory to the
user's home directory.
The pathname may contain the following tokens that are expanded at
runtime once the connecting user has been authenticated: %% is
replaced by a literal '%', %h is replaced by the home directory of
the user being authenticated, and %u is replaced by the username of
that user.
The ChrootDirectory must contain the necessary files and directories
to support the user's session. For an interactive session this
requires at least a shell, typically sh(1), and basic /dev nodes
such as null(4), zero(4), stdin(4), stdout(4), stderr(4), arandom(4)
and tty(4) devices. For file transfer sessions using “sftp”, no
additional configuration of the environment is necessary if the in-
process sftp server is used, though sessions which use logging do
require /dev/log inside the chroot directory (see sftp-server(8) for
details).
The default is not to chroot(2).
答案2
您能检查一下目录权限吗?
就像我们有文件夹结构 /home/test/app
/home/test 必须有 - 'chmod 700' 和 'chown testuser test' 和 /home/test/app 必须有 - 'chmod 750' 和 'chown testuser app -R'
请尝试
chmod 700 /home/client/
chown clientd /home/client/
cd /home/client/
chmod 750 * -R
chown clientd clientdev * -R
如果目录权限更改不起作用,请告诉我。