Como posso criar contas de usuário expirando automaticamente?

20

Isto é o que eu gostaria de poder fazer:

Depois que a conta de um usuário é criada, ele deve poder se sshtunelar, mas sua conta é removida automaticamente após 30 dias, a menos que a contagem regressiva seja redefinida pelo usuário raiz.

Como posso automatizar isso? Vou ter que lidar com cerca de 15 usuários.

Yusufmm
fonte

Respostas:

29

useradd

Você pode controlar por quanto tempo a conta de um usuário é válida através do uso da --expiredateopção useradd.

trecho da useraddpágina de manual

-e, --expiredate EXPIRE_DATE
     The date on which the user account will be disabled. The date is
     specified in the format YYYY-MM-DD.

     If not specified, useradd will use the default expiry date specified
     by the EXPIRE variable in /etc/default/useradd, or an empty string 
     (no expiry) by default.

Portanto, ao configurar a conta do usuário, você poderá especificar uma data de mais de 30 dias no futuro e adicioná-la ao seu useraddcomando ao configurar as contas deles.

$ useradd -e 2013-07-30 someuser

chage

Você também pode alterar uma data de contas existente usando o chagecomando Para alterar a data de validade de uma conta, faça o seguinte:

$ chage -E 2013-08-30 someuser

calculando a data +30 dias a partir de agora

Fazer isso é bastante trivial usando o datecomando Por exemplo:

$ date -d "30 days"
Sun Jul 28 01:03:05 EDT 2013

Você pode formatar usando as +FORMATopções do datecomando, que acaba fornecendo o seguinte:

$ date -d "30 days" +"%Y-%m-%d"
2013-05-28

Juntando tudo

Então, conhecendo as peças acima, aqui está uma maneira de montá-las. Primeiro, ao criar uma conta, você executaria este comando:

$ useradd -e `date -d "30 days" +"%Y-%m-%d"` someuser

Então, quando você quiser ajustar as datas de vencimento, execute este comando periodicamente:

$ chage -E `date -d "30 days" +"%Y-%m-%d"` someuser

Especificando períodos de tempo inferiores a 24h

Se você deseja que um usuário esteja ativo apenas por alguns minutos, não poderá usar as opções acima, pois ele exige a especificação de uma data. Nesse caso, você pode configurar um crontabpara remover / bloquear o usuário criado após o tempo especificado (por exemplo, 10 minutos) ou você pode:

adduser someuser && sleep 600 && usermod --lock someuser

ou

$ adduser someuser
$ echo usermod --lock someuser | at now + 10 minutes

Referências

slm
fonte
3
Tomei a liberdade de mudar o% M (minutos) em% m (mês)
Anthon
5

Se você estiver no Debian / Ubuntu, use addusere usermod. Nos sistemas baseados no Debian useraddé considerado de baixo nível e (de acordo com as páginas de manual):administrators should usually use adduser(8) instead

adduser tem uma opção sem vencimento, então você a usa para criar a conta.

usermodtem a opção -e/ --expiredatepara definir a data de validade.

Você calcula o parâmetro datecom: date -d "30 days" "+%Y-%m-%d"para obter:

usermod --expiredate $(date -d "30 days" "+%Y-%m-%d") username
Anthon
fonte
1

Outra maneira (se o seu sistema operacional não suportar a expiração da conta ou esse recurso não funcionar por qualquer motivo): configure um trabalho cron para executar daqui a 30 dias que bloqueará essa conta.

Geralmente, a conta é bloqueada definindo sua senha criptografada como valor inválido; no FreeBSD, o pw lock Xcomando bloqueará a conta X.

sendmoreinfo
fonte
11
Explique como você pode bloquear uma conta.
Slm
Isso depende do sistema operacional, na verdade.
sendmoreinfo
4
Ainda seria útil se você desse um exemplo.
slm