ops/bin/envs_user_manage

256 lines
6.9 KiB
Plaintext
Raw Permalink Normal View History

2019-10-14 22:08:03 +00:00
#!/usr/bin/env bash
domain='envs.net'
short_dom="$(echo $domain | awk -F. '{printf $1}')"
cmd="$1"
user="$2"
mailTo="$3"
ssh_pubkey="$4"
2020-01-04 00:12:24 +00:00
#do not start znc to add more users
no_znc="$5" # check if emtpy
2019-10-14 22:08:03 +00:00
newpw=$(pwgen -s 12 1)
pwcrypt=$(perl -e "print crypt('${newpw}', 'sa');")
2020-01-04 00:12:24 +00:00
# default mail header
2019-10-14 22:08:03 +00:00
head_mime='MIME-Version: 1.0'
head_type='Content-type: text/plain; charset=utf-8'
head_def="$head_mime\r\n$head_type"
###
2020-01-16 21:08:27 +00:00
send_db_mail() {
db_type="$1"
db_sub="Subject: envs - database readme"
2020-01-16 21:08:27 +00:00
db_mail="$head_def\r\nTo: $user@$domain\r\nFrom: sudoers@$domain\r\n$db_sub"
echo -e "$db_mail\r\n$(sed -e s/_username_/"$user"/g -e s/_password_/"$newpw"/g -e s/_sql_/"$db_type"/g /usr/local/bin/envs.net/database-email.tmpl)" \
| sendmail "$user"@"$domain"
}
add_user_mysql_db() {
mysql -u root << EOM
CREATE DATABASE $user ;
2020-01-15 12:23:01 +00:00
GRANT ALL PRIVILEGES ON $user.* TO '$user'@'localhost' IDENTIFIED BY '$newpw' ;
FLUSH PRIVILEGES ;
EOM
2020-01-16 21:08:27 +00:00
send_db_mail mysql
2019-10-14 22:08:03 +00:00
}
del_user_mysql_db() {
mysql -u root << EOM
DROP DATABASE $user ;
DROP USER $user@localhost ;
FLUSH PRIVILEGES ;
EOM
}
add_user_pgsql_db() {
sudo -u postgres psql <<EOM
2020-01-16 21:08:27 +00:00
CREATE USER $user ;
ALTER USER $user WITH PASSWORD '$newpw';
CREATE DATABASE $user ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER $user ;
2020-01-16 21:08:27 +00:00
GRANT ALL PRIVILEGES ON DATABASE $user TO $user ;
EOM
2020-01-16 21:08:27 +00:00
send_db_mail pgsql
}
del_user_pgsql_db() {
sudo -u postgres psql <<EOM
DROP DATABASE $user ;
DROP OWNED BY $user ;
DROP USER $user ;
EOM
2019-10-14 22:08:03 +00:00
}
2020-01-16 21:08:27 +00:00
###
2019-10-14 22:08:03 +00:00
add_user() {
useradd -m -g 9999 -s /bin/bash -p "$pwcrypt" "$user"
# set user quota
echo "$user hard nproc 200" | tee /etc/security/limits.d/"$user" >/dev/null 2>&1
setquota -u "$user" 1024M 1536M 0 0 /
# set mail aliases
echo "$user: $user@$domain" | tee -a /etc/aliases >/dev/null 2>&1
echo "$user: $user@$domain" | tee -a /etc/email-addresses >/dev/null 2>&1
# systemd service
chown -R "$user":"$short_dom" /home/"$user"/.config/systemd/user/
# set users ssh pub key
if [ -n "$ssh_pubkey" ]; then
echo "$ssh_pubkey" | tee /home/"$user"/.ssh/authorized_keys
else
nano /home/"$user"/.ssh/authorized_keys
fi
chmod 700 /home/"$user"/.ssh/
chmod 644 /home/"$user"/.ssh/authorized_keys
chown -R "$user":"$short_dom" /home/"$user"/.ssh
# setup email mailbox
lxc-attach -n mail -- bash -c "/usr/local/bin/coreapi action accounts create \
-p username=$user@$domain -p role=SimpleUsers -p language=en \
-p password=$newpw -p secondary_email=$mailTo >/dev/null 2>&1 "
sleep 3
# send readme mail
readme_sub="Subject: Welcome $user | please readme!"
2019-12-29 12:37:24 +00:00
readme_mail="$head_def\r\nTo: $mailTo\r\nCC: $user@$domain\r\nFrom: sudoers@$domain\r\n$readme_sub"
2019-10-14 22:08:03 +00:00
2020-01-16 21:08:27 +00:00
echo -e "$readme_mail\r\n$(cat /usr/local/bin/envs.net/welcome-readme.tmpl)" | sendmail "$user"@"$domain" "$mailTo"
2019-10-14 22:08:03 +00:00
2020-01-04 00:12:24 +00:00
sleep 1
2019-10-14 22:08:03 +00:00
# send welcome mail
wel_sub="Subject: Welcome to $domain | $user"
2019-10-14 22:08:03 +00:00
wel_mail="$head_def\r\nTo: $mailTo\r\nCC: $user@$domain\r\nFrom: hosting@$domain\r\n$wel_sub"
2020-01-04 00:12:24 +00:00
echo -e "$wel_mail\r\n$(sed -e s/_username_/"$user"/g -e s/_password_/"$newpw"/ /usr/local/bin/envs.net/welcome-email.tmpl)" \
2019-10-14 22:08:03 +00:00
| sendmail "$user"@"$domain" "$mailTo"
2020-01-04 00:12:24 +00:00
sleep 1
2019-10-14 22:08:03 +00:00
# subscribing to mailing list
2020-01-04 00:12:24 +00:00
echo -e "$head_def\r\nTo: team-join@$domain\r\nFrom: $user@$domain\r\nSubject: subscribe\r\n" \
2019-10-14 22:08:03 +00:00
| sudo -u "$user" sendmail team-join@"$domain"
# setup mutt
echo -e "$(sed -e s/_username_/"$user"/g -e s/_password_/"$newpw"/ /home/"$user"/.muttrc)" > /home/"$user"/.muttrc
chmod go-r /home/"$user"/.muttrc
printf '\n%s\n' "$user" > /home/"$user"/.mutt/signature
2019-10-14 22:08:03 +00:00
# setup database
#add_user_mysql_db
#add_user_pgsql_db
# setup znc account (only after request..)
#sudo -u znc pkill -SIGUSR1 znc && pkill znc
#sudo -u znc /srv/znc/add_znc_user.sh "$user"
#[ -z "$no_znc" ] && systemctl start znc.service
2019-10-14 22:08:03 +00:00
# setup weechat
sed -i s/_username_/"$user"/g /home/"$user"/.weechat/irc.conf
chmod 0700 /home/"$user"/.weechat/
2019-10-14 22:08:03 +00:00
# cleanup /etc/skel/ git stuff from user home
2020-05-20 18:45:10 +00:00
rm -rf /home/"$user"/.git /home/"$user"/.drone.yml /home/"$user"/README.md
2019-10-14 22:08:03 +00:00
# envs users update (userlist, recently updates and users_info.json)
/usr/local/bin/envs.net/envs_user_info.sh
2019-10-14 22:08:03 +00:00
# announcing new user on mastodon
sudo -u services toot post "welcome new user ~$user"
2020-01-16 21:08:27 +00:00
# cleanup current signup
2020-07-15 19:11:59 +00:00
sed -i"" "/\b$user\b/d" /var/signups_current
2019-10-14 22:08:03 +00:00
}
del_user() {
# unsubscribe mailing list
# ??
echo -e "$head_def\r\nTo: team-leave@$domain\r\nFrom: $user@$domain\r\nSubject: leave\r\n" | sudo -u "$user" sendmail team-leave@"$domain"
2020-01-16 21:08:27 +00:00
# stop user stuff
pgrep -u "$user"
ps -fp "$(pgrep -u $user)"
killall -KILL -u "$user"
2019-10-14 22:08:03 +00:00
# remove user
2020-01-16 21:08:27 +00:00
userdel -rf "$user"
2019-10-14 22:08:03 +00:00
# unset user quota
rm /etc/security/limits.d/"$user"
2020-01-16 21:08:27 +00:00
2019-10-14 22:08:03 +00:00
# unset mail aliases
2020-02-16 15:01:24 +00:00
sed -i "/\b$user\b/d" /etc/aliases
sed -i "/\b$user\b/d" /etc/email-addresses
2020-01-16 21:08:27 +00:00
2019-10-14 22:08:03 +00:00
# remove email mailbox
# get userid from lxc-attach
mail_userid=$(lxc-attach -n mail -- bash -c "/usr/local/bin/coreapi action accounts list -p search=$user@$domain | jq '.[] | .pk'")
lxc-attach -n mail -- bash -c "/usr/local/bin/coreapi action accounts delete -p id=$mail_userid"
2020-01-16 21:08:27 +00:00
2019-10-14 22:08:03 +00:00
# remove database
del_user_mysql_db
2020-01-16 21:08:27 +00:00
del_user_pgsql_db
2019-10-14 22:08:03 +00:00
# unlink gemini
2020-01-04 00:12:24 +00:00
[ -L /var/gemini/\~"$user" ] && unlink /var/gemini/\~"$user"
2020-01-16 21:08:27 +00:00
2020-01-17 00:29:26 +00:00
# remove znc and mailinglist account
2019-10-14 22:08:03 +00:00
printf '\n!!! ADMIN: please remove %s also from lists.%s and znc.%s !!!\n\n' "$user" "$domain" "$domain"
}
2020-01-04 00:12:24 +00:00
[ "$(id -u)" -ne 0 ] && printf 'Please run as root!\n' && exit 1
2019-10-14 22:08:03 +00:00
case "$cmd" in
2020-01-04 00:12:24 +00:00
add) [ $# -lt 3 ] && printf 'not enough args\n' && exit 1
2019-10-14 22:08:03 +00:00
if ! id -u "$user" >/dev/null 2>&1; then
2020-01-04 00:12:24 +00:00
printf '\nAdd User %s to %s.\n' "$user" "$domain"
2019-10-14 22:08:03 +00:00
printf 'mail to: %s\n\n' "$mailTo"
add_user
else
printf 'User already exists!\n'
fi
;;
2020-01-04 00:12:24 +00:00
del) [ $# -lt 2 ] && printf 'not enough args\n' && exit 1
2019-10-14 22:08:03 +00:00
if id -u "$user" >/dev/null 2>&1; then
printf '\nDelete User %s from %s?\n' "$user" "$domain"
select yn in "Yes" "No"; do
case $yn in
2020-01-04 00:12:24 +00:00
Yes) del_user ; break ;;
No) break ;;
2019-10-14 22:08:03 +00:00
esac ; done
else
printf 'User not exists!\n'
fi
;;
2020-01-16 21:08:27 +00:00
add_mysql) [ $# -lt 2 ] && printf 'not enough args\n' && exit 1
add_user_mysql_db
;;
del_mysql) [ $# -lt 2 ] && printf 'not enough args\n' && exit 1
del_user_mysql_db
;;
# add_pqsql) [ $# -lt 2 ] && printf 'not enough args\n' && exit 1
# add_user_pgsql_db
# ;;
# del_pqsql) [ $# -lt 2 ] && printf 'not enough args\n' && exit 1
# del_user_pgsql_db
# ;;
2019-10-14 22:08:03 +00:00
*) printf '%s | User Account Setup\n\n' "$domain"
printf 'Usage: %s\n Add a User:\n' "$(basename "$0")"
printf '\t%s add "username" "email" "ssh-pubkey"\n' "$(basename "$0")"
printf ' Delete a User:\n'
2020-01-16 21:08:27 +00:00
printf '\t%s del "username"\n\n' "$(basename "$0")"
printf ' create mysql db for User:\n'
printf '\t%s add_mysql "username"\n' "$(basename "$0")"
printf ' delete mysql db for User:\n'
printf '\t%s del_mysql "username"\n\n' "$(basename "$0")"
printf ' create pgsql db for User:\n'
printf '\t%s add_pgsql "username"\n' "$(basename "$0")"
printf ' delete pgsql db for User:\n'
printf '\t%s del_pgsql "username"\n' "$(basename "$0")"
2019-10-14 22:08:03 +00:00
;;
esac
#
exit 0