저는 sftp용 chroot를 설정하고 튜토리얼 조합을 사용했습니다(소스 1,소스 2) 다음 구성으로 끝납니다 /etc/ssh/sshd_config
.
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sftp 기본 폴더 /var/sftp
와 사용자는 다음과 같이 생성됩니다.
groupadd sftpusers
adduser myuser01
mkdir -p /var/sftp/myuser01
usermod -a -G sftpusers myuser01
chown myuser01:myuser01 /var/sftp/myuser01
systemctl restart sshd
/var/sftp
이제 로그인을 시도하면 로그인 작동 방식을 보여주는 이 폴더가 표시됩니다 .
사용자가 해당 폴더에 있기를 원하므로 /var/sftp/<userid>
해당 줄 아래에 다음 구성을 설정해 보았습니다.sshd_config
Match Group
ChrootDirectory /var/sftp/%u
client_loop: send disconnect: Broken pipe
이렇게 하면 로그인할 때 오류가 발생합니다. ssh_config
매뉴얼 페이지 에 따르면 변수는 다음과 같이 허용되어야 합니다:
ChrootDirectory는 %%, %h 및 %u 태그를 허용합니다.
어떤 아이디어가 있나요?
환경:
- 운영 체제: 우분투 18.04.4 LTS
- sshd: OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 2017년 12월 7일
답변1
chown myuser01:myuser01 /var/sftp/myuser01
...
ChrootDirectory /var/sftp/%u
OpenSSH SSH 서버Chroot 디렉토리지시문에서는 chroot 디렉터리와 해당 상위 디렉터리를 루트가 소유해야 합니다.
Chroot 디렉토리
인증 후 chroot(2)에 대한 디렉토리 경로 이름을 지정합니다.세션 시작 시 sshd(8)는 경로 이름의 모든 구성 요소가 다른 사용자나 그룹이 쓸 수 없는 루트가 소유한 디렉터리인지 확인합니다.chroot 후에 sshd(8)는 작업 디렉토리를 사용자의 홈 디렉토리로 변경합니다.
이건 테스트해보진 않았지만생각하다관련 사용자에 대한 행을 포함하는 chroot 환경에서 파일을 생성하는 경우 /etc/passwd
sshd는 해당 행의 home 필드를 chroot 환경에 있는 사용자의 홈 디렉터리로 처리합니다. 이것이 작동하면 이를 사용하여 chroot 디렉토리가 아닌 작업 디렉토리에서 사용자 세션을 시작할 수 있습니다.
답변2
귀하의 예에서는 다른 사용자가 소유하고 쓸 수 없어야 /var/sftp
합니다 /var/sftp/usero1
.root
귀하의 문제는 다음과 같은 경우에 발생할 가능성이 높습니다.
chown myuser01:myuser01 /var/sftp/myuser01
root:root
대신에chmod 755
sudo mkdir /var/sftp
sudo mkdir /var/sftp/myuser01
sudo chown -R root:root /var/sftp
chmod -R 755 /var/sftp
사용자 디렉토리는 root:root
다른 사람이 소유하고 있으며 쓸 수 없으므로 사용자는 sshd Internal-sftp를 통해 디렉토리 및 chroot에 로그인할 수 있어야 합니다.
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
따라서 그것들을 하나로 합치십시오:
sudo groupadd sftpusers
sudo mkdir /var/sftp
sudo mkdir /var/sftp/myuser01
sudo chown -R root:root /var/sftp
chmod -R 755 /var/sftp
sudo adduser -h /var/sftp/myuser01 myuser01
sudo usermod -a -G sftpusers myuser01
당신의 것을 편집 /etc/ssh/sshd_config
하고 끝에 이것을 추가하십시오 :
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/%u
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
그런 다음 sshd를 저장하고 다시 시작하십시오.
systemctl restart sshd
내 문제는 이것이 사용자 "myuser01"이 자신의 기본 디렉터리에 대한 쓰기 액세스 권한이 없다는 것을 의미한다는 것입니다. 따라서 내 경우에는 나쁘지 않습니다. 실제로 www 디렉터리를 가지려면 "myuser01"이 필요합니다. 액세스가 필요합니다. 이 문제를 해결했습니다
sudo mkdir /var/sftp/myuser01/www/
sudo chown myuser01:myuser01 /var/sftp/myuser01/www/
(여기서 명명 규칙을 따르도록 이름이 변경되었습니다)
이는 해당 사용자를 위한 SFTP chroot 감옥을 생성하려는 경우에 작동합니다. SFTP만 사용할 수 있지만 사용할 명령과 라이브러리의 전체 chroot를 구축할 필요는 없습니다. 그렇지 않으면 필수 명령을 해당 bin 디렉토리에 추가하고 필수 라이브러리를 해당 /lib
디렉토리에 추가해야 하며 로컬 복사본 /etc/passwd
과 /etc/group
필수 그룹 및 사용자 항목이 있다고 가정합니다(아직 직접 테스트하지 않음). SFTP chroot 감옥만 필요함)
답변3
ChrootDirectory에는 사용자 세션을 지원하는 데 필요한 파일과 디렉터리가 포함되어 있어야 합니다. 대화형 세션의 경우 최소한 셸(일반적으로 sh(1))과 null(4), zero(4), stdin(4), stdout(4), stderr(4) 및 tty와 같은 기본 /dev 노드가 필요합니다. (4) 장치. SFTP를 사용하는 파일 전송 세션의 경우 in-process SFTP 서버를 사용하는 경우 추가 환경 구성이 필요하지 않습니다.그러나 일부 운영 체제에서는 로깅을 사용하는 세션에 chroot 디렉토리에 /dev/log가 필요할 수 있습니다(자세한 내용은 sftp-server(8) 참조).
답변4
다음은 나를 위해 일했습니다. 아래는 단지 예입니다.
- 다음과 같이 라인을 편집
/etc/ssh/sshd_config
, 수정하고 활성화합니다.Subsystem sftp internal-sftp
- 그런 다음 파일 끝으로 이동합니다(이미 존재하는 경우 수정). SFTP 기본 폴더는 다음과 같습니다.
/home/sftp
Match Group sftpusers ChrootDirectory /home/sftp ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no
- 파일을 저장하고 SSH 서비스를 다시 시작하십시오.
systemctl restart sshd
그런 다음 다음 명령을 실행하십시오. sftpuser
우리의 사용자가 될 것이므로 sftpusers
앞으로는
- SFTP에 대한 새 사용자를 생성하고 에 추가하면 됩니다
sftpusers
.useradd -d /home/sftp -s /bin/false -g users -G sftpusers sftpuser
- 암호를 설정하세요
sftpuser
passwd sftpuser
- 다음 줄을 실행하십시오.
chown root:root /home/sftp #rights for group & others chmod go+rx /home/sftp mkdir /home/sftp/{upload,download} chown sftpuser:users /home/sftp/{upload,download} chown sftpuser:sftpusers /home/sftp/{upload,download}
이제 모든 원격 서버 또는 SFTP 클라이언트에서 SFTP를 인증할 수 있습니다.
sftp [email protected]