Listing non-root users with shell
Posted on 2023/08/01 in Linux
Listing non-root users
This is a simple Bash script to list all non-root and non-system users in Linux. Those users
are determined by two settings, UID_MIN
and UID_MAX
, found on the /etc/login.defs
file.
#!/bin/bash -
#===============================================================================
#
# FILE: lista-users.sh
#
# DESCRIPTION:
#
# AUTHOR: Nerdeiro da Silva <a n a r c h 1 5 7 a at n i n j a z u m b i . c o m>
# CREATED: 01/08/2023 14:14:18
# REVISION: 0.01
# LICENSE: GNU GPL 2.X (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
#===============================================================================
set -o nounset # Treat unset variables as an error
# Get lowest and highest UID from login.defs
export min_uid=$( awk '/^UID_MIN/{print $2}' /etc/login.defs )
export max_uid=$( awk '/^UID_MAX/{print $2}' /etc/login.defs )
# Use Awk expresisons to list only users between those limits
USERS=( $(awk -v min=${min_uid} -v max=${max_uid} -F: '$3 >= min && $3 <= max { print $1}' /etc/passwd ) )
echo "Users :: ${USERS[@]}"
echo
# Example for loop to do something for each user
for U in ${USERS[@]}; do
USR_DIR=$(awk -F: -v usr=${U} '$1 == usr {print $6}' /etc/passwd)
if [[ -d ${USR_DIR} ]]; then
echo "User: $U; Directory: $USR_DIR"
fi
done