Как предоставить одной группе право на выполнение определенного набора команд, а другой группе — другой набор

Как предоставить одной группе право на выполнение определенного набора команд, а другой группе — другой набор

Допустим, есть набор команд оболочки {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).

Примечания:

  • Проблема в примере: обычно killэтовстроенная команда оболочки(проверьте это с помощью type kill). Если вы позволите пользователям иметь shellбоюсь, вы не найдете способа избежать их использования kill(если только вы не измените исходный код оболочки надлежащим образом и не перекомпилируете его...).
  • Если команды, которые вы хотите закрыть для этих пользователей, имеют атрибут readи executionустановлены для всех (например 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/nologin) shell, и написав следующие 2 строки вместо соответствующих вышеприведенных:

    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должно быть не так уж и безопасно...

Использованная литература:

Связанный контент