Como criar um usuário linux com somente e somente permissão READ não EXECUTE e WRITE?

4

Eu criei usuário, por exemplo ronly , agora eu quero dar a eles acesso somente leitura a alguns diretórios na casa de outros usuários como abc/,xyz/,pqr/ , então eu coloquei esse usuário ronly em outros significa que não criou nenhum grupo para esse usuário que significa ronly será outros para os diretórios acima.Agora tudo funciona conforme a expectativa, mas o único problema é que abc/,xyz,pqr/ tem alguns scripts de shell que ronly devem ler, mas NÃO executá-los.

Os shell scripts com permissão como este -rwxrw-r-- test.sh significam que o usuário ronly pode ver os scripts mas não deve executá-los, este trabalho é apenas uma maneira de executar scripts de shell como ./test.sh , isso dá permission denied , mas com sh test.sh e /bin/sh test.sh podem permitir que ronly execute os scripts.

Então, existe alguma maneira de restringi-los a executar arquivos de scripts de shell?

Por favor, não sugira o ACL ou o SElinux. Eu não quero ativar isso devido a algumas restrições.

    
por chintan thakar 31.05.2016 / 08:49

3 respostas

2

Podemos colocar a validação no início do script.

userid='id -u -n'
#echo "$userid" ;

ownuser='ls -l ${abosolutepath}/${your_script.sh} | awk '{print $3}''
#echo "$ownuser" ;

if [ ! "$userid" = "$ownuser" ]; then
        echo permission denied
        exit 1
fi

A validação acima irá verificar se o usuário que está executando este script é o mesmo que o usuário que possui este script. Se o usuário não corresponder, a execução será finalizada.

Eu implementei isso no meu ambiente e ele está funcionando bem.

    
por 02.06.2016 / 07:39
2

Em geral, isso não é possível. Qualquer usuário que seja capaz de executar um shell também pode executar qualquer script de shell que possa ler. O shell não faz distinção entre os comandos que vêm do terminal e os comandos que vêm de um arquivo.

Então você provavelmente precisaria de algum tipo de "shell" restrito. Em princípio, qualquer programa pode ser usado como um shell de login.

    
por 31.05.2016 / 10:24
2

Sem envolver ACL ou SELinux , a única maneira que eu encontro é adicionar no início do script:

if [ "$USER" = "ronly" ]; then
  echo 'Access denied'
  exit 1
fi

Isso está longe de ser perfeito porque:

  1. O usuário ronly pode ler o script, então ele pode copiar o conteúdo para um script em sua própria casa e executá-lo.
  2. Qualquer usuário pode definir livremente sua variável de ambiente $ USER, por exemplo defina a variável USER para abc e execute o script, que ignorará a restrição.

Se você está fazendo isso apenas para evitar execuções "acidentais" , então funciona, mas se o seu objetivo for REALMENTE proibir a execução, então isso não acontece.

    
por 31.05.2016 / 10:10