Xóa người dùng chưa đăng nhập trong x ngày


1

lấy mã đơn giản dưới đây

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

Tôi muốn xóa lý tưởng tất cả người dùng đã đăng nhập trong hơn 60 ngày.

Nhưng vấn đề với việc đọc /etc/passwdlà tôi cũng có được tất cả người dùng hệ thống.

Mọi ý tưởng làm thế nào để chỉ lấy tài khoản do người dùng tạo và xóa chúng là họ chưa đăng nhập trong 90 ngày.

Chúc mừng


2
Nếu bạn lo ngại về các tài khoản đang hoạt động, hãy duy trì cơ sở dữ liệu người dùng của riêng bạn đủ điều kiện để tự động xóa thay vì dựa vào /etc/passwd.
chepner

Kiểm tra chage. Với chage -l userbạn có thể thông tin và chage --somethinglàm cho người dùng vô hiệu hóa sau XX ngày.
fedorqui

Câu trả lời:


3

Kiểm tra xem UID có nằm giữa UID_MINUID_MAX(được xác định trong /etc/login.defs) không:

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

Tất cả điều này nó liệt kê người dùng? Và đối với tôi, nó liệt kê người dùng root nhiều lần. Lý tưởng nhất là tôi muốn một tập lệnh shell mà tôi có thể thêm vào cron để kiểm tra xem người dùng đã đăng nhập trong vòng x ngày ... nếu không xóa chúng.
bsmoo

Vâng, tất cả điều này là danh sách người dùng. Tôi không khuyên bạn nên tự động xóa tài khoản người dùng. Lý do tại sao nó được liệt kê rootnhiều lần là vì phần tôi đã sao chép / dán từ tập lệnh ban đầu của bạn lặp lại $USER(biến môi trường với tên người dùng của người dùng hiện đang đăng nhập) thay vì biến vòng lặp $user. Tên biến là trường hợp nhạy cảm. Tôi đã cập nhật mã mẫu của mình để nó chỉ in những người dùng chưa đăng nhập trong 90 ngày trở lên.
Ansgar Wiechers

@ ubfox101010101 Nếu bạn thực sự muốn xóa chúng tự động, bạn chỉ cần thay đổi echolệnh ở cuối thành một deluser --remove-homelệnh.

0

Kiểm tra thư mục chính của người dùng (cột thứ 6) và bỏ qua những thư mục trống.


1
sẽ không hoạt động vì người dùng dịch vụ thích namedhoặc lpcó mục ở đó và bạn không muốn xóa chúng.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.