Hapus pengguna yang belum masuk selama x hari

1

dapatkan kode sederhana di bawah ini

USERS=`cat /etc/passwd`
for USER in $USERS
do
   echo "---------- $USER --------------"
   last -n 4 $USER
done

Saya ingin menghapus semua pengguna yang belum masuk selama lebih dari 60 hari.

Tetapi masalah dengan membaca /etc/passwdadalah bahwa saya mendapatkan semua pengguna sistem juga.

Gagasan bagaimana mendapatkan akun yang baru saja dibuat pengguna dan menghapusnya adalah mereka belum masuk selama 90 hari.

Tepuk tangan

bsmoo
sumber
2
Jika Anda khawatir tentang akun aktif, pertahankan basis data pengguna Anda sendiri yang memenuhi syarat untuk penghapusan otomatis alih-alih mengandalkan /etc/passwd.
chepner
Periksa chage. Dengan chage -l userAnda dapat info dan dengan chage --somethingmembuat pengguna menonaktifkan setelah XX hari.
fedorqui

Jawaban:

3

Periksa apakah UID berada di antara UID_MINdan UID_MAX(didefinisikan dalam /etc/login.defs):

UID_MIN=$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)
UID_MAX=$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)

USERS=$(awk -F: -v min=$UID_MIN -v max=$UID_MAX '{
  if ($3 >= min && $3 <= max) print $1
}' /etc/passwd)

now=$(date +%s)

for user in $USERS; do
  last_login=$(date -d "$(last -FRn 1 $user |
    egrep -v "wtmp begins|still logged in" |
    awk '{print $10 " " $11 " " $13 " " $12}')" +%s)
  [ $(( (now - last_login) / 86400 )) -ge 90 ] && echo $user
done
Ansgar Wiechers
sumber
Semua ini apakah itu daftar pengguna? Dan bagi saya daftar pengguna root berulang kali. Idealnya saya ingin skrip shell yang dapat saya tambahkan ke cron yang memeriksa apakah pengguna telah login dalam x hari ... jika tidak menghapusnya.
bsmoo
Ya, semua yang dilakukan adalah daftar pengguna. Saya tidak merekomendasikan penghapusan akun pengguna secara otomatis. Alasan mengapa daftar rootberulang-ulang adalah, karena bagian yang saya salin / tempel dari skrip awal Anda bergema $USER(variabel lingkungan dengan nama pengguna pengguna yang saat ini masuk) alih-alih variabel loop $user. Nama variabel peka huruf besar-kecil. Saya memperbarui kode sampel saya sehingga hanya mencetak pengguna yang belum masuk selama 90 hari atau lebih.
Ansgar Wiechers
@ ubuntu101010101 Jika Anda benar-benar ingin menghapusnya secara otomatis, Anda cukup mengubah echoperintah di bagian akhir menjadi sebuah deluser --remove-homeperintah.
0

Periksa direktori home pengguna (kolom 6) dan abaikan yang kosong.

perreal
sumber
1
yang tidak akan berfungsi karena pengguna layanan menyukai namedatau lpmemiliki entri di sana dan Anda tidak ingin menghapusnya.