사용자를 하나의 폴더로만 제한하고 해당 폴더 밖으로 이동하는 것을 허용하지 않는 방법

사용자를 하나의 폴더로만 제한하고 해당 폴더 밖으로 이동하는 것을 허용하지 않는 방법

나는 digitalocean에 우분투 서버를 가지고 있고 다른 사람의 도메인을 위해 내 서버에 폴더를 갖고 싶습니다. 내 문제는 해당 사용자가 내 폴더나 파일을 보거나 파일을 폴더 밖으로 이동할 수 없도록 한다는 것입니다.

이 사용자를 자신의 폴더로 제한하고 다른 파일/디렉토리를 이동하거나 볼 수 없도록 하려면 어떻게 해야 합니까?

답변1

나는 이런 식으로 문제를 해결했습니다.

새 그룹 만들기

$ sudo addgroup exchangefiles

chroot 디렉토리 생성

$ sudo mkdir /var/www/GroupFolder/
$ sudo chmod g+rx /var/www/GroupFolder/

그룹 쓰기 가능한 디렉터리 생성

$ sudo mkdir -p /var/www/GroupFolder/files/
$ sudo chmod g+rwx /var/www/GroupFolder/files/

둘 다 새 그룹에 제공

$ sudo chgrp -R exchangefiles /var/www/GroupFolder/

그런 다음 /etc/ssh/sshd_config파일 끝에 다음을 추가합니다.

Match Group exchangefiles
  # Force the connection to use SFTP and chroot to the required directory.
  ForceCommand internal-sftp
  ChrootDirectory /var/www/GroupFolder/
  # Disable tunneling, authentication agent, TCP and X11 forwarding.
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

이제 내 그룹에 Obama라는 새 사용자를 추가하고 싶습니다.

$ sudo adduser --ingroup exchangefiles obama

이제 모든 작업이 완료되었으므로 SSH 서비스를 다시 시작해야 합니다.

$ sudo service ssh restart

참고: 이제 사용자는 file디렉터리 외부에서 어떤 작업도 수행 할 수 없습니다. 내 말은, 그의 모든 파일이 그 폴더에 있어야 한다는 뜻이에요.

답변2

한계는 합리적인 질문이며 일관되게 정의되어야 합니다. 당신이 할 수 있는 일은제한된 껍질사용자를 자신의 것으로기본 쉘.

예를 들어, /bin/rkshin (restricted kornshell)은 사용자의 사전 정의된 쉘 대신 사용자의 기본 쉘로 설정됩니다 /etc/profile.

노트:해당 이름을 가진 실행 파일이 시스템에 없으면 하드 링크를 만들고 ln /bin/ksh /bin/rksh이름 ksh을 기준으로 제한되는지 확인하십시오.

이것제한된 껍질예를 들어 호출에서 cd(명시적 경로)로 지정된 명령이나 명령 의 실행을 방지하고, 변수에 대한 변경을 허용하지 않으며 출력 리디렉션도 허용하지 않습니다./PATHSHELLENV

할 수 있는아직 사용 가능사전 정의된사용자에게 주어진 쉘 스크립트는 (스크립트 구현자의 제어 하에!) 사용자가 무제한 환경에서 특정 스크립트를 실행할 수 있게 해줍니다.

답변3

이 명령을 사용 chroot하면 사용자에 대해 제한된 루트 디렉터리를 만들 수 있습니다.질문개념 chroot과 사용법을 설명합니다.

업데이트: 찾는 중디지털 바다에 Chroot 감옥이 세워졌습니다., 해당 환경에 맞는 추가 문서를 제안합니다. 여기에 당신에게 필요한 것과 관련된 것이 있다고 생각합니다.

Ubuntu 12.04 VPS에서 테스트하기 위해 Chroot 환경을 구성하는 방법

chroot된 감옥에 있는 사용자에게 제한된 SSH 액세스를 허용하는 방법

이것은감옥과 관련된 것, 어느플로 자신제안.

관련 정보