Sudoers um dia por semana?

Sudoers um dia por semana?

Fui oferecido como voluntário pelo meu chefe para ser o administrador de sistema do nosso servidor redhat de produção. Ele me pediu para reforçar a segurança para evitar contratempos como rm -f *o que ocorreu há pouco tempo.

No momento, temos 53 usuários fazendo sudo na máquina e isso é um pesadelo de auditoria. Gostaria de 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 login SOMENTE às terças e quintas e 'Jane' apenas aos domingos? Pode etc/sudoersser personalizado para permitir isso?

Existe uma maneira melhor em vez de usar sudoers?

Responder1

sudofaz sua autenticação através do PAM, como praticamente tudo em uma máquina Linux.

Então você deve poder usar pam_time.sopara fazer isso.

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

account    requisite  pam_time.so

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

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

sudo;*;fred;Fr1500-1700

(NOTA: eu não testei isso.)

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

Responder2

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

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 setuid ou sudo para permitir que elas façam coisas como reiniciar serviços? (observe que é difícil escrever um script setuid/sudo seguro, então é mais para manter as pessoas honestas).

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

Nesse caso, eu questionaria se tantos usuários precisam de acesso a 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?

Responder3

A maneira mais simples seria usar o diretório sudoers.d (via Includedir) para sua configuração. Você poderia então ter tarefas cron que poderiam colocar as regras para cada usuário nesse diretório nos horários desejados.

A diretiva #includedir pode ser usada em /etc/sudoers para criar um diretório sudoers.d no qual você pode inserir regras de 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 terminam em '~' ou contêm um '.' caractere para evitar causar problemas com o gerenciador de pacotes ou editor de arquivos temporários/de backup. Os arquivos são analisados ​​em ordem lexical classificada. 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 dos 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ê deseja que Joe tenha acesso e você pode simplesmente remover o arquivo para retirar o acesso.

Responder4

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

informação relacionada