web-dev-qa-db-ja.com

dockerでは、「chattr:ファイルにフラグを設定している間は操作は許可されません」

ローカルのCentos 7 Dockerコンテナーにsshを実行しました*と実行しようとしています

Sudo chattr +i file1

しかし、エラーが発生します:

chattr: Operation not permitted while setting flags on file1

ここで何が起こっているのですか?それはどのフラグについて話しているのですか?回避策はありますか?

+i+aに変更すると、コマンドはそのエラーで失敗しますが、+dに変更すると、コマンドは成功します。このコマンドは、Dockerコンテナーにsshしていない場合にも成功します。

* Ubuntu VirtualBoxでCentos 7 Dockerコンテナーを実行していますVM Windows 10上のホスト(できるだけWindowsに対処する必要がないようにしたい)。これらすべての目標は、これらのコンテナーを使用して一部のAnsibleスクリプトをテストすることです。

3
Benjamin Berman

これは機能に関連しています:chattrにはCAP_LINUX_IMMUTABLEが必要で、デフォルトではdockerで無効になっています。 --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

ここ Linux機能の詳細については、dockerを参照してください。

5
rush