Perl或者Python脚本可将用户从组中删除
我将一台基于Samba的服务器作为主域控制器,并遇到了一个可爱的小问题,应该已经解决了许多遍了。但是许多搜索都没有得出结果。我需要能够使用命令行脚本从现有组中删除现有用户。似乎usermod可以轻松地允许我使用以下命令将用户添加到补充组:
usermod -a -G supgroup1,supgroup2 username
如果没有" -a"选项,则如果该用户当前是未列出的组的成员,则该用户将从该组中删除。是否有人有perl(或者Python)脚本,该脚本允许指定要删除的用户和组?我是否错过了明显的现有命令或者为此而闻名的解决方案?提前致谢!
感谢J.J.指向Unix :: Group模块的指针,该模块是Unix-ConfigFile的一部分。看起来命令deluser可以执行我想要的操作,但不在我现有的任何存储库中。我继续使用Unix:Group模块编写了perl脚本。这是系统管理乐趣的脚本。
#!/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;
解决方案
看起来deluser --group [groupname]应该这样做。
如果不是,则groups命令会列出用户所属的组。提出一些Perl来将列表捕获到数组中(或者将其映射到哈希中),删除不需要的组并将其反馈给usermod应该是相当简单的。
我为我们找到了这个。它应该做我们需要的。据我所知,Perl没有任何内置功能可将用户从组中删除。它具有多个用于查看用户或者进程的组ID。
这是一个非常简单的Perl小脚本,它应该为我们提供所需的组列表:
my $user = 'user'; my $groupNoMore = 'somegroup'; my $groups = join ',', grep { $_ ne $groupNoMore } split /\s/, `groups $user`;
获取和清除必需的参数留给读者执行。
Web链接:http://www.ibm.com/developerworks/linux/library/l-roadmap4/
要将成员添加到组,请使用带有-a开关的gpasswd命令和要添加的用户ID:
gpasswd-一个用户id mygroup
使用相同的命令从组中删除用户,但是使用-d开关而不是-a:
gpasswd -d userid mygroup
" man gpasswd"了解更多信息...
我找了很久才找到这个。有时要花费太多的精力才能重新发明轮子。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。