You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
8.2 KiB
233 lines
8.2 KiB
#!/usr/bin/perl -w
|
|
use strict;
|
|
use esmith::AccountsDB;
|
|
use esmith::ConfigDB;
|
|
use POSIX qw(strftime);
|
|
|
|
my $date = strftime "%d/%m/%Y %H:%M", localtime;
|
|
my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database";
|
|
my $c = esmith::ConfigDB->open_ro() || die "Couldn't open the configuration database";
|
|
|
|
sub uniq {
|
|
my %seen;
|
|
grep !$seen{$_}++, @_;
|
|
}
|
|
|
|
|
|
print "\n====== Audit des permissions ======\n\n";
|
|
|
|
print "===== État des permissions au $date =====\n\n";
|
|
|
|
print "<note>Les comptes verrouillés ont été mis en évidence **<color #c3c3c3>en gris</color>**.</note>\n\n";
|
|
|
|
print "==== Autorisations d'accès des dossiers partagés ====\n\n";
|
|
|
|
print "^ Dossiers partagés ^ Accès en écriture ^ Accès en lecture seule ^" . "\n";
|
|
|
|
# Pour chaques Share Folder :
|
|
foreach my $share ($a->get_all_by_prop(type => 'share')) {
|
|
my $name = $share->key;
|
|
my $desc = $share->prop('Name');
|
|
my $wu = $share->prop('WriteUsers');
|
|
my $wg = $share->prop('WriteGroups');
|
|
my $ru = $share->prop('ReadUsers');
|
|
my $rg = $share->prop('ReadGroups');
|
|
my @list_rw;
|
|
my @list_ro;
|
|
|
|
# Pour chaque groupe ayant un accès RW :
|
|
foreach my $wgroup (split(/,/, $wg)) {
|
|
my $rec_wg = $a->get($wgroup);
|
|
my $wg_members = $rec_wg->prop('Members');
|
|
my @acces_members_rw = split(/,/, $wg_members);
|
|
# Coloration en gris des comptes verrouillés :
|
|
foreach my $user_rw (@acces_members_rw) {
|
|
my $urw = $a->get($user_rw);
|
|
my $lock_rw = $urw->prop('PasswordSet');
|
|
if ($lock_rw eq 'no') {
|
|
# Injection des utilisateurs verrouillés des groupes RW dans la liste :
|
|
push @list_rw, "<color #c3c3c3>" . $user_rw . "</color>";
|
|
}
|
|
else {
|
|
# Injection des utilisateurs actifs des groupes RW dans la liste :
|
|
push @list_rw, $user_rw;
|
|
}
|
|
}
|
|
}
|
|
|
|
# Pour chaque utilisateur ayant un accès RW :
|
|
foreach (split(/,/, $wu)) {
|
|
my @acces_members_rw = split(/,/, $wu);
|
|
# Coloration en gris des comptes verrouillés :
|
|
foreach my $user_rw (@acces_members_rw) {
|
|
my $urw = $a->get($user_rw);
|
|
my $lock_rw = $urw->prop('PasswordSet');
|
|
if ($lock_rw eq 'no') {
|
|
# Injection des utilisateurs verrouillés des groupes RW dans la liste :
|
|
push @list_rw, "<color #c3c3c3>" . $user_rw . "</color>";
|
|
}
|
|
else {
|
|
# Injection des utilisateurs actifs des groupes RW dans la liste :
|
|
push @list_rw, $user_rw;
|
|
}
|
|
}
|
|
}
|
|
|
|
# Pour chaque groupe ayant un accès RO :
|
|
foreach my $rgroup (split(/,/, $rg)) {
|
|
my $rec_rg = $a->get($rgroup);
|
|
my $rg_members = $rec_rg->prop('Members');
|
|
my @acces_members_ro = split(/,/, $rg_members);
|
|
# Coloration en gris des comptes verrouillés :
|
|
foreach my $user_ro (@acces_members_ro) {
|
|
my $uro = $a->get($user_ro);
|
|
my $lock_ro = $uro->prop('PasswordSet');
|
|
if ($lock_ro eq 'no') {
|
|
# Injection des utilisateurs verrouillés des groupes RO dans la liste :
|
|
push @list_ro, "<color #c3c3c3>" . $user_ro . "</color>";
|
|
}
|
|
else {
|
|
# Injection des utilisateurs actifs des groupes RO dans la liste :
|
|
push @list_ro, $user_ro;
|
|
}
|
|
}
|
|
}
|
|
|
|
# Pour chaque utilisateur ayant un accès RO :
|
|
foreach (split(/,/, $ru)) {
|
|
my @acces_members_ro = split(/,/, $ru);
|
|
# Coloration en gris des comptes verrouillés :
|
|
foreach my $user_ro (@acces_members_ro) {
|
|
my $uro = $a->get($user_ro);
|
|
my $lock_ro = $uro->prop('PasswordSet');
|
|
if ($lock_ro eq 'no') {
|
|
# Injection des utilisateurs verrouillés des groupes RO dans la liste :
|
|
push @list_ro, "<color #c3c3c3>" . $user_ro . "</color>";
|
|
}
|
|
else {
|
|
# Injection des utilisateurs actifs des groupes RO dans la liste :
|
|
push @list_ro, $user_ro;
|
|
}
|
|
}
|
|
}
|
|
|
|
# Affichage du resultat sous forme d'un tableau avec retrait des doublons :
|
|
my @list_rw_uniq = uniq(@list_rw);
|
|
my @list_ro_uniq = uniq(@list_ro);
|
|
|
|
# Suppression de l'utilisateur "admin" de la liste RW :
|
|
foreach my $u (@list_rw_uniq) { @list_rw_uniq = grep { $_ ne "admin" } @list_rw_uniq; }
|
|
# Suppression de l'utilisateur "admin" de la liste RO :
|
|
foreach my $u (@list_ro_uniq) { @list_ro_uniq = grep { $_ ne "admin" } @list_ro_uniq; }
|
|
# Si l'utilisateur est déjà présent dans la liste RW, alors on le supprime de la liste RO :
|
|
foreach my $u (@list_rw_uniq) { @list_ro_uniq = grep { $_ ne $u } @list_ro_uniq; }
|
|
|
|
print "^ " . $name . " (" . $desc . ") | ";
|
|
foreach (@list_rw_uniq) { print "$_" . "\\\\ "; }
|
|
print " | ";
|
|
foreach (@list_ro_uniq) { print "$_" . "\\\\ "; }
|
|
print " |" . "\n";
|
|
}
|
|
|
|
print "\n\n==== Autorisation d'accès des utilisateurs ====\n\n";
|
|
print "^ Utilisateur ^ Commentaires ^ Accès en écritures ^ Accès en lecture seul ^" . "\n";
|
|
|
|
# Pour chaque utilisateur :
|
|
my @users = $a->users;
|
|
foreach my $users (@users) {
|
|
print "^ ";
|
|
# Coloration en gris des comptes verrouillés :
|
|
if ($users->prop('PasswordSet') eq 'no') {
|
|
# Affichage de l'utilisateur verrouillé :
|
|
print "<color #c3c3c3>" . $users->key . "</color>" . "(" . $users->prop('FirstName') . " " . $users->prop('LastName') . ")";
|
|
}
|
|
else {
|
|
# Affichage de l'utilisateur actif :
|
|
print $users->key . "(" . $users->prop('FirstName') . " " . $users->prop('LastName') . ")";
|
|
}
|
|
print " | ";
|
|
# Affichage des commentaires :
|
|
print "Expiration du compte : " . $users->prop('ExpireLockOn') . "\\\\ ";
|
|
print "Nombre de mail : ";
|
|
print " | ";
|
|
# Affichage des accès RW :
|
|
# Pour chaques Share Folder :
|
|
foreach my $share ($a->get_all_by_prop(type => 'share')) {
|
|
my $name = $share->key;
|
|
my $desc = $share->prop('Name');
|
|
my $wu = $share->prop('WriteUsers');
|
|
my $wg = $share->prop('WriteGroups');
|
|
my @list_sf_rw;
|
|
|
|
# Pour chaque groupe ayant un accès RW :
|
|
foreach my $wgroup (split(/,/, $wg)) {
|
|
my $rec_wg = $a->get($wgroup);
|
|
my $wg_members = $rec_wg->prop('Members');
|
|
my @acces_members_rw = split(/,/, $wg_members);
|
|
foreach my $user_rw (@acces_members_rw) {
|
|
# Si l'utilisateur du groupe ayant un accès RW a ce Share Folder correspond à l'utilisateur :
|
|
if ($user_rw eq $users->key) {
|
|
# Injection du nom du Share Folder dans la liste :
|
|
push @list_sf_rw, $name . " (" . $desc . ")";
|
|
}
|
|
}
|
|
}
|
|
|
|
# Pour chaque utilisateur ayant un accès RW :
|
|
foreach (split(/,/, $wu)) {
|
|
my @acces_members_rw = split(/,/, $wu);
|
|
foreach my $user_rw (@acces_members_rw) {
|
|
# Si l'utilisateur ayant un accès RW a ce Share Folder correspond à l'utilisateur :
|
|
if ($user_rw eq $users->key) {
|
|
# Injection du nom du Share Folder dans la liste :
|
|
push @list_sf_rw, $name . " (" . $desc . ")";
|
|
}
|
|
}
|
|
}
|
|
# Affiche du resultat :
|
|
@list_sf_rw = uniq(@list_sf_rw);
|
|
foreach (@list_sf_rw) { print "$_" . "\\\\ "; }
|
|
}
|
|
print " | ";
|
|
# Affichage des accès RO :
|
|
# Pour chaques Share Folder :
|
|
foreach my $share ($a->get_all_by_prop(type => 'share')) {
|
|
my $name = $share->key;
|
|
my $desc = $share->prop('Name');
|
|
my $ru = $share->prop('ReadUsers');
|
|
my $rg = $share->prop('ReadGroups');
|
|
my @list_sf_ro;
|
|
|
|
# Pour chaque groupe ayant un accès RO :
|
|
foreach my $rgroup (split(/,/, $rg)) {
|
|
my $rec_rg = $a->get($rgroup);
|
|
my $rg_members = $rec_rg->prop('Members');
|
|
my @acces_members_ro = split(/,/, $rg_members);
|
|
foreach my $user_ro (@acces_members_ro) {
|
|
# Si l'utilisateur du groupe ayant un accès RO a ce Share Folder correspond à l'utilisateur :
|
|
if ($user_ro eq $users->key) {
|
|
# Injection du nom du Share Folder dans la liste :
|
|
push @list_sf_ro, $name . " (" . $desc . ")";
|
|
}
|
|
}
|
|
}
|
|
|
|
# Pour chaque utilisateur ayant un accès RO :
|
|
foreach (split(/,/, $ru)) {
|
|
my @acces_members_ro = split(/,/, $ru);
|
|
foreach my $user_ro (@acces_members_ro) {
|
|
# Si l'utilisateur ayant un accès RO a ce Share Folder correspond à l'utilisateur :
|
|
if ($user_ro eq $users->key) {
|
|
# Injection du nom du Share Folder dans la liste :
|
|
push @list_sf_ro, $name . " (" . $desc . ")";
|
|
}
|
|
}
|
|
}
|
|
# Affiche du resultat :
|
|
@list_sf_ro = uniq(@list_sf_ro);
|
|
foreach (@list_sf_ro) { print "$_" . "\\\\ "; }
|
|
}
|
|
print " |\n";
|
|
}
|
|
|
|
print "\n\n\n";
|
|
|