-
-
Notifications
You must be signed in to change notification settings - Fork 6
How to handle ACLs and (extended?) file attributes in moss-format #13
Description
We deduplicate assets prior to storing them in a moss-format archive. On moss install, we generate a FS transaction with hardlinks to the asset store in order to cut down on duplication.
Consider the following:
ermo@dante:~
$ echo 'This is a source-file' > source-file
ermo@dante:~
$ ln source-file copy-1
ermo@dante:~
$ ln source-file copy-2
ermo@dante:~
$ ls -l source-file copy-1 copy-2
-rw-r--r-- 3 ermo ermo 30 Jan 16 17:49 copy-1
-rw-r--r-- 3 ermo ermo 30 Jan 16 17:49 copy-2
-rw-r--r-- 3 ermo ermo 30 Jan 16 17:49 source-file
ermo@dante:~
$ chown :users copy-1
ermo@dante:~
$ ls -l source-file copy-1 copy-2
-rw-r--r-- 3 ermo users 30 Jan 16 17:49 copy-1
-rw-r--r-- 3 ermo users 30 Jan 16 17:49 copy-2
-rw-r--r-- 3 ermo users 30 Jan 16 17:49 source-file
ermo@dante:~
$ chmod g+w copy-2
ermo@dante:~
$ ls -l source-file copy-1 copy-2
-rw-rw-r-- 3 ermo users 30 Jan 16 17:49 copy-1
-rw-rw-r-- 3 ermo users 30 Jan 16 17:49 copy-2
-rw-rw-r-- 3 ermo users 30 Jan 16 17:49 source-file
ermo@dante:~
$
From the above, it is crystal clear that modifying hardlinked assets is a transitive operation that also applies to the original asset.
Therefore, any and all metadata manipulation (which deviates from a set of defined defaults) MUST be:
a. done during boulder build AND
b. be considered immutable from that point on
This has the following implications:
- /usr MUST be mounted RO during normal operations
- /usr MUST be protected from access from anyone but
rootrunningmossin the period where it is not mounted RO (Path based LSM such as TOMOYO or AppArmor ?) - Our tooling MUST capture non-standard metadata in the moss-format binary archives during
boulder buildAND - Our tooling MUST adhere to/respect the non-standard metadata
As an example, @joeyriches ran into an interesting issue regarding man pages, which looked like this:
* Joey Riches sighs
if [ "man" ] && [ "6755" = 6755 ]; then \
chown man:man \
/mason/build/install/usr/bin/man \
/mason/build/install/usr/bin/mandb; \
fi
chown: invalid user: ‘man:man’
Joey Riches
make install of man-db
patch it out?
ok got it (--disable-setuid)