Сценарий Perl или Python для удаления пользователя из группы

Я собираю сервер на основе 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;

Я бы посоветовал использовать Perl :: Critic в этой программе.

Alexandr Ciornii 08.05.2009 19:50

Это общий комментарий или есть что-то очевидное и глупое, что я написал в сценарии?

Loren Charnley 13.05.2009 16:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
2 898
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Похоже, это должен сделать deluser --group [имя группы].

В противном случае команда группы выводит список групп, к которым принадлежит пользователь. Должно быть довольно просто придумать какой-нибудь Perl для захвата этого списка в массив (или карта его в хэш), удаления нежелательных групп (групп) и передачи их обратно в usermod.

На установке Centos 5, с которой я работаю, похоже, что в системе не установлен "deluser". Сейчас ищу в репозиториях. Я начал работать над Perl-скриптом, но, вероятно, мне понадобится час или два, чтобы снова запустить Perl-часть моего мозга.

Loren Charnley 24.09.2008 22:53

Очевидно, deluser специфичен для Debian.

Loren Charnley 25.09.2008 20:27

Я нашел для вас Этот. Он должен делать то, что вам нужно. Насколько я могу судить, Perl не имеет встроенных функций для удаления пользователей из группы. У него есть несколько для просмотра идентификатора группы пользователя или процесса.

Вот очень простой небольшой Perl-скрипт, который должен предоставить вам список групп, которые вам нужны:

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

Получение и обработка требуемых аргументов оставлено для читателя.

Ответ принят как подходящий

Веб-ссылка: http://www.ibm.com/developerworks/linux/library/l-roadmap4/

Чтобы добавить участников в группу, используйте команду gpasswd с переключателем -a и идентификатором пользователя, которого вы хотите добавить:

gpasswd -a идентификатор пользователя mygroup

Удалите пользователей из группы с помощью той же команды, но с ключом -d, а не -a:

gpasswd -d идентификатор пользователя mygroup

"man gpasswd" для получения дополнительной информации ...

Я долго искал, чтобы найти это. Иногда нужно слишком много усилий, чтобы не изобретать велосипед ...

Дэйв, Потрясающе - кто бы мог подумать, что команда будет выглядеть как утилита паролей ... Спасибо! Лорен

Loren Charnley 13.02.2009 23:52

Другие вопросы по теме