Linux

CHROOT:無法使用 WINSCP 將文件從本地電腦複製到被監禁的使用者目錄

  • January 7, 2016

我已經在我的系統上為我的一個名為**client的使用者設置了 chroot 環境。**我正在使用 WINSCP 使用公鑰身份驗證從我的機器連接到我的伺服器。一切正常,我可以登錄,查看主目錄(監獄目錄)並且無法向上導航。

我目前遇到的問題是我無法將文件從本地電腦複製到伺服器。當我這樣做時,我得到權限被拒絕:無法創建遠端文件 /home/client/test.txt

我的伺服器是 Red Hat 伺服器,這是我的 sshd 配置:

   Match User client
   ChrootDirectory %h
   PubkeyAuthentication yes
   AllowTCPForwarding no
   X11Forwarding no
   ForceCommand internal-sftp

我已經在網上查找了這個,我發現了一些關於在客戶端的主目錄上複製binandlib文件夾的註釋,但是這些解決方案沒有幫助。

目前我所需要的只是讓使用者能夠將文件從他們的本地機器複製到我的伺服器的 chroot 文件夾下。

編輯#1

以下是我所做工作的簡要說明:

我有一個 chroot 使用者(使用者名:clientd),我已將其關押在他們的主目錄中。這個 chroot 目錄/home/client/歸 root 所有。

現在我需要這個客戶端使用者能夠訪問位於/mnt/datadrive/tomcat/webapps.

我所做的是:

  1. 使用自己的公鑰將使用者chroot 到主目錄。
  2. 在 call 下創建一個文件夾/home/clienttomcat_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

我有類似的設置,它可以工作,所以你的配置對我來說是有效的。我建議在 Match 規則上方添加這一行,這將在您的日誌中啟用更詳細的消息傳遞,這可能有助於您將注意力集中在潛在問題上。

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).

引用自:https://unix.stackexchange.com/questions/125302