Rozdíl mezi semange a chcon je v tom, že chcon je „dočasný“, pokud systém přejmenuje, kontexty přítomné v souboru / adresáři budou ztraceny, použití semanage činí kontexty selinux trvalými.
Aby semanage fungoval, musíte zadat úplnou cestu k souboru nebo adresáři, protosemanage fcontext -a -t public_content_rw_t upload/ nefunguje, ale semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)? dělá; restorecon nevyžaduje úplnou cestu.
Toto je výchozí kontext
[example@unixlinux.online ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 upload/
Zkoušel jsem tento příkaz změnit kontext
[example@unixlinux.online ftp]# semanage fcontext -a -t public_content_rw_t upload/ [example@unixlinux.online ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 upload/
[example@unixlinux.online ftp]# restorecon -R -v upload [example@unixlinux.online ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 upload/
Nefunguje to, ale tento příkaz zapíše kontext v /etc/selinux/targeted/contexts/files/file_contexts.local soubor
viz zde
# This file is auto-generated by libsemanage # Do not edit directly. upload/ system_u:object_r:public_content_rw_t:s0
Nyní jsem zkusil tento příkaz (Pracovní příkaz )
[example@unixlinux.online ftp]# semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?"
[example@unixlinux.online ftp]# restorecon -R -v upload restorecon reset /var/ftp/upload context unconfined_u:object_r:public_content_t:s0->unconfined_u:object_r:public_content_rw_t:s0
Now context is changed. [example@unixlinux.online ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_rw_t:s0 upload/
Ale opravdu nechápu, proč to funguje, podívejte se na rozdíl v příkazech.
Odpověď jsem dostal v manuálové stránce man ftpd_selinux
semanage fcontext -a -t public_content_rw_t "/var/ftpd/incoming(/.*)?"