Я собираю сервер на базе Samba в качестве основного контроллера домена, и столкнулся с милой маленькой проблемой, которую следовало много раз решать Но ряд поисков не дал результата. Мне нужно иметь возможность удалить существующего пользователя из существующей группы с помощью сценария командной строки. Похоже, что usermod легко позволяет мне добавить пользователя в дополнительную группу с помощью этой команды:
usermod -a -G supgroup1,supgroup2 username
Без опции "-a", если пользователь в настоящее время является членом группы, которой нет в списке, он будет удален из группы. У кого-нибудь есть Perl (или Python) скрипт, который позволяет спецификацию пользователя и группы для удаления? Я пропускаю очевидную существующую команду или известное решение? Заранее спасибо!
Благодаря J.J. для указателя на модуль Unix :: Group, который является частью Unix-ConfigFile. Похоже, команда deluser будет делать то, что я хочу, но не было ни в одном из моих существующих репозиториев. Я пошел дальше и написал скрипт на Perl, используя модуль Unix: Group. Вот сценарий для вашего системного удовольствия.
#!/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;