Como criar uma conta de usuário com permissões específicas?

2

Eu quero criar uma conta de usuário unix com permissões específicas: esse usuário deve poder instalar o software, mas não pode remover o software. Além disso, quando o usuário efetua login, o root deve receber uma notificação no correio. É possível?

Estou usando o Debian.

    
por insict 18.09.2013 / 10:55

3 respostas

2

Quanto a restringir os privilégios de gerenciamento para apenas instalar software, você pode usar o sudo: você só permite que o usuário execute as ferramentas de gerenciamento de pacotes que estão instalando. Aproximadamente você precisa de algo assim em / etc / sudoers:

Cmnd_Alias SWINST = /path/to/pkg-manager install_action *

power_user hostname= NOPASSWD: SWINST

Isso permite que power_user no computador hostname execute o /path/to/pkg-manager com o primeiro argumento install_action e argumentos adicionais arbitrários, sem que seja solicitada uma senha (por exemplo, para o Debian isso seria traduzido para /path/to/apt-get install * , para SUSE distribuições baseadas em /path/to/zypper in * ).

Há duas coisas a serem lembradas:

  1. O gerenciador de pacotes deve ser bem comportado no sentido de que não deve permitir que várias ações sejam passadas para ele em uma linha de comando (por exemplo, pkg-manager install foo, remove bar o quebraria completamente) ). Como os gerenciadores de pacotes também lidam com conflitos, mesmo a instalação pode resultar na remoção de software, use switch / configuration que desativa isso, se possível (e veja o comentário de Craig abaixo).

  2. Você não deve permitir o acesso a comandos de manutenção de pacote de baixo nível, que podem instalar o pacote a partir de um arquivo local. Isso permitiria ao usuário preparar um pacote de escalonamento de privilégios, instalá-lo e depois dar adeus ao seu sistema. Em vez disso, você precisa se certificar de que só será possível instalar um software confiável com o comando.

Para sistemas desktop, a infraestrutura do PolicyKit é frequentemente usada nos dias de hoje, por isso seria outra opção.

    
por 18.09.2013 / 22:36
0

Sim, possível, na última opção de cada linha de /etc/passwd , você especifica o shell para cada usuário. Você pode escrever um wrapper e, em vez do shell padrão, como bash ou csh , use seu wrapper (provavelmente um script de shell).

Você altera o padrão:

mohsen:x:1000:1000:Mohsen Pahlevanzadeh,,,:/home/mohsen:/bin/bash

para:

mohsen:x:1000:1000:Mohsen Pahlevanzadeh,,,:/home/mohsen:/yourpath/yourshell.sh

Você deve colocar duas coisas em yourshell.sh :

  1. comando para correspondência para raiz ( mail , mutt command ... - ler manual)
  2. gera o shell de login exec /bin/bash -l
por 18.09.2013 / 16:01
0

Aqui está minha opinião sobre uma solução:

O usuário semi-privilegiado executa um script chamado 'please-install.sh'. os argumentos do script são nomes de pacotes ou programas.

#!/bin/bash

cat <<__EOF__ | mail -s "please install" root@localhost 

When you get time, please install these programs for me:

  $@

Thanks,

__EOF__

Isso tem a vantagem de uma rede neural altamente sofisticada especificamente treinada no domínio do problema (e com milhões de anos de evolução em tarefas de solução de problemas) para avaliar toda a segurança e outras implicações práticas e reagir a cada solicitação com a determinação. e velocidade que merece. por exemplo: "não, eu não vou instalar o cliente bit-torrent em nosso servidor web de produção".

Se você quiser ficar chique, você pode usar getopt para permitir que o usuário especifique opções de prioridade como -l ou --low, -h ou --high, -u ou --urgent.

    
por 19.09.2013 / 14:29