283 lines
6.0 KiB
Bash
283 lines
6.0 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
FILE="${@: -1}"
|
||
|
if [[ ! -f "$FILE" ]]; then
|
||
|
echo "File \"$FILE\" doesn't exist!"
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
DRYRUN=false
|
||
|
FILE_CONTENTS="$(cat ${@: -1})"
|
||
|
CREATE_USERS=false
|
||
|
DELETE_USERS=false
|
||
|
CREATE_GROUPS=false
|
||
|
DELETE_GROUPS=false
|
||
|
DELIM=";"
|
||
|
|
||
|
usage ()
|
||
|
{
|
||
|
echo "Usage: ./autouser.sh \$PARAMETER file.csv"
|
||
|
echo ""
|
||
|
echo "PARAMETERS"
|
||
|
echo " --help || -h (Show this help prompt)"
|
||
|
echo " --dry-run (Test without executing any changes)"
|
||
|
echo " --create-users users.csv (Create users from a .csv file)"
|
||
|
echo " --create-groups groups.csv (Create groups from a .csv file)"
|
||
|
echo " --delete-users users.csv (Delete users from a .csv file)"
|
||
|
echo " --delete-groups groups.csv (Delete groups from a .csv file)"
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
rootCheck ()
|
||
|
{
|
||
|
if [[ "$(id -u)" -ne 0 ]]; then
|
||
|
echo "You must be root to run this parameter"
|
||
|
exit
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
cutter ()
|
||
|
{
|
||
|
echo "$1" | cut -d "$DELIM" -f "$2"
|
||
|
}
|
||
|
|
||
|
turnLowercase() {
|
||
|
echo "$1" | tr "[:upper:]" "[:lower:]" | sed 's/ñ/n/g'
|
||
|
}
|
||
|
|
||
|
createGroups ()
|
||
|
{
|
||
|
while read line; do
|
||
|
GID=$(cutter "${line}" "2")
|
||
|
GROUPNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
if [[ -z "$GID" ]]; then
|
||
|
echo "[+] Adding group $GROUPNAME..."
|
||
|
groupadd $GROUPNAME
|
||
|
else
|
||
|
echo "[+] Adding group $GROUPNAME..."
|
||
|
groupadd $GROUPNAME -g $GID
|
||
|
fi
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
createGroupsDry ()
|
||
|
{
|
||
|
while read line; do
|
||
|
GID=$(cutter "${line}" "2")
|
||
|
GROUPNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
if [[ -z "$GID" ]]; then
|
||
|
echo "groupadd $GROUPNAME"
|
||
|
else
|
||
|
echo "groupadd $GROUPNAME -g $GID"
|
||
|
fi
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
deleteGroups ()
|
||
|
{
|
||
|
while read line; do
|
||
|
GROUPNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
echo "[+] Deleting group $GROUPNAME..."
|
||
|
groupdel $GROUPNAME
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
deleteGroupsDry ()
|
||
|
{
|
||
|
while read line; do
|
||
|
GROUPNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
echo "groupdel $GROUPNAME"
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
createUsers ()
|
||
|
{
|
||
|
while read line; do
|
||
|
USERNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
FULLNAME=$(cutter "${line}" "2")
|
||
|
USERUID=$(cutter "${line}" "3")
|
||
|
USERGID=$(turnLowercase $(cutter "${line}" "4"))
|
||
|
USERGROUPS=$(turnLowercase $(cutter "${line}" "5"))
|
||
|
TLFN=$(cutter "${line}" "6")
|
||
|
EXTRAINFO=$(cutter "${line}" "7")
|
||
|
USERSHELL=$(cutter "${line}" "8")
|
||
|
USERLOCKED=$(cutter "${line}" "9")
|
||
|
|
||
|
echo "[+] Adding user $USERNAME..."
|
||
|
useradd -m $USERNAME
|
||
|
echo $USERNAME:$USERNAME | chpasswd
|
||
|
|
||
|
if [[ ! -z "$FULLNAME" ]]; then
|
||
|
chfn -f "$FULLNAME" "$USERNAME" 1>/dev/null
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERUID" ]]; then
|
||
|
usermod -u $USERUID $USERNAME
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERGID" ]]; then
|
||
|
usermod -g $USERGID $USERNAME
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERGROUPS" ]]; then
|
||
|
usermod -G $(echo $USERGROUPS | tr "|" ",") $USERNAME
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$TLFN" ]]; then
|
||
|
chfn -p "$TLFN" $USERNAME 1>/dev/null
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$EXTRAINFO" ]]; then
|
||
|
chfn -o "$EXTRAINFO" $USERNAME 1>/dev/null
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERSHELL" ]]; then
|
||
|
usermod -s $USERSHELL $USERNAME
|
||
|
else
|
||
|
usermod -s /bin/bash $USERNAME
|
||
|
fi
|
||
|
|
||
|
if [[ $USERLOCKED == "SI" ]]; then
|
||
|
usermod -L $USERNAME
|
||
|
fi
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
createUsersDry ()
|
||
|
{
|
||
|
while read line; do
|
||
|
USERNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
FULLNAME=$(cutter "${line}" "2")
|
||
|
USERUID=$(cutter "${line}" "3")
|
||
|
USERGID=$(turnLowercase $(cutter "${line}" "4"))
|
||
|
USERGROUPS=$(turnLowercase $(cutter "${line}" "5"))
|
||
|
TLFN=$(cutter "${line}" "6")
|
||
|
EXTRAINFO=$(cutter "${line}" "7")
|
||
|
USERSHELL=$(cutter "${line}" "8")
|
||
|
USERLOCKED=$(cutter "${line}" "9")
|
||
|
|
||
|
echo "useradd -m $USERNAME"
|
||
|
echo "echo \"$USERNAME:$USERNAME | chpasswd\""
|
||
|
|
||
|
if [[ ! -z "$FULLNAME" ]]; then
|
||
|
echo "chfn -f \"$FULLNAME\" $USERNAME"
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERUID" ]]; then
|
||
|
echo "usermod -u $USERUID $USERNAME"
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERGID" ]]; then
|
||
|
echo "usermod -g $USERGID $USERNAME"
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERGROUPS" ]]; then
|
||
|
echo "usermod -G $(echo $USERGROUPS | tr "|" ",") $USERNAME"
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$TLFN" ]]; then
|
||
|
echo "chfn -p \"$TLFN\" $USERNAME"
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$EXTRAINFO" ]]; then
|
||
|
echo "usermod -c \"$EXTRAINFO\" $USERNAME"
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$USERSHELL" ]]; then
|
||
|
echo "usermod -s $USERSHELL $USERNAME"
|
||
|
else
|
||
|
echo "usermod -s /bin/bash $USERNAME"
|
||
|
fi
|
||
|
|
||
|
if [[ $USERLOCKED == "SI" ]]; then
|
||
|
echo "usermod -L $USERNAME"
|
||
|
fi
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
deleteUsers ()
|
||
|
{
|
||
|
while read line; do
|
||
|
USERNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
echo "[+] Deleting user $USERNAME..."
|
||
|
userdel -r $USERNAME 2>/dev/null
|
||
|
groupdel $USERNAME 2>/dev/null
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
deleteUsersDry ()
|
||
|
{
|
||
|
while read line; do
|
||
|
USERNAME=$(turnLowercase $(cutter "${line}" "1"))
|
||
|
echo "userdel -r $USERNAME"
|
||
|
echo "groupdel $USERNAME"
|
||
|
done <<< "$FILE_CONTENTS"
|
||
|
}
|
||
|
|
||
|
|
||
|
for arg in "$@"
|
||
|
do
|
||
|
if [[ "$arg" == "-h" || "$arg" == "--help" ]]; then
|
||
|
usage
|
||
|
fi
|
||
|
if [[ "$arg" == "--dry-run" ]]; then
|
||
|
DRYRUN=true
|
||
|
fi
|
||
|
if [[ "$arg" == "--create-groups" ]]; then
|
||
|
CREATE_GROUPS=true
|
||
|
fi
|
||
|
if [[ "$arg" == "--delete-groups" ]]; then
|
||
|
DELETE_GROUPS=true
|
||
|
fi
|
||
|
if [[ "$arg" == "--create-users" ]]; then
|
||
|
CREATE_USERS=true
|
||
|
fi
|
||
|
if [[ "$arg" == "--delete-users" ]]; then
|
||
|
DELETE_USERS=true
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [[ -z "$1" ]]; then
|
||
|
usage
|
||
|
fi
|
||
|
|
||
|
if [[ "$CREATE_GROUPS" == true ]]; then
|
||
|
if [[ "$DRYRUN" == true ]]; then
|
||
|
createGroupsDry
|
||
|
else
|
||
|
rootCheck
|
||
|
createGroups
|
||
|
fi
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
if [[ "$DELETE_GROUPS" == true ]]; then
|
||
|
if [[ "$DRYRUN" == true ]]; then
|
||
|
deleteGroupsDry
|
||
|
else
|
||
|
rootCheck
|
||
|
deleteGroups
|
||
|
fi
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
if [[ "$CREATE_USERS" == true ]]; then
|
||
|
if [[ "$DRYRUN" == true ]]; then
|
||
|
createUsersDry
|
||
|
else
|
||
|
rootCheck
|
||
|
createUsers
|
||
|
fi
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
if [[ "$DELETE_USERS" == true ]]; then
|
||
|
if [[ "$DRYRUN" == true ]]; then
|
||
|
deleteUsersDry
|
||
|
else
|
||
|
rootCheck
|
||
|
deleteUsers
|
||
|
fi
|
||
|
exit
|
||
|
fi
|