Domanda

Sto mettendo insieme un server basato su Samba come controller di dominio primario e ho riscontrato un grazioso piccolo problema che avrebbe dovuto essere risolto molte volte. Ma un certo numero di ricerche non ha prodotto risultati. Devo essere in grado di rimuovere un utente esistente da un gruppo esistente con uno script da riga di comando. Sembra che il codice utente mi consenta facilmente di aggiungere un utente a un gruppo supplementare con questo comando:

usermod -a -G supgroup1,supgroup2 username

Senza " -a " opzione, se l'utente è attualmente un membro di un gruppo che non è elencato, l'utente verrà rimosso dal gruppo. Qualcuno ha uno script perl (o Python) che consente la specifica di un utente e di un gruppo per la rimozione? Mi manca un comando esistente evidente o una soluzione ben nota? Grazie in anticipo!

Grazie a J.J. per il puntatore al modulo Unix :: Group, che fa parte di Unix-ConfigFile. Sembra che il comando deluser farebbe quello che voglio, ma non era in nessuno dei miei repository esistenti. Sono andato avanti e ho scritto lo script perl usando Unix: Group Module. Ecco la sceneggiatura per il tuo piacere di amministratore di sistema.

#!/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;
È stato utile?

Soluzione

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

Per aggiungere membri al gruppo, utilizzare il comando gpasswd con l'opzione -a e l'id utente che si desidera aggiungere:

gpasswd -a userid mygroup

Rimuovi gli utenti da un gruppo con lo stesso comando, ma un'opzione -d anziché -a:

gpasswd -d userid mygroup

" man gpasswd " per maggiori informazioni ...

Ho cercato secoli per trovare questo. A volte ci vuole troppo sforzo per non reinventare la ruota ...

Altri suggerimenti

Ho trovato Questo per te. Dovrebbe fare quello che ti serve. Per quanto posso dire, Perl non ha alcuna funzione integrata per la rimozione di utenti da un gruppo. Ne ha diversi per visualizzare l'ID di gruppo di un utente o processo.

Sembra che deluser --group [nome gruppo] dovrebbe farlo.

In caso contrario, il comando gruppi elenca i gruppi a cui appartiene un utente. Dovrebbe essere abbastanza semplice trovare un Perl per catturare quell'elenco in un array (o mappa in un hash), eliminare i gruppi indesiderati e restituirli a usermod .

Ecco un piccolo script Perl molto semplice che dovrebbe darti l'elenco dei gruppi di cui hai bisogno:

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

Ecco un piccolo script Perl molto semplice che dovrebbe darti l'elenco dei gruppi di cui hai bisogno:

<*>

L'ottenimento e la sanificazione degli argomenti richiesti viene lasciato come competenza per il lettore.

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

L'ottenimento e la sanificazione degli argomenti richiesti viene lasciato come competenza per il lettore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top