1
0
mirror of https://github.com/serghey-rodin/vesta.git synced 2025-03-12 04:36:25 -07:00
vesta/bin/v-add-user

218 lines
5.3 KiB
Plaintext
Raw Permalink Normal View History

2013-01-19 23:07:26 +02:00
#!/bin/bash
# info: add system user
# options: USER PASSWORD EMAIL [PACKAGE] [FNAME] [LNAME]
#
# The function creates new user account.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
2015-11-06 17:38:58 +02:00
# Argument definition
2013-01-19 23:07:26 +02:00
user=$1
password=$2; HIDE=2
2013-01-19 23:07:26 +02:00
email=$3
package=${4-default}
fname=$5
lname=$6
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
2013-01-19 23:07:26 +02:00
is_user_free() {
2016-01-20 11:03:49 +03:00
check_sysuser=$(cut -f 1 -d : /etc/passwd | grep "^$user$" )
2013-01-19 23:07:26 +02:00
if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then
check_result $E_EXISTS "user $user exists"
2013-01-19 23:07:26 +02:00
fi
}
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '3' "$#" 'USER PASSWORD EMAIL [PACKAGE] [FNAME] [LNAME]'
is_format_valid 'user' 'email' 'package'
2013-01-19 23:07:26 +02:00
if [ ! -z "$fname" ]; then
is_format_valid 'fname' 'lname'
2013-01-19 23:07:26 +02:00
fi
is_user_free "$user"
2015-03-29 12:39:42 +03:00
is_password_valid
2013-01-19 23:07:26 +02:00
is_package_valid
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Parsing package data
pkg_data=$(cat $VESTA/data/packages/$package.pkg |egrep -v "TIME|DATE")
2013-01-19 23:07:26 +02:00
# Checking shell
shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
shell=$(grep -w "$shell_conf" /etc/shells |head -n1)
2013-01-19 23:07:26 +02:00
# Adding user
/usr/sbin/useradd "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"
2015-10-28 16:34:41 +02:00
check_result $? "user creation failed" $E_INVALID
2013-01-19 23:07:26 +02:00
# Adding password
echo "$user:$password" | /usr/sbin/chpasswd
2013-01-19 23:07:26 +02:00
# Building directory tree
mkdir $HOMEDIR/$user/conf
if [ ! -z "$WEB_SYSTEM" ]; then
nginxuser=$(ps -eo user,comm|grep nginx|uniq|grep -v "root"|awk '{ print $1}')
mkdir $HOMEDIR/$user/conf/web $HOMEDIR/$user/web $HOMEDIR/$user/tmp
chmod 751 $HOMEDIR/$user/conf/web
chmod 710 $HOMEDIR/$user/web
chmod 700 $HOMEDIR/$user/tmp
chown $user:$nginxuser $HOMEDIR/$user/web
chown $user:$user $HOMEDIR/$user/tmp
2013-01-19 23:07:26 +02:00
fi
if [ ! -z "$MAIL_SYSTEM" ]; then
mkdir $HOMEDIR/$user/conf/mail $HOMEDIR/$user/mail
chmod 751 $HOMEDIR/$user/mail $HOMEDIR/$user/conf/mail
2013-01-19 23:07:26 +02:00
fi
if [ ! -z "$DNS_SYSTEM" ]; then
2013-01-19 23:07:26 +02:00
mkdir $HOMEDIR/$user/conf/dns
chmod 751 $HOMEDIR/$user/conf/dns
fi
# Set permissions
chmod a+x $HOMEDIR/$user
2013-04-04 00:43:09 +03:00
chattr +i $HOMEDIR/$user/conf
2013-01-19 23:07:26 +02:00
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Adding user dir
mkdir -p $USER_DATA/ssl $USER_DATA/dns $USER_DATA/mail
2013-01-19 23:07:26 +02:00
# Creating configuration files and pipes
touch $USER_DATA/backup.conf \
$USER_DATA/history.log \
$USER_DATA/stats.log \
$USER_DATA/web.conf \
$USER_DATA/dns.conf \
$USER_DATA/mail.conf \
$USER_DATA/db.conf \
$USER_DATA/cron.conf
chmod 770 $USER_DATA \
$USER_DATA/ssl \
$USER_DATA/dns \
$USER_DATA/mail
chmod 660 $USER_DATA/backup.conf \
$USER_DATA/history.log \
$USER_DATA/stats.log \
$USER_DATA/web.conf \
$USER_DATA/dns.conf \
$USER_DATA/mail.conf \
$USER_DATA/db.conf \
$USER_DATA/cron.conf
# Updating queue pipes
2013-03-13 15:18:57 +02:00
echo "$BIN/v-update-user-disk $user" >> $VESTA/data/queue/disk.pipe
if [ ! -z "$WEB_SYSTEM" ]; then
2013-01-19 23:07:26 +02:00
echo "$BIN/v-update-web-domains-traff $user" \
>> $VESTA/data/queue/traffic.pipe
2013-03-13 15:18:57 +02:00
echo "$BIN/v-update-web-domains-disk $user" >> $VESTA/data/queue/disk.pipe
2013-01-19 23:07:26 +02:00
fi
if [ ! -z "$MAIL_SYSTEM" ]; then
2013-03-13 15:18:57 +02:00
echo "$BIN/v-update-mail-domains-disk $user" >> $VESTA/data/queue/disk.pipe
2013-01-19 23:07:26 +02:00
fi
if [ ! -z "$DB_SYSTEM" ]; then
2013-03-13 15:18:57 +02:00
echo "$BIN/v-update-databases-disk $user" >> $VESTA/data/queue/disk.pipe
2013-01-19 23:07:26 +02:00
fi
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
2013-01-19 23:07:26 +02:00
# 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='$(generate_password)'
2013-01-19 23:07:26 +02:00
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'
2013-01-24 12:49:22 +02:00
LANGUAGE=''
2015-10-29 15:01:14 +02:00
NOTIFICATIONS='no'
TIME='$time'
DATE='$date'" > $USER_DATA/user.conf
2013-01-19 23:07:26 +02:00
chmod 660 $USER_DATA/user.conf
2014-05-12 22:25:19 +03:00
# Updating quota
if [ "$DISK_QUOTA" = 'yes' ]; then
$BIN/v-update-user-quota "$user"
fi
2013-01-19 23:07:26 +02:00
# Updating admin counter
if [ "$user" != 'admin' ]; then
increase_user_value 'admin' '$U_USERS'
fi
2013-07-12 10:37:54 +03:00
# Run template trigger
if [ -x "$VESTA/data/packages/$package.sh" ]; then
$VESTA/data/packages/$package.sh "$user" "$email" "$fname" "$lname"
fi
2015-09-18 17:42:48 +03:00
# Adding jailed sftp env
if [ ! -z "$SFTPJAIL_KEY" ]; then
$BIN/v-add-user-sftp-jail $user
fi
2013-01-19 23:07:26 +02:00
# Logging
log_history "added system user $user" '' 'admin'
log_event "$OK" "$ARGUMENTS"
2013-01-19 23:07:26 +02:00
exit