La differenza tra semange e chcon è che chcon è "temporale" se il sistema viene rietichettato i contesti presenti in un file/directory andranno persi, l'utilizzo di semanage rende i contesti selinux persistenti.
Per poter funzionare, devi fornire il percorso completo del file o della directory, ecco perchésemanage fcontext -a -t public_content_rw_t upload/
non funziona ma semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?
fa; restorecon non richiede il percorso completo.
Questo è il contesto predefinito
[[email protected] ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 upload/
Ho provato questo comando per cambiare il contesto
[[email protected] ftp]# semanage fcontext -a -t public_content_rw_t upload/ [[email protected] ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 upload/
[[email protected] ftp]# restorecon -R -v upload [[email protected] ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 upload/
Non funziona, ma questo comando scriverà il contesto in /etc/selinux/targeted/contexts/files/file_contexts.local
file
vedi qui
# This file is auto-generated by libsemanage # Do not edit directly. upload/ system_u:object_r:public_content_rw_t:s0
Ora ho provato questo comando (Comando di lavoro )
[[email protected] ftp]# semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?"
[[email protected] 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. [[email protected] ftp]# ll -Zd upload/ drwxr-xr-x. root root unconfined_u:object_r:public_content_rw_t:s0 upload/
Ma davvero non so perché funzioni, vedi la differenza nel comando.
Ho trovato la risposta nella pagina man di man ftpd_selinux
semanage fcontext -a -t public_content_rw_t "/var/ftpd/incoming(/.*)?"