From 5bf66a6f8776f0cda283768a21310e17ba74a16e Mon Sep 17 00:00:00 2001 From: Ceres Date: Fri, 26 Sep 2025 16:31:24 +0000 Subject: [PATCH] First commit --- create_user.bash | 113 ++++++++++++++++++++++++++++++++++++++++ user_readme.md | 1 + user_site_template.html | 14 +++++ 3 files changed, 128 insertions(+) create mode 100644 create_user.bash create mode 100644 user_readme.md create mode 100644 user_site_template.html diff --git a/create_user.bash b/create_user.bash new file mode 100644 index 0000000..a3c1ef7 --- /dev/null +++ b/create_user.bash @@ -0,0 +1,113 @@ +#!/bin/bash + +# 0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 +echo '| ' +echo '| - ._ _ _._ - ._ _. _ ' +echo '| I |n| | | \/ p) /\ S T i |n| |_| / \ ~ | ' +echo 'L | | | |u| /x | \o _\ | | | | __g | \_/ ' +echo +echo -e '\e[31muser adder...\e[m' +echo +echo '> If (parenthesis) are shown, that is the default value. Enter a new value or' +echo ' press enter for the (default).' +echo + +while true; do + read -p "New user username?:" name + if ! [[ "$name" =~ '^[a-z0-9-_]{3,30}$' ]];then break;fi + echo Invalid username. + echo + echo Username must... + echo "- consist of only lowercase letters, lowercase numbers," + echo " dashes, and underscores" + echo "- be a minimum of 3 characters long" + echo "- be a maximum of 30 characters long" +done + +#Set User password +while true; do + read -p "The user's password?:" pass + if [[ "$pass" = '' ]];then break;fi + echo "Must set a password." +done + +#Add users public key +while true; do + read -p "The path to the user's pubkey?:" key + if [[ "$key" = '' ]];then break;fi + echo "Must set a pubkey." +done + +#Choose whether user will be an admin +while true; do + read -p "Will user be admin? (n):" admin + if ! [[ "$admin" =~ '^[yn]?$' ]];then break;fi + echo "Must be 'y', 'n' or empty." +done + +#Choose whether the user will have a site page +while true; do + read -p "Will user have public site? (y):" site + if ! [[ "$site" =~ '^[yn]?$' ]];then break;fi + echo "Must be 'y', 'n' or empty." +done + +#Choose whether to copy the readme +while true; do + read -p "Place readme in user's home? (y):" readme + if ! [[ "$readme" =~ '^[yn]?$' ]];then break;fi + echo "Must be 'y', 'n' or empty." +done +echo '' + +dokey='y' +if [ "$admin" = '' ];then admin='n' ;fi +if [ "$site" = '' ];then site='y' ;fi +if [ "$readme" = '' ];then readme='y' ;fi +if [ "$key" = '' ];then dokey='n' ;fi + + +echo "Creating user..." + +# vUsername vHome=/home/user vEnable usergroup +useradd "$name" -m -d "/home/$name" -s '/bin/bash' -U +# ^New user ^Make homedir ^Shell=bash + +echo "Setting password..." +yes "$pass" | passwd "$name" + +if [ "$admin" = 'y' ];then echo "Setting admin...";usermod -aG sudo;fi + +if [ "$site" = 'y' ]; then + echo "Creating site directory..." + mkdir "/home/$name/public" + echo "Copying site template..." + cp "$HOME/admin_stuff/user_site_template.html" "/home/$name/pubic/index.html" + echo "Making user owner of site directory..." + chmod "$name:$name" "/home/$name/public" -R + echo "Linking site to server..." + ln -s "/home/$name/public" "/srv/tildesite/~$name" +fi + +if [ "$readme" = 'y' ]; then + echo "Copying readme..." + cp "$HOME/admin_stuff/user_readme.md" "/home/$name/README.md" + echo "Making user owner of readme..." + chmod "$name:$name" "/home/$name/README.md" +fi + +if [ "$dokey" = 'y' ]; then + echo "Adding pubkey..." + install -dm700 "/home/$name/.ssh" + cat "$key" >> "/home/$name/.ssh/authorized_keys" + chmod 600 "/home/$name/.ssh/authorized_keys" + echo "Making user owner of authorized_keys..." + chown -R "$name:$name" "/home/$name" +fi + +echo +echo +echo -e '\e[31mUSER CREATED!\e[m (hopefully)' + + + diff --git a/user_readme.md b/user_readme.md new file mode 100644 index 0000000..1e7b484 --- /dev/null +++ b/user_readme.md @@ -0,0 +1 @@ +This file to be placed in the home directory of new tilde users. diff --git a/user_site_template.html b/user_site_template.html new file mode 100644 index 0000000..8228ace --- /dev/null +++ b/user_site_template.html @@ -0,0 +1,14 @@ + + + + + + + + My site + + +

Welcome to my site!

+

Lorem ipsum dolor sit amet...

+ +