Sudoers por um dia por semana?

10

Eu fui voluntário por meu chefe para ser o administrador de sistema para nosso servidor redhat de produção. Ele me pediu para apertar a segurança para evitar acidentes como rm -f * que ocorreu há pouco tempo.

Neste momento, temos 53 usuários usando a máquina e é um pesadelo de auditoria. Eu estou querendo saber se é possível permitir o acesso do usuário apenas em dias específicos da semana.

Por exemplo, posso permitir que o usuário 'Joe' faça o login somente às terças e quintas-feiras e 'Jane' somente aos domingos? Pode etc/sudoers ser personalizado para permitir isso?

Existe uma maneira melhor de usar sudoers?

    
por Chris 28.03.2014 / 18:26

4 respostas

22

sudo faz sua autenticação através do PAM, como praticamente tudo em uma caixa do Linux.

Portanto, você deve poder usar pam_time.so para fazer isso.

Por padrão no Debian, pelo menos, esse módulo não está habilitado. Você precisa adicionar uma linha como esta:

account    requisite  pam_time.so

para /etc/pam.d/sudo para ativar apenas o sudo ou /etc/pam.d/common-account (após o bloco pam-auth-update) para ativar todos os programas no sistema.

Em seguida, edite /etc/security/time.conf para definir suas restrições. O nome do serviço deve ser sudo . Por exemplo, para permitir que Fred use sudo somente entre 15h e 17h na sexta-feira:

sudo;*;fred;Fr1500-1700

(NOTA: eu não testei isso.)

edit: Para ser claro, eu concordo com a outra resposta e com os vários comentadores, você parece ter muitas pessoas executando muitos comandos como root, e você realmente precisa consertar isso. E, claro, se eles podem se tornar root, eles podem editar a configuração do pam ...

    
por 28.03.2014 / 19:18
20

Eu questionaria por que 53 usuários precisam do sudo para fazer o seu trabalho diário - para a maioria dos usuários (mesmo desenvolvedores), o sudo deve ser uma exceção rara, não uma coisa tão rotineira que alguém possa executar um comando sudo rm -rf * .

Você pode usar permissões de grupo (ou ACLs ainda mais avançadas) para dar às pessoas acesso aos arquivos de que precisam para realizar seu trabalho, talvez com alguns scripts ou binários definidos ou sudo para permitir que eles façam coisas como reiniciar os serviços? (note que é difícil escrever um script setuid / sudo seguro, então é mais para manter as pessoas honestas honestas).

Mesmo que você consiga restringir as pessoas a um dia por semana de acesso ao sudo, ainda são 53 pessoas com acesso ao sudo em uma semana, então isso não ajuda muito no seu problema principal.

Para essa questão, eu duvido que muitos usuários precisem acessar um servidor de produção - você pode enviar logs ou quaisquer dados / arquivos necessários para uma máquina que não seja de produção?

    
por 28.03.2014 / 21:28
7

A maneira mais simples seria usar o suders.d (via inludedir) para sua configuração. Você poderia então ter tarefas agendadas que poderiam colocar as regras para cada usuário nesse diretório para as horas desejadas.

A diretiva #includedir pode ser usada em / etc / sudoers para criar um diretório sudo.d no qual você pode colocar regras sudoers como parte de suas regras. Por exemplo, dado:

#includedir /etc/sudoers.d

sudo lerá cada arquivo em /etc/sudoers.d, ignorando nomes de arquivos que terminem em "~" ou contenham um caractere "." para evitar problemas com o gerenciador de pacotes ou com os arquivos temporários / de backup do editor. Os arquivos são analisados em ordem lexical ordenada. Ou seja, /etc/sudoers.d/01_first será analisado antes de /etc/sudoers.d/10_second. Esteja ciente de que, como a classificação é lexical, não numérica, /etc/sudoers.d/1_whoops seria carregado após /etc/sudoers.d/10_second. Usar um número consistente de zeros à esquerda nos nomes de arquivos pode ser usado para evitar tais problemas.

Observe que, diferentemente dos arquivos incluídos via #include, o visudo não editará os arquivos em um diretório #includedir, a menos que um deles contenha um erro de sintaxe. Ainda é possível executar o visudo com o sinalizador -f para editar os arquivos diretamente.

/etc/sudoers.d/joe estaria presente quando você quiser que o joe tenha acesso e você poderia simplesmente remover o arquivo para remover o acesso.

    
por 28.03.2014 / 19:06
0

Você pode adicionar um crontab para colocar usuários em um grupo sudo e, em seguida, um segundo crontab para remover esse usuário.

    
por 31.03.2014 / 18:17