서버의 "/home" 디렉터리 트리를 백업하기 위해 "backup" 계정을 만들고 setfacl을 사용하여 전체 디렉터리를 읽을 수 있게 만들었습니다. 내 cron 작업은 매일 밤 루트로 이 명령을 실행합니다.
setfacl -R -m u:backup:rx,d:u:backup:rx /home
좋습니다. 한 가지 문제를 제외하고는 이 명령을 실행할 때마다 SSH 키의 그룹 권한이 변경됩니다.
me@myserver:~/.ssh$ ls /home/me/.ssh/id_rsa -l
-rw-r-x---+ 1 me me 1679 Jan 8 18:35 /home/me/.ssh/id_rsa
글쎄, 이제 그룹 읽기가 가능해졌기 때문에 이로 인해 내 ssh 프로그램이 충돌하게 됩니다. 이상하게도 getfacl은 권한에 동의하지 않습니다.
me@myserver:~/.ssh$ getfacl /home/me/.ssh/id_rsa
getfacl: Removing leading '/' from absolute path names
# file: home/me/.ssh/id_rsa
# owner: me
# group: me
user::r--
user:backup:r-x
group::---
mask::r-x
other::---
getfacl은 파일을 그룹에서 읽을 수 없는 것으로 간주합니다. 명백한 명령을 실행하면
chmod 400 id_rsa
권한은 고정되어 있지만 원래 명령(setfacl -R -mu:backup:rx,d:u:backup:rx /home)을 다시 실행할 때마다 복원됩니다. 어떻게 되어가나요?
참고: 이러한 보안 문제에 대해 걱정할 필요가 없도록 id_rsa를 백업하고 싶습니다.
답변1
acl(5)
매뉴얼 페이지를 보면 다음과 같습니다.
ACL 항목과 파일 권한 비트 간의 대응
ACL에 의해 정의된 권한은 파일 권한 비트에 의해 지정된 권한의 상위 집합입니다.
파일 소유자, 그룹 및 기타 권한과 특정 ACL 항목 간에는 대응 관계가 있습니다. 소유자 권한은 ACL_USER_OBJ 항목의 권한에 해당합니다.ACL에 ACL_MASK 항목이 있는 경우 그룹 권한은 ACL_MASK 항목의 권한에 해당합니다.. 그렇지 않고 ACL에 ACL_MASK 항목이 없으면 그룹 권한은 ACL_GROUP_OBJ 항목의 권한에 해당합니다. 다른 권한은 ACL_OTHER_OBJ 항목의 권한에 해당합니다.
getfacl
출력을 보면 해당 파일이 없으면 mask
파일 에 액세스할 수 없다는 것을 알 수 있습니다 .r-x
backup
실제로 r-x
해당 모드에 있다고 해서 그룹이 파일에 액세스할 수 있다는 의미는 아닙니다 me
(그렇지 않습니다).다른 사람(사용자 또는 그룹)이 액세스할 수 있습니다..
그러나 ssh
동일하기 때문에 충분하지 않습니다.
를 실행하면 chmod 400
마스크가 지워지며, 이는 사용자가 backup
더 이상 마스크에 액세스할 수 없음을 의미합니다.
이는 약간 혼란스럽기는 하지만 아마도 두 가지 권한 메커니즘을 조화시키는 가장 좋은 방법일 것입니다.
문제가 발생하면 백업을 하거나 root
해당 기능을 사용해야 할 수도 있습니다.
답변2
내 SSH는 이와 같이 동작하지 않습니다(openssh-6.0p1-2.3.3).
ssh 호출의 strace 출력을 살펴보는 것은 흥미로울 것입니다(파일만 확인).
나는 일반적으로 이것이 좋은 전략인지 의심합니다. 백업에 루트를 사용하지 않는 이유는 무엇입니까? 아니면 적어도 백업 프로세스에 CAP_DAC_READ_SEARCH 및 CAP_DAC_OVERRIDE를 제공합니까(setcap 또는 Apparmor 사용)?