Modification "hasardeuse" des droits par la fonction cleanFileSytemRight

Page : index.php?v=d&p=update#
Jeedom_version : 3.3.39
Uname : Linux bad-jeedom 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux


Message :
Bonjour chers développeurs,

Depuis peu, j’utilise des clés SSH liées à l’utilisateur www-data, donc stockées dans /var/www/.ssh or la fonction cleanFileSytemRight change les droits des clés en 775 lors de chaque backup ce qui est assez inacceptable. J’ai donc un scénario post-backup qui lance un script, qui remets ça en ordre… mais c’est pour moi un contournement.

En effet, en regardant comment la fonction cleanFileSytemRight change les droits, je me demande si la ligne suivante n’est pas trop large :
$cmd .= system::getCmdSudo() . 'chmod 775 -R ’ . DIR . ‹ /…/…/.* ; ›;
Car le globbing effectué match ceci :
/var/www/html/. /var/www/html/… /var/www/html/.gitignore /var/www/html/.htaccess /var/www/html/.quarantine /var/www/html/.tmb
Elle repasse donc sur /var/www/html/ (/var/www/html/.) déjà traité précédemment et, plus grave, passe sur /var/www/ (/var/www/html/…) !!!

Je vous propose donc de remplacer les 3 lignes suivantes dans core/class/jeedom.class.php :
$cmd .= system::getCmdSudo() . 'chmod 775 -R ’ . DIR . ‹ /…/…/;’;
$cmd .= system::getCmdSudo() . 'find ’ . DIR . ‹ /…/…/log -type f -exec chmod 665 {} +; ›;
$cmd .= system::getCmdSudo() . 'chmod 775 -R ’ . DIR . '/…/…/.
; ›;
par les 2 lignes :
$cmd .= system::getCmdSudo() . 'find ’ . DIR . ‹ /…/… -type d -exec chmod 775 {} +; ›;
$cmd .= system::getCmdSudo() . 'find ’ . DIR . ‹ /…/… -type f -exec chmod 664 {} +; ›;

En passant, je ne pense pas qu’il soit nécessaire d’appliquer de droit en exécution sur les fichiers, mais, selon comment sont codés les appels de scripts (ouverture préalable d’un shell ou non), cela peut introduire un bug, car aujourd’hui le changement de doit est plutôt fait de la façon suivante :
$cmd .= system::getCmdSudo() . 'find ’ . DIR . ‹ /…/… -exec chmod 775 {} +; ›;

Merci pour vos avis/retours,
Cordialement,
Bad Wolf.

3 « J'aime »

C’est en lien avec le sujet

Au final je patche brutalement tout jeedom et les plugins… ça marche chez moi

sudo find /var/www/html -regex '.*\.\(php\|py\)' -print0 | sudo xargs -0 sed -i "s/, 077[0-7])/, 0770)/g"
sudo find /var/www/html -regex '.*\.\(php\|sh\)' -print0 | sudo xargs -0 sed -i "s/chmod -R 77[0-7]/chmod -R 770/g"
sudo find /var/www/html -regex '.*\.\(php\|sh\)' -print0 | sudo xargs -0 sed -i "s/chmod 77[0-7] -R/chmod 770 -R/g"
sudo find /var/www/html -regex '.*\.\(php\|sh\)' -print0 | sudo xargs -0 sed -i "s/chmod -R 66[0-7]/chmod -R 660/g"
sudo find /var/www/html -regex '.*\.\(php\|sh\)' -print0 | sudo xargs -0 sed -i "s/chmod 66[0-7]/chmod 660/g"
sudo find /var/www/html -type d -exec chmod 740 {} \;
sudo find /var/www/html -type f -exec chmod 740 {} \;
sudo chmod 744 -R /etc/systemd/system/mariadb.service.d
1 « J'aime »

Merci Naboleo, je n’avais pas vu, je vais follow le sujet en question.

Dommage de devoir patcher.

Oui, heureusement ça se (re)fait automatiquement. Mais si tu as une meilleure idée, je suis preneur en attendant que ça soit de base dans le core et les plugins

Non, ma réponse est au premier degré. Je trouve dommage de devoir patcher pour annuler ce trou de sécurité dans le core.

2 « J'aime »