Como bloquear o comando, digamos, mkdir
para um usuário específico?
O que eu fiz acabou de criar uma 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 a maneira de conseguir isso? existe alguma ferramenta para isso?
Atualização 1 # Mas se o usuário for inteligente, ele poderá copiar o binário do mkdir, renomeá-lo e usá-lo. Então, como conseguir isso?
linux
security
account-restrictions
restricted-shell
Rahul Patil
fonte
fonte
mkdir
e renomeá-lo, ou mesmo apenas copiar e renomear o binário existente. Além disso, há um shell embutido para substituir aliases e funções.cp /bin/mkdir mkdir2
, em seguida, usá-lo :(cp -r /usr/local/lib ggg
criará um diretório chamadoggg
(contendo uma cópia do conteúdo/usr/local/lib
, se houver, que o usuário poderá excluir). Você pode usarfind / -type d -empty
para encontrar um diretório vazio para copiar.Respostas:
Não sei como fazer isso com o bash, mas conheço outro shell que restringe o ambiente do usuário: lshell (shell limitado) .
Uma rápida visão geral da configuração
Lshell é configurado através de um arquivo INI. Por padrão, ele mantém uma lista de permissões 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áriofoo
de usarmkdir
:Para configurar uma conta de usuário para usar lshell por padrão, você deve:
Lshell pode fazer mais, como:
|
).E mais.
Atualização 1 # Resultado do teste adicionado:
fonte
allowed = 'all' - ['mkdir']
, você não pode simplesmente executarbash
e ser irrestrito novamente?dd if=$(which bash) of=my_bash && chmod u+x my_bash && ./my_bash
. Eu acho que o problema é a falta de uma política padrão restritiva, ou seja, nesse cenário, você concede permissões por padrão e, em seguida, nega as permissões com base em uma lista, quando deve ser o contrário: DENY por padrão e depois GRANT com base na política .cp
um binário em seu PATH (root
diretório próprio,rx
para o usuário) erbash
impede a execução./executables
. Responde a sua pergunta?A maneira como eu geralmente implemento esse tipo de restrição exige que várias condições sejam atendidas; caso contrário, a restrição pode ser facilmente contornada:
wheel
grupo, o único autorizado a usarsu
(imposto via PAM).O usuário recebe uma proteção adequada
rbash
com um PATH somente leitura que aponta para um privado~/bin
; esse~/bin/
diretório contém links para utilitários simples:o usuário é dado um, somente leitura ambiente restrito (pense em coisas como
LESSSECURE
,TMOUT
,HISTFILE
variáveis).staff_u
e recebe direitos para executar comandos como outro usuário, conforme necessáriosudo
.do usuário e
/home
,/tmp
possivelmente,/var/tmp
são instituídos por meio de/etc/security/namespace.conf
:Além disso,
/etc/security/namespace.init
torna todos os arquivos esqueléticos somente leitura para o usuário e de propriedade deroot
.Dessa forma, você pode escolher se
$USER
pode executarmkdir
em seu próprio nome (por meio de um link no~/bin
diretório privado , provisionado por/etc/skel
, como explicado acima), em nome de outro usuário (porsudo
) ou nenhum.fonte
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 conseguir modificar seus grupos. IIRC isso é verdade no GNU / Linux, mas não em alguns outros Unices.fonte
O melhor que eu testei é usar Profile.d melhor e mais seguro
Etapa 1 (criar um arquivo de alias)
Adicionar linhas abaixo:
Salvar e sair
Etapa 2 (Criar carregador de perfil)
/etc/profile.d/ este local contém arquivos para conclusão do bash
Adicione abaixo das linhas abaixo dos arquivos que estas linhas bloquearão os comandos mencionados para os usuários abaixo
salvar e sair
Agora Saia e faça login novamente
Atenciosamente, -Mansur
fonte
/etc/profile.d/
não é parabash
conclusão , é onde colocar as personalizações da sessão de login para usuários que usam shells de login do tipo POSIX; portanto, não é para onde asbash
personalizações de alias (que prefeririam entrar/etc/bash.bashrc
) iriam e deveriam ter uma sintaxe do shell POSIX (geralmente, em.
vez disso) desource
e em=
vez de==
).instale sudoers e tente configurar lá cujos usuários e que comando.
fonte
sudo
.