私は、Samba ベースのサーバーをプライマリ ドメイン コントローラーとしてまとめようとしていますが、何度も解決しなければならない小さな問題に遭遇しました。しかし、多くの検索では結果が得られませんでした。コマンド ライン スクリプトを使用して、既存のグループから既存のユーザーを削除できるようにする必要があります。usermod を使用すると、次のコマンドでユーザーを補助グループに簡単に追加できるようです。
usermod -a -G supgroup1,supgroup2 username
「-a」オプションを指定しないと、ユーザーが現在リストされていないグループのメンバーである場合、そのユーザーはグループから削除されます。削除するユーザーとグループを指定できる perl (または Python) スクリプトを持っている人はいますか? 明らかな既存のコマンド、またはこれに対するよく知られた解決策がありませんか? 前もって感謝します!
Unix-ConfigFile の一部である Unix::Group モジュールへのポインタを提供してくれた JJ に感謝します。コマンド 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;