Notre entreprise dispose d'un serveur Web avec CentOS 7 et nos clients gèrent leurs sites Web via FTP (vsftpd). SELinux est en mode d'application.
Le problème est que les données créées / téléchargées via VSFTPD n'héritent pas du contexte SELinux approprié. Laisse-moi expliquer.
Par exemple, pour les sites WordPress, le serveur dispose déjà de quelques règles qui peuvent être vues à l'aide semanage fcontext -l |grep '/var/www'
, qui sont:
/var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
Ainsi, lorsque je copie un site WordPress, disons à partir d'un autre serveur dans un répertoire dans /var/www/html/
SSH, les dossiers wp-content/
et wp-content/uploads/
ont le httpd_sys_rw_content_t
contexte de sécurité approprié . TOUTEFOIS, lorsque ces dossiers sont créés via FTP, le contexte qu'ils obtiennent est httpd_sys_content_t
(pas de rw ). Cela signifie que les sites que nos clients téléchargent sur le serveur ne peuvent pas écrire dans ces répertoires même s'ils donnent des autorisations d'écriture à l'utilisateur / groupe apache, donc l'administrateur WordPress ne fonctionne pas. Ainsi, quand ils téléchargent un site, ils doivent nous demander de l'aide pour résoudre ce problème, ce qui est une perte de temps pour toutes les personnes impliquées.
Disons que le client a téléchargé son site dans httpdocs
, si via SSH je fais mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -fr
le problème est résolu, donc il n'y a rien de mal avec les données.
Je peux également faire restorecon -Rv httpdocs/
pour résoudre le problème.
Donc, la question est: comment puis-je faire en sorte que les répertoires créés / téléchargés via VSFTPD héritent des contextes SELinux appropriés, tout comme ils sont hérités lorsque les répertoires sont créés / téléchargés via SSH?
Réponses:
Il existe une différence entre l'étiquetage par défaut qui se produit au moment de l'exécution et la stratégie de post-étiquetage basée sur l'expression régulière qui s'applique sur le serveur.
Ce que vous notez ici:
Est la politique de post-étiquetage.
Ce que vous discutez dans votre problème se rapporte en fait à la stratégie d'exécution.
Lorsqu'une entrée est créée dans un répertoire à l'aide de SELinux, les règles régissant le libellé du fichier ou du répertoire ne sont pas dictées par les expressions régulières que vous citez, mais par les autres règles comme suit (je pense que c'est le bon ordre, mais il est possible qu'il ait manqué quelque chose) .
type_transition
règle nommée explicite .type_transition
règle explicite non nommée .default_context
.Donc, oui, il le fait, mais pas pour la raison pour laquelle vous le pensez. Certainement pas à cause de la politique de post-étiquetage.
Cela se produit car une
type_transition
règle nommée spécifique existe qui fournit ce comportement.C'est essentiellement dire.
unconfined_t
ethttpd_sys_content_t
ethttpd_sys_rw_content_t
La raison pour laquelle cela fonctionne pour SSHD est qu'après vous être connecté, le contexte source
unconfined_t
auquel cette règle s'applique s'applique.Cela ne fonctionne pas pour le service FTP car le contexte source de ce service est très probablement
ftpd_t
sans règle de correspondance.En tant que tel, vous devrez modifier la stratégie pour modifier le comportement de SELinux afin d'honorer également les décisions de fichier nommées que vous voyez dans les autres entrées pour FTP également.
Dans Fedora 23 au moins, il existe une interface pour permettre cela, un module de politique comme celui-ci le ferait.
Vous pouvez le charger en vous assurant que le
selinux-policy-devel
package est installé et en cours d'exécutionmake -f /usr/share/selinux/devel/Makefile load
.la source
local_ftpd.te
avec votre module de politique, puis je l'ai faitmake -f /usr/share/selinux/devel/Makefile local_ftpd.pp
et puissemodule -i local_ftpd.pp
. Est-ce correct? Désormais, les fichiers créés via FTP héritent des contextes souhaités. Merci encore!