Eu criei um aplicativo PHP que pode criar uma nova conta de usuário Linux com expiração automática após vários períodos.
Depois de pesquisar no Google sobre 'Como automatizar a remoção do usuário Linux após corrigir o período', encontrei esta resposta,https://unix.stackexchange.com/a/80971/224583
Mas não sabia como fazer, por exemplo criar conta nova e expirar depois de 10 meses, ou 5 meses, etc.
Minha dúvida é, como converter mês para dia, exemplo dou 5 meses e converto dias contados de cinco meses. Ou alguma solução além da minha pergunta?
Responder1
A opção expirar no useradd
utilitário requer uma data especificada no formato YYYY-MM-DD
.
Você pode calcular essa data usando a -d
opção do date
comando. Usando seu exemplo de cenário de 5 meses:
$ date +"%Y-%m-%d"
2017-04-08
$ date -d "5 months" +"%Y-%m-%d"
2017-09-08
Responder2
A -e
mudança de useradd
espera uma data no formato de data internacional ( YYYY-MM-DD
), conforme pode ser obtido em sua pá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.
[...]
Agora você só precisa indicar a data em que a conta deve expirar. Você pode fazer esse cálculo em PHP. A resposta que você vinculou usa uma ferramenta de linha de comando padrão, portanto, nenhuma linguagem de alto nível precisa ser usada.
Aqui está um exemplo de código de como fazer isso em PHP:
$diffHour = 0;
$diffMinute = 0;
$diffSecond = 0;
$diffMonth = 10;
$diffDay = 0;
$diffYear = 0;
$hour = date("H") + $diffHour;
$minute = date("i") + $diffMinute;
$second = date("s") + $diffSecond;
$month = date("n") + $diffMonth;
$day = date("j") + $diffDay;
$year = date("Y") + $diffYear;
$time = mktime($hour, $minute, $second, $month, $day, $year);
$date = date("Y-m-d", $time);
Basta preencher as variáveis no bloco superior. Eu os preenchi para o seu exemplo de 10 meses. Você também pode voltar no tempo. Por exemplo, se quiser que expire em 7 meses menos 4 dias, você pode definir $diffMonth = 7;
e $diffDay = -4;
.
Em seguida, passe o valor da data ( 2018-02-09
quando executado hoje (exceto se você mora na América, então é um dia antes porque ainda estamos usando um sistema de horário retardado com fusos horários)) para o seu script bash.
Exemplo de código bash:
useradd -e "2018-02-09" "rizal"