Como posso criar contas de usuário que expiram automaticamente?

17

Isso é o que eu gostaria de poder fazer:

Depois que a conta de um usuário é criada, ele deve conseguir ssh -tunnel, mas a conta é removida automaticamente após 30 dias, a menos que a contagem regressiva seja redefinida pelo usuário raiz.

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

    
por Yusufmm 28.06.2013 / 06:42

3 respostas

24

useradd

Você pode controlar por quanto tempo a conta de um usuário é válida por meio do uso da opção --expiredate para useradd .

excerto da página de manual useradd

-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ê pode especificar uma data de +30 dias no futuro a partir de agora e adicioná-la ao seu comando useradd ao configurar as contas.

$ useradd -e 2013-07-30 someuser

chage

Você também pode alterar a data de uma conta existente usando o comando chage . Para alterar a data de expiração de uma conta, faça o seguinte:

$ chage -E 2013-08-30 someuser

calculando a data +30 dias a partir de agora

Para isso, é bem trivial usar o comando date . Por exemplo:

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

Você pode formatar usando as opções +FORMAT para o comando date , o que acaba lhe dando o seguinte:

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

Colocando tudo junto

Então, conhecendo as peças acima, aqui está uma maneira de juntar as peças. 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, você executaria periodicamente este comando:

$ 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 fique ativo apenas por alguns minutos, não poderá usar as opções acima, pois elas exigem a especificação de uma data. Nesse caso, você poderia configurar um crontab para remover / bloquear o usuário criado após o tempo especificado (por exemplo, 10 minutos) ou fazer um dos seguintes:

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

ou

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

Referências

por 28.06.2013 / 07:01
5

Se você está no Debian / Ubuntu você deve usar adduser e usermod . Em sistemas baseados em Debian useradd é considerado de baixo nível e (de acordo com as páginas man): administrators should usually use adduser(8) instead

adduser tem uma opção sem expiração, por isso você apenas a usa para criar a conta.

usermod tem a opção -e / --expiredate para definir a data de expiração.

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

usermod --expiredate $(date -d "30 days" "+%Y-%m-%d") username
    
por 28.06.2013 / 07:15
1

Outra maneira (se o seu SO não suportar a expiração da conta ou se esse recurso não funcionar por qualquer motivo): configure uma tarefa do cron para ser executada em 30 dias a partir de agora e bloqueie essa conta.

Normalmente, a conta é bloqueada configurando sua senha criptografada para um valor inválido. no FreeBSD, o comando pw lock X travará a conta X .

    
por 28.06.2013 / 07:05