나는 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/rksh
in (restricted kornshell)은 사용자의 사전 정의된 쉘 대신 사용자의 기본 쉘로 설정됩니다 /etc/profile
.
노트:해당 이름을 가진 실행 파일이 시스템에 없으면 하드 링크를 만들고 ln /bin/ksh /bin/rksh
이름 ksh
을 기준으로 제한되는지 확인하십시오.
이것제한된 껍질예를 들어 호출에서 cd
(명시적 경로)로 지정된 명령이나 명령 의 실행을 방지하고, 변수에 대한 변경을 허용하지 않으며 출력 리디렉션도 허용하지 않습니다./
PATH
SHELL
ENV
너할 수 있는아직 사용 가능사전 정의된사용자에게 주어진 쉘 스크립트는 (스크립트 구현자의 제어 하에!) 사용자가 무제한 환경에서 특정 스크립트를 실행할 수 있게 해줍니다.
답변3
이 명령을 사용 chroot
하면 사용자에 대해 제한된 루트 디렉터리를 만들 수 있습니다.질문개념 chroot
과 사용법을 설명합니다.
업데이트: 찾는 중디지털 바다에 Chroot 감옥이 세워졌습니다., 해당 환경에 맞는 추가 문서를 제안합니다. 여기에 당신에게 필요한 것과 관련된 것이 있다고 생각합니다.
Ubuntu 12.04 VPS에서 테스트하기 위해 Chroot 환경을 구성하는 방법