Bloquear o comando particular no Linux para usuário específico

26

Como bloquear o comando, digamos mkdir para um usuário específico?

O que eu fiz acabou de criar função somente leitura e armazenar no perfil de usuários ~/.bashrc

/bin/mkdir() {
        echo "mkdir command not allow for you"

}

mkdir() {
        echo "mkdir command not allow for you"

}
./mkdir() {

        echo "mkdir command not allow for you"
}

readonly -f /bin/mkdir
readonly -f mkdir
readonly -f ./mkdir

Teste:

rahul@ubuntu:~$ cd /bin/
rahul@ubuntu:/bin$ ./mkdir /home/rahul/ggg
mkdir command not allow for you
rahul@ubuntu:/bin$ cd
rahul@ubuntu:~$ mkdir testing
mkdir command not allow for you
rahul@ubuntu:~$ /bin/mkdir testing
mkdir command not allow for you

Então, minha pergunta é: Qual deve ser o caminho para alcançar isso? Existe alguma ferramenta para isso?

Atualização 1 # Mas se o usuário for esperto, ele pode copiar o binário mkdir, renomeá-lo e usá-lo. Então, como conseguir isso?

    
por Rahul Patil 17.09.2013 / 09:00

5 respostas

20

Eu não sei como fazer isso com o bash, mas eu conheço outro shell que restringe o ambiente do usuário: lshell (shell limitado) .

Uma visão geral rápida da configuração

O Lshell é configurado por meio de um arquivo INI. Por padrão, ele contém uma lista branca de comandos permitidos, mas pode ser facilmente configurada para proibir o usuário de usar um comando específico.

Esta configuração (padrão conf /etc/lshell.conf ) proíbe o usuário foo de usar mkdir :

[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']

Para configurar uma conta de usuário para usar lshell por padrão, você deve:

 chsh -s /usr/bin/lshell foo

Lshell pode fazer mais, como:

  • 3 níveis de granularidade: usuário, grupo, todos.
  • Pode restringir o acesso a determinados caminhos no sistema.
  • Pode restringir o uso de determinados caracteres (como | ).
  • Pode restringir o uso de determinados comandos apenas por SSH.

E mais.

Atualizar 1 # Resultado do teste adicionado:

rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir
    
por 17.09.2013 / 09:20
14

A maneira que eu geralmente implemento esse tipo de restrição requer que várias condições sejam atendidas, caso contrário a restrição pode ser facilmente contornada:

  • O usuário não pertence ao grupo wheel , o único autorizado a usar su (imposto pelo PAM).
  • O usuário recebe um rbash devidamente protegido com um PATH somente leitura apontando para um ~/bin privado, esse diretório ~/bin/ contém links para utilitários simples:

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • o usuário recebe um ambiente restrito e somente leitura (pense em coisas como LESSSECURE , TMOUT , HISTFILE variables).

  • o usuário é mapeado para o usuário do SELinux staff_u e recebe direitos para executar comandos como outro usuário, conforme necessário, por meio de sudo .
  • o usuário /home , /tmp e possivelmente /var/tmp são polyinstantiated via /etc/security/namespace.conf :

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    Além disso, /etc/security/namespace.init faz todos os arquivos esqueletais somente para o usuário e pertencem a root .

Dessa forma, você pode escolher se $USER pode executar mkdir em seu próprio nome (por meio de um link no diretório privado ~/bin , provisionado por /etc/skel , conforme explicado acima), em nome de outros usuário (via sudo ) ou nenhum.

    
por 17.09.2013 / 09:19
4

Adicione um grupo fictício, adicione o usuário a esse grupo, chown root:somegroup /bin/mkdir , chmod g-x /bin/mkdir . Observe que isso depende do usuário não poder modificar seus grupos. IIRC isso é verdade no GNU / Linux, mas não em outros Unices.

    
por 17.09.2013 / 09:14
1

O melhor que testei é usar o Profile.d best & caminho mais seguro

Etapa 1 (criar um arquivo de alias)

[root@newrbe ~]# vim /etc/customalias.sh

Adicione linhas abaixo:

alias rm="echo remove contenet is restricted"
alias poweroff="echo Poweroff is restricted"
alias chmod="echo Change Permission is restristed"

Salvar e & sair

Etapa 2 (criar loader de perfil)

/etc/profile.d/ esta localização contém arquivos para conclusão do bash

[root@newrbe ~]# vim /etc/profile.d/customsource.sh

Adicione abaixo as linhas sob os arquivos que estas linhas bloquearão os comandos mencionados abaixo dos usuários

if [ 'whoami' == "user1" ] && [ 'whoami' == "user2" ]; then
    source /etc/customalias.sh
fi

salve e saia

Agora saia e relogie

Atenciosamente, -Mansur

    
por 21.04.2016 / 17:11
-1

instale sudoers e tente configurar lá cujos usuários e qual comando.

    
por 18.09.2013 / 14:00