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

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

SSHを介してローカルCentos 7 Dockerコンテナ*に接続して実行しようとしています。

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でデフォルトで無効になっているchattrrequire機能に関連しています。有効にするには、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の機能の詳細を学ぶことができます。

関連情報