Скрипт рабочий, но работает криво.
Призван удалять все учетки, в которые не логинились последние 30 дней, как подправить его, чтобы он не задевал системные учетки вроде sshd ?
#!/bin/bash
# This script takes everyone with id>1000 from /etc/passwd and removes every user account in case if it hasn't been used for the last 30 days.
# Make sure that script is being executed with root priviligies.
if [[ "${UID}" -ne 0 ]]
then
echo "You should run this script as a root!"
exit 1
fi
# First of all we need to know id limit (min & max)
USER_MIN=$(grep "^UID_MIN" /etc/login.defs)
USER_MAX=$(grep "^UID_MAX" /etc/login.defs)
# Print all users accounts with id>=1000 and <=6000 (default).
awk -F':' -v "min=${USER_MIN##UID_MIN}" -v "max=${USER_MAX##UID_MAX}" ' { if ( $3 >= min && $3 <= max ) print $0}' /etc/passwd
# This function deletes users which hasn't log in in the last 30 days
# Make a color output message
for accounts in ` lastlog -b 30 | sed "1d" | awk ' { print $1 } '`
do
userdel $accounts 2>/dev/null
done
echo -e "\e[36mYou have successfully deleted all user's account which nobody logged in in the past 30 days.\e[0,"
#!/bin/bash
# Этот скрипт берет все id > 1000 из /etc/passwd и удаляет каждую учётку пользователя,
# если она не использовалась за последние 30 дней.
# Убедитесь, что скрипт выполняется с правами root.
if [[ "${UID}" -ne 0 ]]
then
echo "Вы должны запустить этот скрипт от имени root!"
exit 1
fi
# Прежде всего нам нужно узнать пределы идентификатора (мин и макс)
USER_MIN=$(grep "^UID_MIN" /etc/login.defs)
USER_MAX=$(grep "^UID_MAX" /etc/login.defs)
# Распечатать все учетные записи пользователей с id >= 1000 и <= 6000 (по умолчанию).
awk -F':' -v "min=${USER_MIN##UID_MIN}" -v "max=${USER_MAX##UID_MAX}" ' { if ( $3 >= min && $3 <= max ) print $0}' /etc/passwd
# Эта функция удалит пользователей, которые не входили в систему за последние 30 дней
# Сделать вывод цветового сообщения
for accounts in ` lastlog -b 30 | sed "1d" | awk ' { print $1 } '`
do
userdel $accounts 2>/dev/null
done
echo -e "\e[36mВы успешно удалили все учётки пользователей, в которые никто не входил за последние 30 дней.\e[0,"
exit 0
Вы же /etc/passwd парсите, так отсортируйте пользователей: все "живые" пользователи имеют Shell - /bin/bash. Если у пользователя нет /bin/bash пропускайте его...
По логике скрипта - в /etc/login.defs должны быть те самые пределы, в которых находятся системные аккаунты. Если это не так - внесите соответствующие изменения или тупо захардкодьте.