내 사용자 중 한 명을 위해 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/
루트가 소유합니다.
이제 에 액세스하려면 이 클라이언트 사용자가 필요합니다 /mnt/datadrive/tomcat/webapps
.
내가 한 일은 다음과 같습니다.
- 사용자의 공개 키를 사용하여 사용자를 홈 디렉터리로 루트합니다.
/home/client
해당 이름으로 폴더를 만들고tomcat_ROOT
소유권을 부여합니다clientdev
.
이제 명령을 실행하면 다음과 같습니다.
$ mount --bind /mnt/datadrive/tomcat/webapps /home/client/tomcat_ROOT
/home/client
클라이언트를 사용하여 로그인하면 내부 디렉터리 목록에서 해당 폴더가 사라집니다. 내 루트 사용자는 이를 볼 수 있지만 필수 사용자는 볼 수 없습니다.
다음은 일부 권한 목록입니다.
출력 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
디렉터리 권한을 변경해도 작동하지 않으면 알려주시기 바랍니다.