Gestion des droits automatisé ('sudo doc/set_permissions.php')
This commit is contained in:
parent
1c25256963
commit
9d6c0b7497
|
@ -1,5 +1,5 @@
|
||||||
# Gestion des pages d'erreur personnalisées
|
# Gestion des pages d'erreur personnalisées
|
||||||
ErrorDocument 403 view/error.php
|
ErrorDocument 403 /index.php
|
||||||
|
|
||||||
|
|
||||||
# Redirection vers index.php (Router)
|
# Redirection vers index.php (Router)
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"root": "/var/www/socioview",
|
||||||
|
|
||||||
|
"umask": 2,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"permissions": {
|
||||||
|
".htaccess": { "chown": "xdrm:www-data", "chmod": "750" },
|
||||||
|
"public": { "chown": "xdrm:www-data", "chmod": "750" },
|
||||||
|
"private": { "chown": "xdrm:xdrm", "chmod": "700", ".htaccess": "Order deny,allow\nDeny from all" },
|
||||||
|
"phponly": { "chown": "xdrm:www-data", "chmod": "770", ".htaccess": "Order deny,allow\nDeny from all" },
|
||||||
|
"php": { "chown": "xdrm:www-data", "chmod": "770" }
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"files": {
|
||||||
|
"permissions": "public",
|
||||||
|
|
||||||
|
".git": { "permissions": "private" },
|
||||||
|
|
||||||
|
"config": { "permissions": "private" },
|
||||||
|
"manager": { "permissions": "private" },
|
||||||
|
|
||||||
|
"src": {
|
||||||
|
"permissions": "phponly",
|
||||||
|
"static": "public"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
"tmp": {
|
||||||
|
"permissions": "php"
|
||||||
|
},
|
||||||
|
|
||||||
|
".htaccess": { "permissions": "public" },
|
||||||
|
|
||||||
|
"doc": { "permissions": "private" }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"root": "/var/www/socioview",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"permissions": {
|
||||||
|
"public": { "chown": "xdrm:www-data", "chmod": 750 },
|
||||||
|
"private": { "chown": "xdrm:xdrm", "chmod": 700, ".htaccess": "Order deny,allow\nDeny from all" },
|
||||||
|
"phponly": { "chown": "xdrm:www-data", "chmod": 770, ".htaccess": "Order deny,allow\nDeny from all" },
|
||||||
|
"php": { "chown": "xdrm:www-data", "chmod": 770 }
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"files": {
|
||||||
|
"permissions": "public",
|
||||||
|
|
||||||
|
".git": { "permissions": "private" },
|
||||||
|
|
||||||
|
"config": { "permissions": "private" },
|
||||||
|
"manager": { "permissions": "private" },
|
||||||
|
|
||||||
|
"src": {
|
||||||
|
"permissions": "phponly",
|
||||||
|
"static": "public"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
"tmp": {
|
||||||
|
"permissions": "php"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
".htaccess": { "permissions": "private" }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,157 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
define('__ROOT__', dirname(dirname(__FILE__)));
|
||||||
|
|
||||||
|
|
||||||
|
/* CHARGE LA CONFIGURATION DES DROITS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function loadConfig(){
|
||||||
|
|
||||||
|
$config = json_decode( file_get_contents(__ROOT__.'/doc/permissions.json'), true );
|
||||||
|
|
||||||
|
// Si erreur
|
||||||
|
if( is_null($config) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* DEFINIT LES DROITS DE MANIERE RECURSIVE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function chmodR($dirOrFile, $chmod=null, $chown=null){
|
||||||
|
|
||||||
|
/* [0] On vérifie que la ressource existe
|
||||||
|
=========================================================*/
|
||||||
|
if( !file_exists($dirOrFile) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] Si c'est un fichier simple ou un dossier
|
||||||
|
=========================================================*/
|
||||||
|
echo "$dirOrFile, $chown, $chmod\n";
|
||||||
|
|
||||||
|
// On lui donne les droits
|
||||||
|
if( !is_null($chmod) )
|
||||||
|
chmod($dirOrFile, intval($chmod, 8) );
|
||||||
|
|
||||||
|
// Et un propriétaire
|
||||||
|
if( !is_null($chown) ){
|
||||||
|
// On decupde 'owner:group' en un tableau
|
||||||
|
$owners = explode(':', $chown);
|
||||||
|
|
||||||
|
// On définit le propriétaire
|
||||||
|
chown($dirOrFile, $owners[0]);
|
||||||
|
|
||||||
|
// On définit le groupe
|
||||||
|
chgrp($dirOrFile, $owners[1]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Si c'est un dossier
|
||||||
|
=========================================================*/
|
||||||
|
if( is_dir($dirOrFile) ){
|
||||||
|
|
||||||
|
// On récupère son contenu
|
||||||
|
$content = scandir($dirOrFile);
|
||||||
|
|
||||||
|
// On supprime les valeurs inutiles et on met le chemin en absolu
|
||||||
|
foreach($content as $i=>$file){
|
||||||
|
// Si c'est . ou .., on passe au suivant
|
||||||
|
if( $file == '.' || $file == '..' ){
|
||||||
|
unset($content[$i]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sinon, on lance recursivement
|
||||||
|
chmodR( implode('/', array_merge(explode('/', $dirOrFile), array($file))), $chmod, $chown );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* APPLIQUE LES DROITS SUR UN DOSSIER EN FONCTION DE LA CONFIG
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function applyPermissions($parent, $children, $permissions){
|
||||||
|
|
||||||
|
/* [0] Si une permission est définie, on l'applique
|
||||||
|
=========================================================*/
|
||||||
|
/* (0) Si la permission existe et est référencée */
|
||||||
|
if( isset($children['permissions']) && isset($permissions[$children['permissions']]) ){
|
||||||
|
// On récupère les permissions
|
||||||
|
$permission = $permissions[$children['permissions']];
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) Valeur par défaut des propriétaires si n'est pas défini */
|
||||||
|
if( !isset($permission['chown']) )
|
||||||
|
$permission['chown'] = null;
|
||||||
|
|
||||||
|
/* (2) Valeur par défaut des droits si n'est pas défini */
|
||||||
|
if( !isset($permission['chmod']) )
|
||||||
|
$permission['chmod'] = null;
|
||||||
|
|
||||||
|
/* (3) Gestion du .htaccess, si défini et si un dossier */
|
||||||
|
if( isset($permission['.htaccess']) && is_dir($parent) ){
|
||||||
|
|
||||||
|
echo 'creating '."$parent/.htaccess\n";
|
||||||
|
$fht = fopen("$parent/.htaccess", 'w');
|
||||||
|
fwrite($fht, $permission['.htaccess']);
|
||||||
|
fclose($fht);
|
||||||
|
|
||||||
|
/* (4) On applique les permissions sur le .htaccess (par défaut depuis config) */
|
||||||
|
chmodR("$parent/.htaccess", $permissions['.htaccess']['chmod'], $permissions['.htaccess']['chown']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (5) On retire les permissions de la liste des enfants pour la suite */
|
||||||
|
unset($children['permissions']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] Pour chaque enfant, s'il y en a
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On lance récursivement sur tous les enfants */
|
||||||
|
if( is_array($children) )
|
||||||
|
foreach($children as $child=>$subChildren)
|
||||||
|
applyPermissions("$parent/$child", $subChildren, $permissions);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] On charge la configuration
|
||||||
|
=========================================================*/
|
||||||
|
$config = loadConfig();
|
||||||
|
|
||||||
|
// Si erreur de configuration
|
||||||
|
if( is_null($config) ){
|
||||||
|
echo 'Config error';
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Gestion de 'umask' si défini
|
||||||
|
=========================================================*/
|
||||||
|
chdir($config['root']);
|
||||||
|
|
||||||
|
if( isset($config['umask']) )
|
||||||
|
umask( decoct($config['umask']) );
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On traite toute l'arborescence
|
||||||
|
=========================================================*/
|
||||||
|
applyPermissions($config['root'], $config['files'], $config['permissions']);
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,2 @@
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
|
@ -0,0 +1,2 @@
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
Loading…
Reference in New Issue