On Mon, Sep 15, 2025 at 12:06:14PM +0800, Coiby Xu wrote:
On Wed, Sep 10, 2025 at 08:21:33AM -0400, Mimi Zohar wrote:
On Wed, 2025-09-10 at 09:36 +0800, Coiby Xu wrote:
On Mon, Sep 08, 2025 at 04:58:05PM -0400, Mimi Zohar wrote:
On Mon, 2025-09-08 at 10:53 -0400, Mimi Zohar wrote:
> Hi Coiby,
>
> On Mon, 2025-09-08 at 19:12 +0800, Coiby Xu wrote:
> > >
> > > Even without an IMA appraise policy, the security xattrs are written out
to the
> > > filesystem, but the IMA_DIGSIG flag is not cached.
> >
> > It seems I miss some context for the above sentence. If no IMA policy is
> > configured, no ima_iint_cache will be created. If you mean non-appraisal
> > policy, will not caching IMA_DIGSIG flag cause any problem?
>
> Sorry. What I was trying to say is that your test program illustrates the
> problem both with or without any of the boot command line options as you
> suggested - "ima_appraise=fix evm=fix ima_policy=appraise_tcb". Writing some
> other security xattr is a generic problem, whether the file is in policy or
not,
> whether IMA or EVM are in fix mode or not. The rpm-plugin-ima should install
> the IMA signature regardless.
My mistake. An appraise policy indeed needs to be defined for the file
signature to be replaced with a file hash.
Thanks for the clarification! rpm-plugin-ima does try to install IMA
signature as shown from the following strace output,
Agreed. I was referring to the SELinux label, which would be installed for new
files, but not necessarily re-installed on existing files. The test program
simplified testing. Thank you.
My pleasure! Note reinstalling a package using dnf/rpm is equivalent to
installing a new package in terms of this issue. Because according to
the strace output and rpm's source code, when reinstalling a package,
the following steps happens, taking lnstat as an example,
1. A temporary file "lnstat;68aee3f4" is created
2. Read the content from RPM and write it to lnstat;68aee3f4
3. Set file permission
4. Set security.ima by rpm-plugin-ima
5. Set security.selinux by rpm-plugin-selinux
6. Rename "lnstat;68aee3f4" to lnstat
And here's the strace output,
# strace rpm --reinstall ip*.rpm
openat(11, "lnstat;68aee3f4", O_WRONLY|O_CREAT|O_EXCL, 0200) = 12
dup(12) = 13
write(13,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0'\0\0\0\0\0\0"..., 19256) =
19256
close(13) = 0
getuid() = 0
fchown(12, 0, 0) = 0
fchmod(12, 0755) = 0
getuid() = 0
utimensat(12, NULL, [{tv_sec=1734480000, tv_nsec=0} /*
2024-12-17T19:00:00-0500 */, {tv_sec=1734480000, tv_nsec=0} /*
2024-12-17T19:00:00-0500 */], 0) = 0
fsetxattr(12, "security.ima",
"\3\2\4\3232\4I\0f0d\0020O\231\341q\323Q\322\235\341\7\323\224\205\2104\24\241\331#"...,
111, 0) = 0
fsetxattr(12, "security.selinux", "system_u:object_r:bin_t:s0", 27, 0) = 0
close(12) = 0
...
renameat(11, "lnstat;68aee3f4", 11, "lnstat") = 0
Btw, I realize my commit message that says the problem happens when
reinstalling a
package can be a bit misleading. So in v3, I rephrase it as
"... installing/reinstalling a package will not make good reference IMA generated"