Délégation de droits sur un service d’impression

Dans l’article d’aujourd’hui nous allons voir comment déléguer à un service desk le droit de purger les files d’impressions ainsi que le redémarrage et la purge du spooleur d’impression à distance.

1 – Création d’un groupe

Tout d’abords nous allons créer un groupe AD ou local sur le serveur dans le quel nous allons ajouter les utilisateurs du service desk. J’ai fais le choix de la création d’un groupe local sur le serveur que j’ai nommé : Print_server_Servicedesk_Rights

2 – Autoriser le groupe à gérer les documents d’une imprimante

Ensuite nous allons donner les droits à ce groupe de gérer les documents, sur une imprimante que nous allons appeler sourceprinter :

3 – Copie des droits de cette imprimantes sur les autres imprimantes du serveur

Nous allons ensuite copier les droits de cette imprimante sur toutes les imprimantes de notre serveur.
pour cela nous allons démarrer sur le serveur un invite de commande Powershell en tant qu’administrateur du serveur afin d’exécuter le script suivant :

#copie des droits d'une imprimante dans une variable
$security = get-printer "Sourceprinter" -full

#liste toutes les imprimantes du serveur et copie les droits dessus
get-printer * -computer printservername | Foreach-Object {set-printer $_.name -computer printservername -PermissionSDDL $security.PermissionSDDL}

4 – Ajout des droits de redémarrage du spooler d’impression

Dans certains cas il arrive que l’on ne peut pas purger la file d’impression de cette manière. Il faut donc pouvoir redémarrer le spooler d’impression.
Nous allons donc ajouter a ce même groupe le droit de démarrer/arrêter/redémarrer le spooler d’impression sur le serveur
Pour cela nous allons utiliser l’outil microsoft SubInACL téléchargeable ici

Grace à cet outil nous pouvons tout d’abords vérifier les droits sur notre service de spooler d’impression avec la commande suivante :

subunacl.exe /verbose=1 /service spooler /display

Commande qui doit vous retourner l’état suivant :

On peut alors ajouter les droits du groupe sur le service avec la commande suivante :

subunacl.exe /verbose=1 /service spooler /grant="Print_server_Servicedesk_Rights"=LQSTOP

si cela fonctionne correctement la commande doit vous retourner cela :

Voici une liste des argument pour les droits à un service.

Service:

F : Full Control
R : Generic Read
W : Generic Write
X : Generic eXecute
L : Read controL
Q : Query Service Configuration
S : Query Service Status
E : Enumerate Dependent Services
C : Service Change Configuration
T : Start Service
O : Stop Service
P : Pause/Continue Service
I : Interrogate Service
U : Service User-Defined Control Commands

5 – Autoriser le groupe a purger les documents du spooler à distance

En partageant le dossier c:\windows\System32\spool\Printers de votre serveur aux utilisateurs du groupe en lecture écriture sous le nom Printers$ vous pouvez exécuter le script suivant depuis un pc distant afin d’arrêter le service spooler du serveur, purger les documents en attente et relancer le service.

6 – Script pour automatiser la purge des files d’impression à distance

@echo off
echo Stopping print spooler.
echo.
sc \\printservername stop spooler
echo deleting temp files.
echo.
del \\printservername\Printers$\*.* /q
echo Starting print spooler.
echo.
sc \\printservername start spooler

7 – Redémarrage du spooler à distance via MMC

Si vous souhaitez utiliser une console MMC pour le redémarrage du spooler cela n’est pas possible car vous obtenez le message accès refusé lors de l’affichage de la liste des services.
Pour cela nous allons ajouter les droits au groupe de lister les services.

a) tout d’abord il faut récupérer le SID du groupe en question. Pour cela nous allons utiliser un outils de sysinternal PSGETSID téléchargeable ici

pour récupérer le SID du groupe nous allons exécuter la commande suivante :

psgetsid.exe Print_server_servicedesk_rights

SID for Servername\Print_server_Servicedesk_rights:
S-1-5-21-4030924385-2145503747-4333381931-1001

b) nous allons ensuite récupérer les droits appliqués sur le service manager avec la commande suivante :

sc sdshow scmanager

qui va nous retourner la valeur suivante si aucune modification n’a été faite :

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

c) Nous allons maintenant copier la chaine (A;;CCLCRPRC;;;IU) et remplacer UI par le SID de notre groupe. pour nous donner
(A;;CCLCRPRC;;;S-1-5-21-4030924385-2145503747-4333381931-1001).

d) nous intégreons ensuite cette chaine dans la chaine SDDL initiale avant le S: pour obtenir :

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CCLCRPRC;;;S-1-5-21-4030924385-2145503747-4333381931-1001)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

e) il suffit ensuite d’enregistrer les droits sur le serveur avec la commande suivante :

sc sdset scmanager "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)<strong>(A;;CCLCRPRC;;;S-1-5-21-4030924385-2145503747-4333381931-1001)</strong>S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"

En cas de succès vous aurez le message :

[SC] SetServiceObjectSecurity SUCCESS

 


En cas d’erreur sur cette dernière étape, les valeurs sont enregistrés dans le registre dans la clé : HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\Security
Il suffit alors de supprimer toutes les valeurs présentes dans la clé et de redémarrer le serveur pour prendre en compte les modifications.

 

Votre personnel d’assistance peut maintenant purger les documents, arrêter le spooler lister les services, démarrer le spooler, et supprimer les fichiers dans le spooler

 

 

A propos de Christophe 35 Articles
Passionné d'informatique et de nouvelles technologies depuis mon plus jeune âge je souhaite partager ici quelques recherches que j'ai effectués.

Soyez le premier à commenter

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*