diff --git a/block_local_users b/block_local_users new file mode 100644 index 0000000..bb6965f --- /dev/null +++ b/block_local_users @@ -0,0 +1,31 @@ +#!/bin/bash + +# Скрипт будет работать если определена переменная окружения I_AM_SURE=1 + +if [ "$EUID" -ne 0 ] + then echo "root only" + exit 255 +fi + +# диапазон локальных уидов берем из /etc/login.defs +uid_max=$(grep UID_MAX /etc/login.defs | awk '{print $2}') +uid_min=$(grep UID_MIN /etc/login.defs | awk '{print $2}') + +# диапазон исключений +reserved_min=1000 +reserved_max=1100 + +local_users=$(awk -v RMIN=$reserved_min -v RMAX=$reserved_max -v UID_MAX=$uid_max -v UID_MIN=$uid_min -F ':' \ + '{if ( (($3>=UID_MIN) && ($3RMAX) && ($3<=UID_MAX)) ) {print $1} }' \ + /etc/passwd | sort -n ) + +DRYRUN='/usr/bin/echo' + +if [ "xxx${I_AM_SURE}" == "xxx1" ]; then + DRYRUN='' +fi + +# блокируем всех пользователей, кто остается за пределами списков +for i in $local_users; do + ${DRYRUN} /usr/sbin/passwd --lock $i +done