Olá pessoal !

Ontem foi dia de análise de alguns servidores da GM, especialmente os SOX, por estarmos próximos à outra auditoria.
Numa empresa grande como a HP, temos centenas de funcionários de suporte ao ambiente – Pessoas lidando com o sistema operacional, outros com banco de dados, alguns especialistas em ferramentas de monitoração, entre outros.

A menos que sua rede toda esteja rodando NIS ou LDAP (o que raramente acontece), você acaba tendo que criar todos estes ID’s nos servidores, e ao longo dos anos isso vira bagunça, se não for administrado corretamente.

Nessa revisão de ontem constatamos que possuíamos muita gente com acesso demais nos servidores. Isto é, com regras de sudo excessivas, pelo fato de serem membros de grupos desnecessários.

Tente administrar mais de 3.000 servidores e ir, de um por um, removendo os grupos de algumas dezenas de usuários. Complicado né ?
Foi com isso em vista que fiz um simples shell script, com a função de fazer algo que, na minha opinião, deveria ser um recurso nativo do Unix.As regras de sudo, num ambiente bem estruturado, são, em sua maioria, desenhadas para grupos – e então usuários adicionados aos grupos, dando-os permissões para a execução dos comandos como root.

Imaginemos então que o usuário torvalds é membro dos grupos admin, monitoracao e impressoras. E que nosso objetivo é retirá-lo do grupo admin, pois este grupo possui permissões para executar sudo su –.

Seria simples, não ?

usermod -g monitoracao -G impressoras torvalds

Porém agora considere o seguinte: O cara vai estar no grupo admin em todos os servidores, porém os grupos secundários dele são desconhecidos.
Além disso, você não pode conectar-se a cada servidor, grepando o /etc/group pelo ID dele, e montando um script para cada ocasião. Total perda de tempo, certo ?
Ah sim, mais um probleminha: Você vai rodar o script em Solaris, HP-UX, AIX e em alguns poucos servidores Linux. Portanto nada de comandos específicos.

Foi pensando nisso que eu criei um script simples, feio, mal-feito mas que funciona Usando apenas as ferramentas encontradas em todos os sabores de Unix, como sed, while-do, grep, cut, entre outros.
Ele automatiza a coisa, fantástico para uma ocasião como a minha, onde tenho em mãos uma ferramenta web que é capaz de rodar o script em todos os servidores ao mesmo tempo.

Enfim, sem mais delongas – Segue o script. Torço pro Google indexar isso logo e outros que passaram pelo mesmo problema que eu tenham uma solução mais prática:

# Entrar num diretório temporário:
mkdir –p /tmp/controlid && cd /tmp/controlid
# Pegar do /etc/group os grupos atuais do cara e jogar num arquivo temp:
grep torvalds /etc/group | cut -d: -f1 > currgroups
# Botar o output do comando anterior, todos na minha linha, separados por virgula:
while read line; do echo -n "$line,"; done < currgroups > currgroups2
# Tirar a porcaria da virgula que sobrou no final da string:
cat currgroups2 |sed 's/\(.*\)./\1/' > currgroups3
# Remover o grupo admin da lista acima. Troque a palavra admin abaixo pelo grupo que deseja remover.
cat currgroups3 | sed 's#,admin##g' > groups
# Atualizar os grupos do cara !
usermod -G `cat groups` torvalds

Sugestões de otimização para o script são sempre bem-vindas.

 

Um abraço a todos !

Sobre Jeremias Zerbini

Jeremias Zerbini escreveu 76 artigos neste blog.

27 anos, entusiasta de tecnologias opensouce, geek, adorava perder as partições do HD aos 15 anos instalando GNU/Linux. Gosta de video-games, e isso inclui instalar o Yellow Dog no PS3 novinho. Consultor autônomo na área de infra-estrutura de servidores, está sempre dedicando, quando possível, um tempinho extra para pesquisar sobre novas e melhores alternativas ao software proprietário [mas sem histeria].

Related Posts Plugin for WordPress, Blogger...

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *