3

私は、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;
4

4 に答える 4

2

Web リンク: http://www.ibm.com/developerworks/linux/library/l-roadmap4/

グループにメンバーを追加するには、gpasswd コマンドに -a スイッチと追加するユーザー ID を指定して使用します。

gpasswd - ユーザー ID mygroup

同じコマンドを使用してグループからユーザーを削除しますが、-a ではなく -d スイッチを使用します。

gpasswd -d ユーザー ID mygroup

詳細については、「man gpasswd」...

私はこれを見つけるために何年も探しました。車輪を再発明しないようにするには、多大な労力が必要な場合があります...

于 2009-01-20T18:42:40.460 に答える
2

私はあなたのためにこれを見つけました。それはあなたが必要とすることをするべきです。私が知る限り、Perl にはグループからユーザーを削除する組み込み関数はありません。ユーザーまたはプロセスのグループIDを確認するためのいくつかがあります。

于 2008-09-24T19:15:32.600 に答える
1

以下は、必要なグループのリストを提供する非常に単純な小さな Perl スクリプトです。

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

必要な引数の取得とサニタイズは、読者の実行に委ねられています。

于 2008-09-24T19:54:07.470 に答える
1

deluser --group [グループ名]で実行できるようです。

そうでない場合、groupsコマンドは、ユーザーが属するグループを一覧表示します。そのリストを配列にキャプチャ (またはハッシュにマップ) し、不要なグループを削除し、それをusermodにフィードバックする Perl を考え出すのはかなり簡単です。

于 2008-09-24T18:42:35.317 に答える