질문은 다음과 같습니다.cp가 ACL을 존중하지 않는 이유는 무엇입니까? 서버 장애에 대해/home/myuser
하지만 한 가지 다릅니다. 폴더와 하위 폴더에 생성된 새 파일에 대한 기본 권한을 설정했습니다.
setfacl -dR -m u::rwx,g::rx,o::rx ~ 2> /dev/null
이 getfacl ~
명령은 다음과 같은 출력을 제공합니다.
getfacl: Removing leading '/' from absolute path names
# file: home/lohacker
# owner: lohacker
# group: lohacker
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:other::r-x
cp
폴더 ACL 권한은 새 파일을 생성할 때 적용되지만 소스 파일에 대한 권한은 유지하지 않더라도 명령을 사용하여 새 파일을 복사하지 않습니다 .
예를 들어 다음과 같은 함수가 있습니다.
cp () {
command cp -a --no-preserve=mode,ownership --remove-destination "$@"
return $?
}
내가 현재 위치에 있다고 가정해 보겠습니다 ~
.
> file.txt
cp file.txt file2.txt
ls -l file.txt file2.txt
getfacl file.txt file2.txt
나에게 출력을 제공합니다 :
-rw-rw-r-- 1 lohacker lohacker 0 Jul 26 13:05 file2.txt
-rw-r--r-- 1 lohacker lohacker 0 Jul 26 13:05 file.txt
# file: file.txt
# owner: lohacker
# group: lohacker
user::rw-
group::r--
other::r--
# file: file2.txt
# owner: lohacker
# group: lohacker
user::rw-
group::rw-
other::r--
나는 두 파일을 모두 예상했지만 -rw-r--r--
불행히도 그렇지 않습니다. 소스 파일의 권한을 유지하지 않고도
명령을 사용하여 문제를 해결할 수 있는 방법이 있습니까 ?cp
답변1
setfacl -bR ~ 2> /dev/null
ACL을 사용하지 않고 명령을 사용하여 기본 권한을 변경할 수 있었기 때문에 해결책은 파일의 한 줄을 umask
주석 처리하는 것이었습니다 . /etc/login.defs
이것:
UMASK 022
이 되다:
#UMASK 022
UMASK
에서 설정을 해제 하면 /etc/login.defs
값이 더 이상 으로 USERGROUPS_ENAB
설정된 변수 value 의 영향을 받지 않으므로 yes
편리합니다. 왜냐하면 이를 사용하면 명령을 실행할 때 deluser
사용자 uid와 동일한 gid 및 사용자와 동일한 이름을 가진 그룹이 생성되기 때문입니다. 도 삭제됩니다(그룹에 다른 구성원이 없는 경우). 나중에 삭제할 필요가 없습니다.
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
# for private user groups, i. e. the uid is the same as gid, and username is
# the same as the primary group name: for these, the user permissions will be
# used as group permissions, e. g. 022 will become 002.
이런 방식으로 cp 명령은 -rw-r--r--
권한이 유지되지 않더라도 복사된 파일에 권한을 부여합니다.
이것은 일반 공식입니다:
perl -pi -e 's/^\h*(UMASK\h+.*[^\h])\h*$/#\1/i' /etc/login.defs