在语句中列出组集case(对于几组组来说可以)

在语句中列出组集case(对于几组组来说可以)

有没有办法确保当用户被添加到系统上的权限组时,该用户会自动添加到一个或多个其他定义的组?

例如,将用户添加到 创建的组会将该用户添加到、和netadmin组。(这只是假设情况)www-datatomcatsambashareftp

另一个示例组vmadmin可以将用户添加到组kvmlibvirtvboxusers

我知道不能将一个组添加到另一个组中,但我想避免为不同的目录和文件设置和维护 ACL。

答案1

我认为没有内置的方法可以做到这一点。

但是有一个非常简单的解决方案:您可以添加一个函数将~/.bashrc整个任务包装成一个命令。

在语句中列出组集case(对于几组组来说可以)

function add_user {
    [ ! -z "$1" -a ! -z "$2" ] || return
    case "$1" in
    netadmin)
        groups=(netadmin www-data tomcat sambashare ftp)
        ;;
    vmadmin)
        groups=(kvm libvirt vboxusers)
        ;;
    *)
        printf "Group '%s' is not listed.\n" "$1"
        return
    esac
    printf "Adding '%s' to group '%s'...\n" "$2" "$1"
    usermod -aG ${groups[@]} "$1"
}

此后,运行 eg将add_user netadmin user添加usernetadminwww-datatomcat和,运行 eg将添加到、和。sambashareftpadd_user vmadmin useruserkvmlibvirtvboxusers

添加其他组集就像在条目case之后vmadmin*条目之前向语句中添加其他条目一样简单:

foo)
    groups=(bar foobar raboof)
    ;;

列出外部配置文件中的组集

config创建一个名为的文件,~/内容如下:

netadmin,netadmin,www-data,tomcat,sambashare,ftp
vmadmin,kvm,libvirt,vboxusers
  • 第一个字段标识组集的名称
  • 第一个字段之后的字段标识用户要添加的组
function add_user {
    [ ! -z "$1" -a ! -z "$2" ] || exit
    groups=( $(awk -F , -v group="$1" '$1==group {$1=""; print; exit}' config) )
    if [ ${#groups} -eq 0 ]; then
        printf "Group '%s' is not listed.\n" "$1"
        return
    fi
    printf "Adding '%s' to group '%s'...\n" "$2" "$1"
    usermod -aG ${groups[@]} "$1"
}

此后,运行 eg将add_user netadmin user添加usernetadminwww-datatomcat和,运行 eg将添加到、和。sambashareftpadd_user vmadmin useruserkvmlibvirtvboxusers

添加其他组集就像添加另一个条目一样简单~/config

foo,bar,foobar,raboof

相关内容