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
|
||||
ErrorDocument 403 view/error.php
|
||||
ErrorDocument 403 /index.php
|
||||
|
||||
|
||||
# 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