잘 작동하는 다음 스크립트를 구성했습니다. sftp 사용자가 생성되고 사용자가 로그인하면 /var/base/test1
이 디렉터리에 쓸 수 없는 에 들어가게 되며 입력한 /var/base/test1/test1
다음 쓸 수 있습니다.
/var/base/test1/test1
그러나 이는 약간 짜증나는 일이며 이상적으로는 사용자가 FTP를 통해 로그인할 때 디렉토리 에 입력하기를 원합니다 . 이를 쉽게 할 수 있는 방법이 있나요? ChrootDirectory(sshd_config에서)를 로 변경하면 /var/base/test1/test1
ftp 사용자는 더 이상 로그인할 수 없습니다.
mkdir -p /var/base/test1/test1
chown root:root /var/base/test1
chown root:root /var/base
chmod 755 /var/base/test1
adduser --disabled-password --gecos test1
echo “test1:apassword” | chpasswd
chown test1:test1 /var/base/test1/test1
vim /etc/ssh/sshd_config
systemctl restart sshd
sshd_config:
Match User test1
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/base/test1
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
답변1
짧은 답변
이는 불가능하지만 /test1
해결 방법으로 집을 설정하십시오.
긴 답변
openssh
ChrootDirectory
해당 경로로 이어지는 모든 경로 구성 요소는 루트 소유이고 다른 사람이 쓸 수 없어야 합니다 . 이는 ChrootDirectory
악의적으로 조작되거나 완전히 다른 곳으로의 심볼릭 링크로 대체되는 것을 방지하기 위한 보안 조치입니다 . ChrootDirectory
상위 디렉토리 중 하나가 루트 소유가 아니거나 그룹 또는 누구나 쓰기 가능한 경우 sshd
로그인을 거부합니다. 이런 일이 발생하면 다음과 같은 내용이 표시됩니다 /var/log/auth.log
.
Jun 10 07:54:01 ubuntu-bionic sshd[2251]: fatal: bad ownership or modes for chroot directory "/var/base/test1"
Jun 10 07:54:01 ubuntu-bionic sshd[2173]: pam_unix(sshd:session): session closed for user test1
오류 메시지는 올바른 방향을 알려줄 것입니다.
이는 안내문에도 명시적으로 명시되어 있습니다.sshd_config 매뉴얼 페이지:
Chroot디렉토리
인증 후 chroot(2)에 대한 디렉토리의 경로 이름을 지정합니다. 세션 시작 시 sshd(8)는 경로 이름의 모든 구성 요소가 다른 사용자나 그룹이 쓸 수 없는 루트 소유 디렉터리인지 확인합니다. chroot 후에 sshd(8)는 작업 디렉토리를 사용자의 홈 디렉토리로 변경합니다.[...]안전을 위해 디렉토리 계층 구조가 시스템의 다른 프로세스(특히 감옥 외부 프로세스)에 의해 수정되는 것을 방지하는 것이 매우 중요합니다. 잘못된 구성은 sshd(8)가 감지할 수 없는 안전하지 않은 환경으로 이어질 수 있습니다.
해결 방법
그러나 사용자의 홈 디렉터리를 /test1
( sudo usermod test1 -d /test1
)로 설정할 수 있습니다. 그러면 가 chroot
적용된 후 디렉터리가 로 변경됩니다 /var/base/test1/test1
. 이렇게 하면 사용자는 해당 디렉터리로 변경할 필요 없이 이미 해당 디렉터리에서 세션을 test1
시작합니다 .sftp
$ sftp -P 2222 test1@localhost
test1@localhost's password:
Connected to localhost.
sftp> pwd
Remote working directory: /test1