ChrootDirectory와 사용자 홈 디렉터리는 어떻게 함께 작동합니까?

ChrootDirectory와 사용자 홈 디렉터리는 어떻게 함께 작동합니까?

CentOS 7에서 SFTP 전용 사용자를 생성해야 합니다. 나는 이 작업을 수행하는 방법을 다양한 출처에서 읽었습니다. 이 설정은 SFTP를 통해 단일 폴더에 액세스하는 단일 사용자만 지원하면 됩니다.

사용자의 홈 디렉토리가 /home/user다음 과 같은 경우 sshd는 sshd_config다음 을 고려하여 디렉토리를 chroot 로 변경합니다.ChrootDirectory%h/home/user

Chroot 디렉토리 인증 후 chroot(2)에 대한 디렉토리 경로 이름을 지정합니다. 경로 이름의 모든 구성 요소는 루트가 소유한 디렉터리여야 하며 다른 사용자나 그룹이 쓸 수 없어야 합니다.chroot 후에 sshd(8)는 작업 디렉토리를 사용자의 홈 디렉토리로 변경합니다.

어떻게 작동하나요? sshd가 CD를 시도하기 때문에 확실히 실패할 것입니다 /home/user/home/user.

/home추가 질문: 사용자가 생성될 때 정의된 홈 디렉터리에서 해당 사용자를 chroot할지 아니면 외부에서 chroot할지 결정하는 모범 사례가 있습니까 /var/sftp/user? 외부적으로 chroot를 생성할 때 사용자 홈 디렉토리의 목적은 무엇입니까 /home? 아직도 독서용으로 사용하시나요 ~/.ssh/authorized_keys?

답변1

디렉토리로 사용하는 경우 알아야 할 추가 제한 사항이 있습니다 ChrootDirectory.경로 이름의 모든 구성 요소는 루트가 소유한 디렉터리여야 하며 다른 사용자나 그룹이 쓸 수 없어야 합니다.사용자가 chroot 내의 자신의 홈 디렉토리에 쓸 수 있어야 하는 경우 홈 디렉토리는 ChrootDirectory.

역사적 기록:

OpenSSH의 chroot 지원은 원래 별도의 패치였으며 기본 OpenSSH 배포판에 통합된 후에도 ChrootDirectory로 사용되는 디렉터리에 대한 정확한 요구 사항은 OpenSSH 버전에 따라 변경되었습니다. 이전 설정에서 발견된 보안 취약성에 대응하여 새 버전은 이전 버전보다 더 엄격한 요구 사항을 적용하는 경우가 많습니다.

또한 동일한 홈 디렉터리 경로가 chroot 내부와 외부 모두에 적용되어야 한다는 요구 사항은 분명히 차선책이며 일부 배포판에서는 동작을 수정하기 위해 패치를 적용했습니다. 불행하게도 과거의 모든 패치에는 매뉴얼 페이지 및 기타 관련 문서에 대한 업데이트가 포함되지 않았습니다.

그러나 서면 요구 사항을 충족하려면 다음과 같이 할 수 있습니다.

mkdir -p /jail/username/home

# First, the chroot directory:
chown root:root /jail/username
chmod 755 /jail/username

# Then, the user's home directory:
chown username: /jail/username/home
chmod 750 /jail/username/home
usermod -d /jail/username/home username

# And here's the magic:
cd /jail/username
ln -s . jail       # this would normally be a silly thing to do
ln -s . username   # but with chroot it can be useful

이제 설정할 수 있습니다 ChrootDirectory /jail/%u.

chroot 외부에서 볼 때 사용자의 홈 디렉토리는 /jail/username/home일반적인 명명 규칙에서 약간 벗어나지만 특별한 것은 아닙니다.

chroot 내에서 동일한 홈 디렉터리 경로가 실제로 참조됩니다 /jail/username/jail/username/home. 하지만 위의 두 어리석은 심볼릭 링크를 보셨나요? 그것들을 참조 취소하면 를 얻게 될 것입니다 /jail/username/././home. 결과는 정확히 동일합니다 /jail/username/home. 따라서 동일한 경로는 chroot 내부와 외부의 동일한 위치를 가리키게 됩니다.

