setcapを実行した後もまだtarが使用できず、「操作が許可されていません」エラーが発生するのはなぜですか?

setcapを実行した後もまだtarが使用できず、「操作が許可されていません」エラーが発生するのはなぜですか?

質問

私はコンテナセキュリティの分野でインターンとして働いており、最近いくつかのテストを実行するためにセキュリティ上の問題があるコンテナを構築する必要がありました。これは私のドッカーファイルです

FROM dockerfiles/centos-lamp
WORKDIR /var/www/html
RUN wget https://github.com/RandomStorm/DVWA/archive/v1.0.8.tar.gz -O- | tar xvz --strip-components=1
RUN service mysqld start && mysqladmin -uroot password p@ssw0rd && service mysqld stop
EXPOSE 80
USER root
COPY ./Centos-vault-6.10.repo /home
COPY ./here_u_r.txt /root
WORKDIR /home
RUN rm -rf /etc/yum.repos.d/*
RUN cp -r ./Centos-vault-6.10.repo /etc/yum.repos.d/CentOS-Base.repo
RUN yum clean all
RUN yum makecache
RUN cp /bin/tar .
WORKDIR /var/www/html
RUN rpm --rebuilddb && yum install -y sudo && yum install -y gcc
RUN usermod -aG wheel apache && \
        chmod u+s $(which find) && \
        chmod 700 $(which getcap) && \
        setcap 'cap_dac_read_search=ep' /home/tar
CMD ["supervisord", "-n"]

最後の行から2行目で、/homeディレクトリのtar実行可能ファイルにファイルを読み取る機能を提供したいことがわかります。ところで、tarファイルを使用して圧縮するとエラーが発生します。誰でも私を助けることができますか?

PS:このファイルの機能を確認すると、なぜ受け取るのか理解できません。cap_dac_read_search+ep、だれでも。 setcap 'cap_dac_read_search+ep' /home/tar を使用する代わりに setcap を使用します。'cap_dac_read_search=ep'/home/tar.gz

私のシェルの仕事+返された結果

bash-4.1$ ls -la /home/tar
ls -la /home/tar
-rwxr-xr-x. 1 root root 390616 Aug 24 22:56 /home/tar

bash-4.1$ find 1 -exec getcap /home/tar \;
find 1 -exec getcap /home/tar \;
/home/tar = cap_dac_read_search+ep

bash-4.1$ pwd
pwd
/home
bash-4.1$ ./tar -cvf /tmp/my.tar /tmp/1 /tmp/pip-build-root
./tar -cvf /tmp/my.tar /tmp/1 /tmp/pip-build-root
bash: ./tar: Operation not permitted

ベストアンサー1

表示される理由:

bash-4.1$ ./tar -cvf /tmp/my.tar /tmp/1 /tmp/pip-build-root
./tar -cvf /tmp/my.tar /tmp/1 /tmp/pip-build-root
bash: ./tar: Operation not permitted

cap_dac_read_searchシェルの機能を拒否する境界セットです。

一般的な状況では、次のことを試すと、次のような結果が得られます。

bash$ grep CapBnd /proc/self/status
CapBnd: 000001ffffffffff
bash$ capsh --decode=000001ffffffffff
0x000001ffffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read,cap_perfmon,cap_bpf,cap_checkpoint_restore

コンテナの下で同じシーケンスを試すと、より多くのゼロを含む16進値を取得できますが、これは--decode包括的ではありませんcap_dac_read_search

エラーが表示されるのは、カーネルが許可した関数のために呼び出しを試みることをbash拒否したためです。tar必要実行時間()に適用するにはcap_dac_read_search=ep適用できません。カーネルは、必要な有効な機能が不足しているため、バイナリの輻輳を許可せず、次の権限を拒否します。実装するバイナリファイル。これは、20年前に初めてSendmailを対象とした攻撃クラスに対する保護です。これについての詳細を読むことができます。ここ

関数の仕組みには多くの奇妙な点があります。一部がリストされています。ここ

おすすめ記事