Frage

Ich stelle zusammen einen Samba-Server als Primary Domain Controller, und lief in ein nettes kleines Problem, das viele Male gelöst werden soll. Aber eine Reihe von Such brachte kein Ergebnis. Ich muss in der Lage, einen vorhandenen Benutzer aus einer bestehenden Gruppe mit einem Kommandozeilen-Skript zu entfernen. Es scheint, dass die usermod ermöglicht es mich leicht einen Benutzer zu einer zusätzlichen Gruppe mit diesem Befehl hinzufügen:

usermod -a -G supgroup1,supgroup2 username

Ohne die „-a“ Option, wenn der Benutzer ist Mitglied einer Gruppe, die nicht aufgeführt ist, wird der Benutzer aus der Gruppe entfernt werden. Hat jemand ein Perl (oder Python) Skript, das die Spezifikation eines Benutzers und Gruppe für die Entfernung erlaubt? Fehle ich einen offensichtlichen existierenden Befehl oder bekannte Lösung forthis? Vielen Dank im Voraus!

Dank J.J. für den Zeiger auf das Gruppenmodul :: Unix, der Teil der Unix-ConfigFile ist. Es sieht aus wie der Befehl deluser tun würde, was ich will, aber nicht in jedem meiner bestehenden Repositories. Ich ging weiter und schrieb den Perl-Skript der Unix mit: Gruppe Modul. Hier ist das Skript für Ihre sysadmining Vergnügen.

#!/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;
War es hilfreich?

Lösung

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

Um Mitglieder zu der Gruppe hinzuzufügen, verwenden Sie den Befehl gpasswd mit dem -a-Schalter und der Benutzer-ID Sie hinzufügen möchten:

gpasswd -a Benutzer-ID mygroup

Entfernen von Benutzern aus einer Gruppe mit dem gleichen Befehl, sondern eine Option -d anstatt -a:

gpasswd -d userid mygroup

"Mann gpasswd" für weitere Informationen ...

Ich suchte nach Alter diese zu finden. Manchmal dauert es zu viel Aufwand das Rad nicht neu zu erfinden ...

Andere Tipps

Ich fand Diese für Sie. Es sollte das tun, was Sie brauchen. Soweit ich sagen kann, Perl hat keine zum Entfernen von Benutzern aus einer Gruppe in Funktionen eingebaut. Es hat mehrere der Gruppen-ID eines Benutzers oder Prozess für das Sehen.

Es sieht aus wie deluser --group [Gruppenname] sollte es tun.

Wenn nicht, werden die Gruppen Befehl listet die Gruppen, die ein Benutzer gehört. Es sollte ziemlich einfach sein, mit einigen Perl zu kommen, dass die Liste in ein Array zu erfassen (oder Karte in ein Hash), löschen Sie die unerwünschte Gruppe (n), und Futtermittel, die zurück zu usermod .

Hier ist ein sehr einfacher kleiner Perl-Skript, das die Liste der Gruppen geben sollen Sie brauchen:

my $user = 'user';
my $groupNoMore = 'somegroup';
my $groups = join ',', grep { $_ ne $groupNoMore } split /\s/, `groups $user`;

Ankommen und die erforderlichen Argumente Hygienisierung wird als execrcise für die Leser überlassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top