chroot 내부의 사용자는 자신의 홈 디렉토리를 /jail/username/home== 로 보고 정상적으로 사용할 수 있습니다 /././home. /home그들은 홈 디렉터리 위의 한 레이어를 볼 수 있지만 /루트만 거기에 쓸 수 있습니다.

이는 또한 syslog 스타일 로깅과 같은 것을 허용합니다. 루트 소유 디렉토리를 생성 /jail/username/dev하고 여기 rsyslog에 추가 스타일 소켓을 생성하도록 지시할 수 있습니다. 이제 chroot된 사용자는 로그 메시지를 생성하고 일반 syslog 하위 시스템이 이를 처리하도록 할 수 있습니다./dev/log/jail/username/dev/log

이것이 chroot 환경을 정렬하는 유일한 방법은 아니지만, 위의 설정 스타일을 사용하면 사용자의 홈 디렉토리가 chroot 외부에서 처리할 수 있도록 가능한 한 정상적으로 만들 수 있습니다(= 심볼릭 링크 또는 기타 이상한 현상 없음).

감옥에 갇힌 사용자에게 최대한 쓸모없는 chroot를 원한다면 다음과 같이 할 수 있습니다:

mkdir -p /jail/username/username

# Prepare the chroot directory
chown root:root /jail /jail/username
chmod 755 /jail /jail/username

# Prepare the user's actual home directory
chown username: /jail/username/username
chmod 750 /jail/username/username

# Make it usable outside the chroot too
ln -s /jail/username/username /username

# And now it can be assigned to the user.
usermod -d /username username

다시 설정해 보겠습니다 ChrootDirectory /jail/%u.

chroot 외부에는 /username이를 가리키는 심볼릭 링크가 있으므로 /jail/username/username사용자의 홈 디렉터리가 유효합니다.

chroot 프로세스에서 /username이는 사용자의 홈 디렉토리로 사용할 수 있는 일반 디렉토리일 뿐입니다.

예, 실제 경로 이름은 약간 반복적이며 심볼릭 링크로 인해 시스템 루트가 복잡해집니다. 하지만 chroot 환경에는 불필요한 것이 없습니다.

만약에오직chroot 사용자에게 필요한 것은 SFTP입니다.이 질문에 대한 답변은 더 간단한 접근 방식을 설명합니다.

답변2

sshd가 CD를 시도하기 때문에 확실히 실패할 것입니다 /home/user/home/user.

음, 디렉토리가 존재하지 않는 경우에만 가능합니다.

SFTP만 필요하다고 언급했지만 유사한 기능을 사용하여 ChrootDirectory바이너리와 라이브러리가 필요한 chroot 환경 또는 동일한 chroot 환경을 사용하는 여러 사용자를 위한 더 큰 도구 세트를 제공할 수 있습니다. 이러한 상황에서는 /some/chroot/home/user. 물론 ChrootDirectory %h이 경우에는 그다지 유용해 보이지 않습니다.

조금 어리석을 수도 있지만 생성하여 /home/user/home/user사용자가 그곳에서 작업하도록 할 수 있습니다.

외부적으로 chroot를 생성할 때 사용자 홈 디렉토리의 목적은 무엇입니까 /home? 아직도 독서용으로 사용하시나요 ~/.ssh/authorized_keys?

사실 이것은 매우 좋은 지적이다. 매뉴얼 페이지에는 다음과 같이 나와 있습니다 ChrootDirectory.

ChrootDirectory는
chroot(2)의 디렉토리 경로 이름을 지정합니다.인증 후.

authorized_keys그래서 이것은 chroot 외부에서 읽는다는 것을 의미하는 것 같습니다 .

이로 인해 다른 구성 아이디어를 얻을 수 없었습니다. 사용자의 실제 홈 디렉터리를 로 설정하고 /이를 설정하는 방법도 생각해 봤지만 ChrootDirectory /home/%u지금 당장은 좋은 생각이 아닌 것 같습니다.

관련 정보