t
모든 새 파일과 디렉터리에 특정 액세스 마스크가 있고 디렉터리에도 고정 비트 세트( 이 디렉터리 내의 파일 삭제를 제한하는 고정 비트)가 있는 디렉터리를 만들고 싶습니다 .
첫 번째 부분에서는 상위 디렉터리에 대한 기본 ACL을 설정해야 한다는 것을 이해했습니다. 그러나 새 디렉터리는 t
상위 디렉터리에서 이 비트를 상속하지 않습니다. 따라서 소유자가 아닌 사람도 하위 디렉터리의 파일을 삭제할 수 있습니다. 이 문제를 해결할 수 있나요?
답변1
그룹 멤버십을 허용하는 구성이며,시험, 그룹 파일을 생성하고 수정하는 동시에 소유자 및 "다른 사람"을 제외하고는 파일 삭제 및 이름 변경을 허용하지 않습니다. 사용자 이름을 사용하여,레프그리고 umask가 022라고 가정합니다.
groupadd acltest
usermod -a -G acltest lev
루트 계정에서 로그아웃하고레프계정. 로그인하고 루트가 되거나 다음을 사용하십시오.스도:
mkdir /tmp/acltest
chown root:acltest /tmp/acltest
chmod 0770 /tmp/acltest
chmod g+s /tmp/acltest
chmod +t /tmp/acltest
setfacl -d -m g:acltest:rwx /tmp/acltest
setfacl -m g:acltest:rwx /tmp/acltest
ACL은 고정 비트를 설정할 수 없으며 고정 비트는 하위 디렉터리에 복사되지 않습니다. 그러나 다음을 사용할 수도 있습니다.inotify또는 파일 시스템의 변경 사항(예: 새 디렉터리)을 감지하고 그에 따라 반응하는 유사한 소프트웨어.
예를 들어, 데비안에서는:
apt-get install inotify-tools
그런 다음 스크립트를 작성하십시오.inotify, 좋다 /usr/local/sbin/set_sticky.sh
.
#!/usr/bin/env bash
inotifywait -m -r -e create /tmp/acltest |
while read path event file; do
case "$event" in
*ISDIR*)
chmod +t $path$file
;;
esac
done
실행 권한 부여뿌리: chmod 0700 /usr/local/sbin/set_sticky.sh
. 그런 다음 시작 시 (예를 들어) /etc/rc.local
또는 적절한 RC 파일 에서 실행합니다 .
/usr/local/sbin/set_sticky.sh &
물론 이 예에서는 /tmp/acltest
재부팅 시 사라져야 합니다. 그렇지 않으면 이것이 매력처럼 작동할 것입니다.
답변2
부모를 기반으로 고정 비트를 재귀적으로 설정
고정 비트가 없는 디렉토리는 다음 명령문으로 찾을 수 있습니다. 여기서 -
값 앞의 하이픈은 다음 1000
과 같이 처리되어야 합니다.이 권한 값과 더 높은 권한 값과 일치하는 접두사.
$ find . -type d \! -perm -1000
setgid
따라서 고정 비트와 고정 비트가 설정된 상위 디렉터리가 있는 디렉터리를 설정하는 방법은 다음과 같습니다 .
find
그렇지 않은 경우 중첩된 문이 필요합니다.find
문은 중첩될 수 없습니다..
그렇기 때문에 대신관로재귀 조건을 사용하면 고정 비트 없이 발견된 디렉터리에 사용됩니다.
-k
시험고정 비트(이 경우 상위 디렉터리의 고정 비트)가 설정된 경우 true를 반환합니다.
$ find . -type d \! -perm -1000 |while read d; do if [[ -k "$d/.." ]]; then chmod +t,g+s "$d"; fi; done
이봐더 많은 find
재미와에 대한 설명setgid
.
답변3
다음과 같이 mkdir 함수를 생성하고 파일 끝에 추가할 수 있습니다 vi ~/.bashrc
.
mkdir(){
/bin/mkdir "$@"
find . -type d \! -perm -1000 |while read d; do if [[ -k "$d/.." ]]; then chmod +t,g+s "$d"; fi; done
}
-k
옵션은 여기에 설정된 GUID 대신 고정 비트가 설정되어 있는지 확인합니다 . 이 옵션을 g+s
확인하세요.man test
또는 다음을 수행할 수 있습니다.
unalias mkdir;
source ~/.bashrc
그러면 새 하위 디렉터리에 고정 비트가 설정되어야 하지만, 상위 디렉터리에 고정 비트가 설정된 경우에만 해당됩니다.
이 방법은 효과가 있는 것 같지만 모든 사용자에게 효과가 있을지는 확실하지 않습니다!