Question

Je suis en train de mettre en place un serveur basé sur Samba en tant que contrôleur de domaine principal et j'ai rencontré un petit problème mignon qui aurait dû être résolu à maintes reprises. Mais un certain nombre de recherches n’ont donné aucun résultat. Je dois pouvoir supprimer un utilisateur existant d'un groupe existant avec un script de ligne de commande. Il semble que l’usermod me permette facilement d’ajouter un utilisateur à un groupe supplémentaire avec cette commande:

usermod -a -G supgroup1,supgroup2 username

Sans les " -a " Si l'utilisateur est actuellement membre d'un groupe qui ne figure pas dans la liste, il sera supprimé du groupe. Quelqu'un a-t-il un script Perl (ou Python) permettant de spécifier un utilisateur et un groupe à supprimer? Me manque-t-il d'une commande existante évidente ou d'une solution bien connue? Merci d'avance!

Merci à J.J. pour le pointeur sur le module Unix :: Group, qui fait partie de Unix-ConfigFile. Il semble que la commande deluser ferait ce que je veux, mais ne figurait dans aucun de mes référentiels existants. Je suis allé de l'avant et j'ai écrit le script Perl en utilisant Unix: Group Module. Voici le script pour votre plus grand plaisir.

#!/usr/bin/perl
#
# Usage:   removegroup.pl login group
# Purpose: Removes a user from a group while retaining current primary and
#          supplementary groups.
# Notes:   There is a Debian specific utility that can do this called deluser,
#          but I did not want any cross-distribution dependencies
#
# Date:   25 September 2008

# Validate Arguments (correct number, format etc.)
if ( ($#ARGV < 1) || (2 < $#ARGV) ) {
  print "\nUsage: removegroup.pl login group\n\n";
  print "EXIT VALUES\n";
  print "     The removeuser.pl script exits with the following values:\n\n";
  print "     0 success\n\n";
  print "     1 Invalid number of arguments\n\n";
  print "     2 Login or Group name supplied greater than 16 characters\n\n";
  print "     3 Login and/or Group name contains invalid characters\n\n";
  exit 1;
}

# Check for well formed group and login names
if ((16 < length($ARGV[0])) ||(16 < length($ARGV[1])))
{
  print "Usage: removegroup.pl login group\n";
  print "ERROR: Login and Group names must be less than 16 Characters\n";
  exit 2;
}

if ( ( $ARGV[0] !~ m{^[a-z_]+[a-z0-9_-]*$}) || ( $ARGV[0] !~ m{^[a-z_]+[a-z0-9_-]*$} ) )
{
  print "Usage: removegroup.pl login group\n";
  print "ERROR: Login and/or Group name contains invalid characters\n";
  exit 3;
}

# Set some variables for readability
$login=$ARGV[0];
$group=$ARGV[1];

# Requires the GroupFile interface from perl-Unix-Configfile
use Unix::GroupFile;

$grp = new Unix::GroupFile "/etc/group";
$grp->remove_user("$group", "$login");
$grp->commit();
undef $grp;
exit 0;
Était-ce utile?

La solution

Lien Web: http://www.ibm.com/developerworks / linux / library / l-roadmap4 /

Pour ajouter des membres au groupe, utilisez la commande gpasswd avec le commutateur -a et l'identifiant de l'utilisateur que vous souhaitez ajouter:

gpasswd -a ID utilisateur mon groupe

Supprimer les utilisateurs d'un groupe avec la même commande, mais un commutateur -d plutôt que -a:

gpasswd -d ID utilisateur mon groupe

"man gpasswd" pour plus d'informations ...

J'ai cherché pendant des années pour trouver ceci. Parfois, il faut trop d'efforts pour ne pas réinventer la roue ...

Autres conseils

J'ai trouvé ceci pour vous. Il devrait faire ce dont vous avez besoin. Autant que je sache, Perl ne possède aucune fonction intégrée pour supprimer des utilisateurs d'un groupe. Il en existe plusieurs pour voir l'identifiant de groupe d'un utilisateur ou d'un processus.

Il semble que deluser --group [nomgroupe] devrait le faire.

Sinon, la commande groupes répertorie les groupes auxquels un utilisateur appartient. Il devrait être assez simple de trouver du Perl pour capturer cette liste dans un tableau (ou la mapper dans un hachage), supprimer le (s) groupe (s) indésirable (s) et le renvoyer à usermod .

Voici un petit script très simple en Perl qui devrait vous donner la liste des groupes dont vous avez besoin:

my $user = 'user';
my $groupNoMore = 'somegroup';
my $groups = join ',', grep { 

Voici un petit script très simple en Perl qui devrait vous donner la liste des groupes dont vous avez besoin:

<*>

L'obtention et la désinfection des arguments requis sont conservés comme une exécution pour le lecteur.

ne $groupNoMore } split /\s/, `groups $user`;

L'obtention et la désinfection des arguments requis sont conservés comme une exécution pour le lecteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top