#!/bin/bash # # vhost-stack # https://git.stack-source.com/msb/vhost-stack # MIT License Copyright (c) 2021 Matthew Saunders Brown # load include file source $(dirname $0)/vhost.sh help() { thisfilename=$(basename -- "$0") echo "Add system user to server." echo "" echo "usage: $thisfilename username [OPTIONS]" echo "" echo " -h Print this help." echo " -p PASSWORD Password for username. Optional, random password generated if none specified." echo " -u UID Numberic User ID to assign to user. Optional, next available uid set if none specified." exit } # check for and set username if [ -n "$1" ]; then if [ $1 == "-h" ]; then help else username="${1,,}" shift fi else echo "username not set" exit 1 fi while getopts "hp:u:" opt; do case "${opt}" in h ) help ;; p ) password=${OPTARG} ;; u ) uid=${OPTARG} ;; \? ) echo "Invalid option: $OPTARG" exit 1 ;; : ) echo "Invalid option: $OPTARG requires an argument" exit 1 ;; esac done # generate password if none specified if [ ! -n "$password" ]; then password=`/usr/bin/pwgen 12 1` fi # get next UID if none specified if [ ! -n "$uid" ]; then userid=`awk -F: '{uid[$3]=1}END{for(x=1000; x<=65534; x++) {if(uid[x] != ""){}else{print x; exit;}}}' /etc/passwd` fi # user & related files are only added if they don't already exist # in this way it's safe to repeatedly try to add the same user if ! /bin/grep -q "^$username:" /etc/passwd; then newusers="$username:$password:$userid:$userid::/home/$username:/bin/bash" echo "$newusers"|newusers pwck -s grpck -s fi if [[ ! -d "/home/$username" ]]; then install -d -o $username -g $username -m 755 /home/$username else chown -R $username:$username /home/$username fi if [[ ! -f "/home/$username/.bash_logout" ]]; then install -o $username -g $username -m 640 /etc/skel/.bash_logout /home/$username fi if [[ ! -f "/home/$username/.bashrc" ]]; then install -o $username -g $username -m 640 /etc/skel/.bashrc /home/$username echo '' >> /home/$username/.bashrc echo '# local settings' >> /home/$username/.bashrc echo '' >> /home/$username/.bashrc echo 'export TERM=xterm-256color' >> /home/$username/.bashrc echo '' >> /home/$username/.bashrc echo 'command_not_found_handle () {' >> /home/$username/.bashrc echo ' /usr/local/libexec/command-not-found-handle $@' >> /home/$username/.bashrc echo ' return 127' >> /home/$username/.bashrc echo '}' >> /home/$username/.bashrc fi if [[ ! -f "/home/$username/.profile" ]]; then install -o $username -g $username -m 640 /etc/skel/.profile /home/$username fi