如何向一个组授予对一组特定命令的执行访问权限,并向另一个组授予另一组命令的执行访问权限

如何向一个组授予对一组特定命令的执行访问权限,并向另一个组授予另一组命令的执行访问权限

假设有一组 shell 命令 {ls、cat、kill}

我想让 A 组中的用户能够执行命令 {ls, cat} 并且让 B 组中的用户能够执行命令 {cat, kill}

如何做到这一点,最好的方法是什么?

我想到了一些解决方案,但它们似乎不是 100% 安全的。

答案1

限制执行命令的可能性的方法之一是受限外壳手册摘录
,其中提到以下内容是不允许或不能执行的:

Changing directories with the cd builtin.
Setting or unsetting the values of the SHELL, PATH, ENV, or BASH_ENV variables.
Specifying command names containing slashes.
Specifying a filename containing a slash as an argument to the . builtin command.
Specifying a filename containing a slash as an argument to the -p option to the hash builtin command.
Importing function definitions from the shell environment at startup.
Parsing the value of SHELLOPTS from the shell environment at startup.
Redirecting output using the ‘>’, ‘>|’, ‘<>’, ‘>&’, ‘&>’, and ‘>>’ redirection operators.
Using the exec builtin to replace the shell with another command.
Adding or deleting builtin commands with the -f and -d options to the enable builtin.
Using the enable builtin command to enable disabled shell builtins.
Specifying the -p option to the command builtin.
Turning off restricted mode with ‘set +r’ or ‘set +o restricted’. 

之后,您可以添加您希望他们可以执行的命令的链接。


也许实现目标的另一条途径应该是指某东西的用途sudo
对于您的情况,您可以编辑sudoers文件(使用visudo)并获得类似以下内容:

User_Alias     USERS_GROUP_A = joe, mike, cedric
User_Alias     USERS_GROUP_B = jude, zoe, cedric
Cmnd_Alias     COMMANDS_GROUP_A = /bin/ls,    /bin/cat, /usr/bin/zip
Cmnd_Alias     COMMANDS_GROUP_B = /bin/kill,  /bin/cat, /usr/bin/zip

USERS_GROUP_A ALL= COMMANDS_GROUP_A
USERS_GROUP_B ALL= COMMANDS_GROUP_B
# users of the group USERS_GROUP_A may run /bin/ls, /bin/cat, and /usr/bin/zip 
# from any machine (ALL).
# users of the group USERS_GROUP_B may run /bin/kill,/bin/cat and /usr/bin/zip
# from any machine (ALL).

笔记:

  • 示例中的问题:通常killshell 内置命令(用 进行检查type kill)。如果你允许用户使用,shell恐怕你找不到办法避免他们使用kill(除非你以适当的方式修改 shell 的源代码并重新编译它……)。
  • 如果您想要为这些用户关闭的命令带有readexecution属性设置为全部(例如ls -l /usr/bin/zip

      -rwxr-xr-x 1 root root      188296 Oct 21  2013 /usr/bin/zip
    

    也许您可以使用一种解决方法,将execution属性限制为仅限所有者及其组sudo chattr o-x /usr/bin/zip

      -rwxr-xr-- 1 root root      188296 Oct 21  2013 /usr/bin/zip
    

    添加新用户(例如酷用户) 到该组(可能用/usr/sbin/nologinas shell),并写入以下两行代替上面的相应内容:

    USERS_GROUP_A ALL=(cooluser) NOPASSWD: COMMANDS_GROUP_A
    USERS_GROUP_B ALL=(cooluser) NOPASSWD: COMMANDS_GROUP_B
    # users of the USERS_GROUP_A may run /bin/ls, /bin/cat and /usr/bin/zip
    # as the user cooluser from any machine (ALL).
    # users of the USERS_GROUP_B may run /bin/kill,/bin/cat and /usr/bin/zip
    # as the user cooluser from any machine (ALL).
    

    关键字NOPASSWD:是为了避免要求输入密码。
    您的用户可以使用以下命令执行命令

    sudo -u cooluser /usr/bin/zip
    

    副作用:其他用户将无法运行该命令,直到您不将他们纳入文件所有者的组中……如果是这样的话root应该不那么安全……

参考:

相关内容