저는 웹 프로젝트 호스팅을 위한 새 서버를 설정하는 임무를 받았습니다. 저는 개발자이다 보니 시스템 관리 능력이 많이 부족합니다.
저는 약간 더 간단한 솔루션을 생각해 냈습니다. 각 프로젝트에는 고유한 UNIX 사용자가 있고 웹 루트는 사용자의 $HOME
.
구조는 간단합니다.
/home/<user>/web
/home/<user>/web/log
- 로그 파일./home/<user>/web/www
— 네트워크 문서 루트 디렉터리입니다./home/<user>/web/www/public
-- 단지 연습일 뿐, 문서 루트와 공개 루트를 분리하기 위해 다양한 웹 애플리케이션 프레임워크가 제안되었습니다.
이제 다음과 같이 권한을 설정하고 싶습니다.
/home/<user>/web
— 새 파일/디렉토리는 삭제하거나 추가할 수 없습니다.chown root:root
여기에 도움이 있습니다./home/<user>/web/log
— 사용자에게 읽기 전용이므로 간단한chown root:root
./home/<user>/web/www
— 삭제/수정이 불가하며, 내용 수정은 자유입니다(제외public
). 파일과 디렉터리를 생성, 삭제, 편집합니다./home/<user>/web/www/public
— 삭제/수정은 불가하며, 내용 수정은 자유롭게 가능합니다.
다른 보안 및 격리 관련 기능을 위해 사용하기로 선택했습니다.화재 감옥.
지금까지 시도한 방법은 chattr +a
새 콘텐츠를 추가하고 콘텐츠를 편집할 수 있지만 삭제할 수는 없다는 것입니다.
질문을 작성할 때 비슷한 질문 섹션이 나타납니다.하위 디렉터리 삭제 방지/디렉터리 구조 적용, 작동하고 지금 사용하고 싶습니다.
하지만 이러한 디렉터리를 설정하는 더 투명한 다른 방법이 있습니까?
답변1
디렉터리를 삭제하려면 상위 디렉터리에 대한 쓰기 권한이 필요합니다. 디렉터리 권한과 소유권은 관련이 없습니다. 따라서 삭제를 방지하려면 /home/theuser/web
사용자에게 쓰기 권한이 없는지 확인하는 것이 필요하고 충분합니다 /home/theuser
.
"ahelpshere"라고 쓰면 chown root:root
,상위 디렉토리에삭제되는 것을 방지하려면,그리고파일이 추가되거나 제거되는 것을 방지하기 위해 디렉토리 자체에서(기존 파일은 수정하지 않음)
또한 /home/theuser/web/log
유용한 방법으로 읽기 전용으로 만들려면 사용자에게 쓰기 권한이 없고 디렉터리를 소유하지 않는지 확인하는 것만으로는 충분하지 않습니다. 사용자가 /home/theuser/web
(또는 등 /home/theuser
) /home
을 쓸 수 있으면 /
이름을 바꾸고 자신이 소유한 새 디렉터리를 만들 수 있습니다./home/theuser/web/log
/home/theuser/web
log
/home/theuser/web/www
및 의 경우 루트가 만들고 소유 /home/theuser/web/www/public
할 수 있지만 사용자에게 쓰기 권한을 부여하고 고정 비트를 에 설정합니다 . 디렉터리에 고정 비트가 있으면 그 안에 있는 파일을 삭제해야 합니다(직접 하위 디렉터리 포함 - 디렉터리는 파일 유형임). 사용자는 자신이 소유한 파일만 삭제할 수 있습니다. 이렇게 하면 소유자(루트)만 삭제할 수 있지만 사용자는 다른 모든 것을 자유롭게 조작할 수 있습니다.www
www/public
www
public
chown root:root web/www web/www/public
chmod u=rwx,go= web/www web/www/public
chmod +t web/www
setfacl -m u:theuser:rwx web/www web/www/public
반드시 루트일 필요는 없지만 사용자가 아닌 소유권일 수 있습니다.
1 합리적인 가정, 즉 필요한 모든 순회 권한, 관련 SELinux 규칙 없음 등을 전제로 합니다.