Como conceder acesso de execução a um conjunto específico de comandos para um grupo e outro para outro grupo

2

Digamos que há um conjunto de comandos shell {ls, cat, kill}

Eu quero permitir que os usuários do grupo A possam executar os comandos {ls, cat} E os usuários do grupo B poderão executar os comandos {cat, kill}

Como fazer isso, quais são as melhores abordagens?

Pensei em algumas soluções, mas elas não parecem 100% seguras.

    
por Cedric 22.01.2015 / 11:32

1 resposta

0

Uma das formas de restringir a possibilidade de executar comandos é o shell restrito .
Trecho do manual, onde se diz que os seguintes itens não são permitidos ou não são executados:

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’. 

Depois disso, você pode adicionar um link para o comando que deseja executar.

Talvez outro caminho para o seu objetivo seja através do uso de sudo .
No seu caso, você pode editar sudoers file (com visudo ) e obter algo semelhante a:

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).

Notas:

  • Um problema no exemplo: geralmente kill é um comando interno do shell (verifique com type kill ). Se você permitir que os usuários tenham um shell , temo que você não encontre uma maneira de evitá-los usando kill (a menos que você modifique o código-fonte do shell de maneira adequada e o recompile ... ).
  • Se os comandos que você deseja fechar para esses usuários estiverem com o atributo read e execution definido para todos (por exemplo, ls -l /usr/bin/zip )

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

    talvez você possa usar uma solução alternativa, restringindo o atributo execution apenas ao proprietário e ao grupo dele sudo chattr o-x /usr/bin/zip ,

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

    adicionando um novo usuário (por exemplo, cooluser ) a esse grupo (talvez com /usr/sbin/nologin como shell ) e escrevendo as seguintes 2 linhas em vez das correspondentes acima:

    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).
    

    A palavra-chave NOPASSWD: é para evitar a solicitação da senha.
    Seus usuários podem executar os comandos com

    sudo -u cooluser /usr/bin/zip
    

    Efeito colateral : outros usuários não poderão executar esse comando até você não incluí-los no grupo do proprietário do arquivo ... e se for root deve ser não é tão seguro ...

Referências:

por 22.01.2015 / 15:28