로컬 Centos 7 Docker 컨테이너*에 SSH로 접속하여 다음을 실행하려고 합니다.
sudo chattr +i file1
하지만 오류가 발생합니다.
chattr: Operation not permitted while setting flags on file1
여기서 무슨 일이 일어나고 있는 걸까요? 어떤 플래그에 대해 이야기하고 있습니까? 해결 방법이 있나요?
+i
를 다음으로 변경하면 +a
해당 오류로 인해 명령이 실패하지만 이를 변경하면 +d
명령이 성공합니다. Docker 컨테이너에 SSH로 연결되지 않은 경우에도 이 명령은 성공합니다.
*저는 Windows 10 기반의 Ubuntu VirtualBox VM 호스트에서 Centos 7 docker 컨테이너를 실행하고 있습니다(Windows를 최대한 다루지 않고 싶습니다). 이 모든 것의 궁극적인 목표는 이러한 컨테이너를 사용하여 일부 Ansible 스크립트를 테스트하는 것입니다.
답변1
이는 기본적으로 docker에서 비활성화되어 있는 Capability thing: chattr
require 와 관련이 있습니다 . 활성화하려면 Docker 컨테이너 시작 옵션을 CAP_LINUX_IMMUTABLE
추가하기만 하면 됩니다 .--cap-add LINUX_IMMUTABLE
예는 다음과 같습니다.
user@test:~$ docker run --cap-add LINUX_IMMUTABLE -it bash
bash-5.0# cd home
bash-5.0# touch test
bash-5.0# apk add e2fsprogs-extra
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libuuid (2.33-r0)
(2/6) Installing libblkid (2.33-r0)
(3/6) Installing libcom_err (1.44.5-r0)
(4/6) Installing e2fsprogs-libs (1.44.5-r0)
(5/6) Installing e2fsprogs (1.44.5-r0)
(6/6) Installing e2fsprogs-extra (1.44.5-r0)
Executing busybox-1.29.3-r10.trigger
OK: 15 MiB in 24 packages
bash-5.0# chattr +i test
bash-5.0# echo $?
0
여기docker에서 Linux 기능에 대해 자세히 알아볼 수 있습니다.