| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #!/bin/bash
- # info: add system user
- # options: user password email [package] [fname] [lname]
- #
- # The function creates new user account.
- #----------------------------------------------------------#
- # Variable&Function #
- #----------------------------------------------------------#
- # Argument defenition
- user=$1
- password=$2
- email=$3
- package=${4-default}
- fname=$5
- lname=$6
- # Includes
- source $VESTA/conf/vesta.conf
- source $VESTA/func/main.sh
- # Hiding password
- A2='******'
- EVENT="DATE='$DATE' TIME='$TIME' CMD='$SCRIPT' A1='$A1' A2='$A2' A3='$A3'"
- EVENT="$EVENT A4='$A4' A5='$A5' A6='$A6' A7='$A7' A8='$A8' A9='$A9'"
- is_user_free() {
- check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" )
- if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then
- echo "Error: user $user exist"
- log_event "$E_EXISTS" "$EVENT"
- exit $E_EXISTS
- fi
- }
- #----------------------------------------------------------#
- # Verifications #
- #----------------------------------------------------------#
- check_args '3' "$#" 'user password email [package] [fname] [lname]'
- validate_format 'user' 'password' 'email' 'package'
- if [ ! -z "$fname" ]; then
- validate_format 'fname' 'lname'
- fi
- is_user_free "$user"
- is_package_valid
- #----------------------------------------------------------#
- # Action #
- #----------------------------------------------------------#
- # Parsing package data
- pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |grep -v DATE)
- # Checking shell
- shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
- shell=$(/usr/bin/chsh --list-shells | grep -w "$shell_conf" |head -n1)
- # Adding user
- /usr/sbin/adduser "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"
- # Adding password
- echo "$password" | /usr/bin/passwd "$user" --stdin &>/dev/null
- # Building directory tree
- mkdir $HOMEDIR/$user/conf
- if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
- mkdir $HOMEDIR/$user/conf/web
- mkdir $HOMEDIR/$user/web
- mkdir $HOMEDIR/$user/tmp
- chmod 751 $HOMEDIR/$user/conf/web
- chmod 751 $HOMEDIR/$user/web
- chmod 771 $HOMEDIR/$user/tmp
- chown $user:$user $HOMEDIR/$user/web
- fi
- if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
- mkdir $HOMEDIR/$user/conf/mail
- mkdir $HOMEDIR/$user/mail
- chmod 751 $HOMEDIR/$user/mail
- chmod 751 $HOMEDIR/$user/conf/mail
- fi
- if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
- mkdir $HOMEDIR/$user/conf/dns
- chmod 751 $HOMEDIR/$user/conf/dns
- fi
- # Set permissions
- chmod a+x $HOMEDIR/$user
- # Checking quota
- if [ ! -z "$DISK_QUOTA" ] && [ "$DISK_QUOTA" != 'no' ]; then
- DISK_QUOTA=$(echo "$pkg_data" | grep 'DISK_QUOTA' | cut -f 2 -d \')
- #$BIN/v-add-user_quota "$user" "$DISK_QUOTA"
- fi
- #----------------------------------------------------------#
- # Vesta #
- #----------------------------------------------------------#
- # Adding user dir
- mkdir $USER_DATA
- chmod 770 $USER_DATA
- # Creating configuration files and pipes
- touch $USER_DATA/backup.conf
- chmod 660 $USER_DATA/backup.conf
- touch $USER_DATA/history.log
- chmod 660 $USER_DATA/history.log
- touch $USER_DATA/stats.log
- chmod 660 $USER_DATA/stats.log
- echo "v-update-user-disk $user" >> $VESTA/data/queue/disk.pipe
- if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
- mkdir $USER_DATA/ssl
- chmod 770 $USER_DATA/ssl
- touch $USER_DATA/web.conf
- chmod 660 $USER_DATA/web.conf
- echo "$BIN/v-update-web-domains-traff $user" \
- >> $VESTA/data/queue/traffic.pipe
- echo "v-update-web-domains-disk $user" >> $VESTA/data/queue/disk.pipe
- fi
- if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
- mkdir $USER_DATA/dns
- chmod 770 $USER_DATA/dns
- touch $USER_DATA/dns.conf
- chmod 660 $USER_DATA/dns.conf
- fi
- if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
- mkdir $USER_DATA/mail
- chmod 770 $USER_DATA/mail
- touch $USER_DATA/mail.conf
- chmod 660 $USER_DATA/mail.conf
- echo "v-update-mail-domains-disk $user" >> $VESTA/data/queue/disk.pipe
- fi
- if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
- touch $USER_DATA/db.conf
- chmod 660 $USER_DATA/db.conf
- echo "v-update-databases-disk $user" >> $VESTA/data/queue/disk.pipe
- fi
- if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
- touch $USER_DATA/cron.conf
- chmod 660 $USER_DATA/cron.conf
- fi
- # Filling user config
- if [ "$user" != 'admin' ]; then
- ip_avail=$($BIN/v-list-user-ips admin plain |grep -w shared|wc -l)
- u_users=0
- else
- ip_avail=0
- u_users=1
- fi
- echo "FNAME='$fname'
- LNAME='$lname'
- PACKAGE='$package'
- $pkg_data
- CONTACT='$email'
- CRON_REPORTS='yes'
- MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)'
- RKEY='$(gen_password)'
- SUSPENDED='no'
- SUSPENDED_USERS='0'
- SUSPENDED_WEB='0'
- SUSPENDED_DNS='0'
- SUSPENDED_MAIL='0'
- SUSPENDED_DB='0'
- SUSPENDED_CRON='0'
- IP_AVAIL='$ip_avail'
- IP_OWNED='0'
- U_USERS='$u_users'
- U_DISK='0'
- U_DISK_DIRS='0'
- U_DISK_WEB='0'
- U_DISK_MAIL='0'
- U_DISK_DB='0'
- U_BANDWIDTH='0'
- U_WEB_DOMAINS='0'
- U_WEB_SSL='0'
- U_WEB_ALIASES='0'
- U_DNS_DOMAINS='0'
- U_DNS_RECORDS='0'
- U_MAIL_DOMAINS='0'
- U_MAIL_DKIM='0'
- U_MAIL_ACCOUNTS='0'
- U_DATABASES='0'
- U_CRON_JOBS='0'
- U_BACKUPS='0'
- TIME='$TIME'
- DATE='$DATE'" > $USER_DATA/user.conf
- chmod 660 $USER_DATA/user.conf
- # Updating admin counter
- if [ "$user" != 'admin' ]; then
- increase_user_value 'admin' '$U_USERS'
- fi
- # Logging
- log_history "added system user $user" '' 'admin'
- log_event "$OK" "$EVENT"
- exit
|