여러 (~ 100) 고객이 단일 서버에 쉘 액세스 할 수있는 공유 웹 호스팅 회사의 서버 설정을 상상해보십시오.
많은 웹 “소프트웨어”는 파일 0777 을 chmod 할 것을 권장합니다 . 이 자습서를 따르지 않고 고객에게 파일을 열어 다른 고객에게 현명하게 신경을 씁니다. (필자 cmod 0777
는 자신 을 불필요하게 사용하고 있지 않습니다 !) 고객이 자신의 파일에만 액세스하고 다른 사용자의 세계에서 읽을 수있는 파일에 액세스하지 못하도록하는 방법이 있습니까?
AppArmor를 살펴 보았지만 프로세스와 밀접하게 연결되어있어 해당 환경에서 실패하는 것 같습니다.
답변
외부 세계와 보호 된 파일 사이에 제한 적이고 변경 불가능한 디렉토리를 두십시오 ( 예 :
/
├─ bin
├─ home
│ └─ joe <===== restricted and immutable
│ └─ joe <== regular home directory
또는 /home/joe/restricted/public_html
.
제한은 사용자 및 웹 서버 만 읽을 수 있음을 의미합니다 (예 : 모드 0700
/ 0750
또는 일부 ACL ).
불변성은 chattr +i
소유권을 또는로 변경하여 수행 할 수 있습니다 root:joe
.
Ubuntu에서 해당 계층을 만드는 쉬운 방법은 편집 /etc/adduser.conf
하고로 설정 GROUPHOMES
하는 것 yes
입니다.
답변
고려할 수있는 옵션이 있습니다 (작업을 수행하려는 작업량에 따라 다름).
다른 사람들이 이미 게시 한 것처럼 “일반적으로”쉘 액세스 권한을 가진 사람이 세계에서 읽을 수있는 파일을 읽을 수 없도록 막을 수는 없습니다.
그러나 기본적으로 쉘 액세스를 원하는 루트 디렉토리 (AKA 홈 디렉토리)로 제한하고 두 번째로 사용자가 원하지 않는 모든 것을 실행하지 못하도록 쉘 액세스를 제한 할 수 있습니다.
한 명의 사용자가 웹 파일에 액세스 할 수있을 때 비슷한 접근 방식을 사용했지만 웹 폴더 외부의 다른 파일을 보지 못하게하고 싶었습니다.
이것은 많은 오버 헤드를 가지고 있었고 설정의 혼란이었습니다. 내가 무언가를 업데이트 할 때마다 파산했습니다.
그러나 오늘 OpenSSH chroot 옵션을 사용하면 쉽게 얻을 수 있다고 생각합니다 .
답변
POSIX 액세스 제어 목록을 사용하면 시스템 관리자로서 중요한 사용자를 깰 수있는 많은 기회없이 정기적 인 사용자 그룹 다른 파일 시스템 권한을 재정 의하여 최악의 무지에서 사용자를 보호 할 수 있습니다. .
웹 컨텐츠는 아파치에서 액세스 할 수 있어야하기 때문에 예를 들어 (fi) 홈 디렉토리에 월드 액세스 가능해야하는 경우 특히 유용합니다 ~/public_html/
. (ACL을 사용하더라도 리버스를 수행하고 모든 사용자에 대한 액세스를 제거하고 아파치 사용자를위한 특정 유효 ACL을 사용할 수 있습니다.)
그렇습니다. 지식이 풍부한 사용자가 다시 제거 / 재정의 할 수 있고, 가능성이 거의없는 경우는 드물며, 일반적으로 편리하지 않은 사용자도 있습니다 chmod -R 777 ~/
.
acl
mount 옵션을 사용 하여 파일 시스템을 마운트해야합니다 .
mount -o remount,acl /home
많은 배포판에서 기본값은 사용자 그룹을 생성하는 것이며, 각 사용자는 기본 그룹을 가지고 있으며, 상상할 수없는 이름으로 보조 그룹의 모든 사용자를 설정했습니다 users
.
ACL을 사용하면 다른 사용자가 홈 디렉토리에 액세스하지 못하게하는 것이 간단합니다.
전에:
chmod 0777 /home/user*
ls -l /home/user*
drwxrwxrwx. 2 user1 user1 4096 Jul 11 15:40 user1
drwxrwxrwx. 2 user2 user2 4096 Jul 11 15:24 user2
이제 users
그룹 구성원의 유효 디렉토리 권한을 0
읽기, 쓰기 또는 액세스 안함으로 설정하십시오 .
setfacl setfacl -m g:users:0 /home/user*
ls -l
drwxrwxrwx+ 2 user1 user1 4096 Jul 11 15:40 user1
drwxrwxrwx+ 2 user2 user2 4096 Jul 11 15:24 user2
+
기호가 ACL 설정의 존재를 의미한다. 그리고 getfacl
그것을 확인할 수 있습니다 :
getfacl /home/user1
getfacl: Removing leading '/' from absolute path names
# file: home/user1
# owner: user1
# group: user1
user::rwx
group::rwx
group:users:---
mask::rwx
other::rwx
group:users:---
그룹이 효과적으로 다른 존재에 대한 일정한 권한에도 불구하고, 접근 권한이없는 것을 보여other::rwx
그리고 user1으로 테스트 :
[user1@access ~]$ ls -la /home/user2
ls: cannot open directory /home/user2: Permission denied
공유 시스템의 두 번째 일반적인 솔루션은 요청시 자동 마운터가 홈 디렉토리를 마운트하여 셸 액세스 전용 서버를 설치하는 것입니다. 그것은 어리석은 증거와는 거리가 멀지 만 일반적으로 소수의 사용자 만 동시에 로그인하여 해당 사용자의 홈 디렉토리 만 보이고 액세스 할 수 있습니다.
답변
리눅스 컨테이너 (LXC) 는 chroot와 개별 시스템의 최상의 조합 일 수 있습니다.
-
가상화가 아닌 고급 chroot와 비슷하지만 하나의 서버에서 다른 운영 체제를 결합 할 수 있습니다.
-
사용자에게 완전한 운영 체제를 제공하고 거기에서 chroot 할 수 있으므로 사용자가 로그인하면 컨테이너로 이동합니다. 또한 프로세서 및 메모리 사용량을 제한 할 수도 있습니다.
LXC의 저자 인 Stéphane Graber는 시작하는 데 유용한 자습서 를 제공합니다.
답변
예를 들어, 사용자가 자신의 home
디렉토리 에만 액세스 할 수있게 하려면 다음을 수행해야합니다.
cd /home
sudo chmod 700 *
이제는 /home/username
소유자 만 볼 수 있습니다. 이 모든 새로운 사용자 편집의 기본 만들려면 /etc/adduser.conf
및 설정 DIR_MODE
에 0700
대신의 0755
기본.
물론 기본 DIR_MODE를 변경하려면 배포본에 따라 다릅니다 Ubuntu
.
편집하다
으로 @Dani_l가 제대로 언급이 답변이 NOT 세계 읽을 그들을 만드는 올바른 것입니다.
답변
그냥 pedantic하기 위해-아니, 없습니다.
@Marek이 정답 을했지만 질문이 잘못되었습니다. “세계에서 읽을 수있는”파일에 액세스하는 것을 막을 수 없습니다.
그것들은 세계가 읽을 수 있거나 읽을 수 없습니다. @Marek의 대답은 세상을 읽을 수 없도록 만드는 데 정확합니다.
답변
나는 지금까지 주어진 대답에서 ‘제한 된 껍질’에 대한 언급이 없습니다.
ln / bin / bash / bin / rbash
이것을 로그인 쉘로 설정하십시오.