#!/bin/sh set -e set -u main() { cmd_http_get="curl -fsS -#" if ! command -v curl > /dev/null; then cmd_http_get="wget -O -" fi # Add User 'app' # Picking 'app' by common convention (what Docker & Vagrant use). my_new_user="${1:-"app"}" my_key_url="${2:-}" my_keys="" if [ "root" != "$(id -u -n)" ]; then echo "webi adduser: running user is already a non-root user" exit 0 fi if [ -n "${my_key_url}" ]; then my_keys="$( $cmd_http_get "${my_key_url}" )" elif [ -e ~/.ssh/authorized_keys ] && grep -q -v '#' ~/.ssh/authorized_keys; then my_keys="$( cat "${HOME}/.ssh/authorized_keys" )" else echo "" echo "Error:" echo " You must add a key to ~/.ssh/authorized_keys before adding a new ssh user." echo "" echo "To fix:" echo " Run '$cmd_http_get https://webi.sh/ssh-pubkey | sh' on your local system, " echo " then add that key to ~/.ssh/authorized_keys on this (the remote) system. " echo "" exit 1 fi adduser --disabled-password --gecos '' "$my_new_user" my_password=$(openssl rand -hex 16) printf '%s\n%s' "${my_password}" "${my_password}" | passwd "${my_new_user}" # make 'app' a sudo-er (admin) adduser "$my_new_user" sudo echo "$my_new_user ALL=(ALL:ALL) NOPASSWD: ALL" | tee "/etc/sudoers.d/$my_new_user" # allow users who can already login as 'root' to login as 'app' mkdir -p "/home/$my_new_user/.ssh/" chmod 0700 "/home/$my_new_user/.ssh/" echo "${my_keys}" >> "/home/$my_new_user/.ssh/authorized_keys" chmod 0600 "/home/$my_new_user/.ssh/authorized_keys" touch "/home/$my_new_user/.ssh/config" chmod 0644 "/home/$my_new_user/.ssh/config" chown -R "$my_new_user":"$my_new_user" "/home/$my_new_user/.ssh/" chown -R "$my_new_user":"$my_new_user" "/home/$my_new_user/.ssh/" # ensure that 'app' has an SSH Keypair # sudo -i -u "$my_new_user" sh -c \ # "ssh-keygen -b 2048 -t rsa -f '/home/$my_new_user/.ssh/id_rsa' -q -N ''" WEBI_HOST=${WEBI_HOST:-"https://webinstall.dev"} sudo -i -u "$my_new_user" sh -c "$cmd_http_get '$WEBI_HOST/ssh-pubkey' | sh > /dev/null" if test -z "${SSH_ADDUSER_AUTO:-}"; then echo "" echo "!! BREAKING CHANGE !!" echo "" echo " 'ssh-adduser' no longer checks or hardens /etc/ssh/sshd_config" echo "" echo " Run 'sshd-prohibit-password' to secure /etc/ssh/sshd_config" echo "" fi echo "Created user '${my_new_user}' as sudoer with a random password." echo "(set a new password with 'password ${my_new_user}')" echo "" echo "note: you can add an ssh key passphrase with 'webi ssh-setpass'" } main "${1:-app}" "${2:-}"