CHROOT:无法使用 WINSCP 将文件从本地计算机复制到被监禁的用户目录

CHROOT:无法使用 WINSCP 将文件从本地计算机复制到被监禁的用户目录

我已经为我的一个用户设置了一个 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.

我所做的是:

  1. 使用自己的公钥将用户 chroot 到主目录。
  2. /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

如果目录权限更改不起作用,请告诉我。

相关内容