Sudoers por um dia por semana?

10

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

No momento, temos 53 usuários fazendo o mesmo 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 ter o usuário 'Joe' autorizado a fazer login apenas às terças e quintas-feiras e 'Jane' apenas aos domingos? Pode etc/sudoersser personalizado para permitir isso?

Existe uma maneira melhor em vez de usar sudoers?

Chris
fonte
10
Eu recomendaria NÃO ler a página do manual. Veja como xkcd # 1343
user60684
3
Não, estou dizendo a ele para não ler o manual porque é impossível ler o IMHO. O OP provavelmente encontraria uma resposta na página de manual se fosse mais fácil de ler.
user60684
10
Você pode fazer isso, mas lembre-se de que os usuários podem devolver o acesso ao sudo de todos os tempos em qualquer dia em que tenham root.
Nick Matteo
2
@ Mark0978 se você soubesse o nome da empresa, provavelmente morreria de rir. É uma vergonha que seja permitido ... em um servidor de produção.
31414 Chris
3
Isso parece meio bobo. Significa apenas que Bill terá que esperar o horário de quarta-feira pela manhã rm -rf /.
Michael Hampton

Respostas:

21

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

Portanto, você deve poder pam_time.sofazer isso.

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

account    requisite  pam_time.so

para /etc/pam.d/sudohabilitar apenas o sudo ou /etc/pam.d/common-account(após o bloco pam-auth-update) ativar para 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 as 15h e as 17h na sexta-feira:

sudo;*;fred;Fr1500-1700

(NOTA: Eu não testei isso.)

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

derobert
fonte
O PAM parece complexo de implementar, mas também permite um controle mais rígido sobre quem faz o que e quando. Aceito e votado. Obrigado.
31414 Chris
2
Eu não acho que encorajá-lo é a resposta certa, o IMAO a resposta correta para essa pergunta é "CORRA PARA AS MONTES !!!! 1! 1 !! 1! 1"
o0 '.
Isso realmente funciona? Eu sou capaz de controlar vários mecanismos de login, como "login", "ssh", "gdm", "su" usando pam_time.so, mas não está funcionando para o sudo. Quero impedir que alguém se torne root por qualquer mecanismo normal fora do horário comercial. (Eu percebo que não é à prova de balas, alguém poderia preparar uma concha setuid ou backdoor com antecedência, mas eu não espero que vai acontecer nesta situação.)
Sam Watkins
20

Eu questionaria por que 53 usuários precisam do sudo para realizar seu trabalho do dia a dia - para a maioria dos usuários (até desenvolvedores), o sudo deve ser uma exceção rara, não uma coisa tão rotineira que alguém execute 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 necessários para realizar seu trabalho, talvez com alguns scripts ou binários configurados ou sudo'ed para permitir que eles façam coisas como reiniciar serviços? (observe que é difícil escrever um script setuid / sudo seguro, por isso é mais importante manter as pessoas honestas honestas).

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

Nesse caso, eu questionaria se muitos usuários precisam 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?

Johnny
fonte
Ou você pode publicar algum tipo de acesso aos arquivos de log de que possam precisar, um tipo de configuração sftp de chroot jailed.
boatcoder
@ Johnny, a maioria do trabalho realizado neste host está criando / editando e executando scripts shell. Os usuários não devem ter permissão para vi/cp/mv/rm. Somente cde more. Nada mais.
31414 Chris
@ Johnny Se eu definir uma ACL em um diretório, os arquivos nesse diretório herdarão os atributos da ACL por padrão?
31414 Chris
@ Chris Sim, se você definir a ACL padrão para o diretório.
Michael Hampton
Isso deve ser um comentário, não uma resposta. Independentemente de o cenário do OP ser sensato, outras pessoas têm uma necessidade semelhante de bloquear o "sudo" para alguns usuários em determinados momentos.
Sam Watkins
7

A maneira mais simples seria usar suders.d (via inludedir) para sua configuração. Você pode então ter tarefas cron que podem colocar as regras para cada usuário nesse diretório pelos horários desejados.

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

#includedir /etc/sudoers.d

O sudo lerá cada arquivo em /etc/sudoers.d, ignorando os nomes de arquivos que terminam em '~' ou contêm um '.' para evitar causar problemas com arquivos temporários / de backup ou gerenciadores de pacotes. Os arquivos são analisados ​​em ordem lexical classificada. Ou seja, /etc/sudoers.d/01_first será analisado antes do /etc/sudoers.d/10_second. Esteja ciente de que, como a classificação é lexical, não numérica, o /etc/sudoers.d/1_whoops seria carregado após o /etc/sudoers.d/10_second. O uso de um número consistente de zeros à esquerda nos nomes dos arquivos pode ser usado para evitar esses problemas.

Observe que, diferentemente dos arquivos incluídos por meio de #include, o visudo não os editará 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.

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

jamespfinn
fonte
1
Eu tive um problema com meus arquivos sudoers específicos do usuário: 'sudoers.user1' etc. Você comenta sobre os '~' e '.' caracteres resolveu meu problema. Estou tão feliz que você leu o manual! Obrigado.
Han
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.

PolarisUser
fonte