echo -e "Read carefully throughout this script and correct it for your needs. Then run it as root. Are you ready? (y/N)" read ready # default answer: answer not set or it's first letter is not `y` or `Y` if [ -v $ready ] || ([ ${ready::1} != "y" ] && [ ${ready::1} != "Y" ]) then exit 1 fi ## Add user to system ## echo -e "Enter username if you want to create new user or add existing user to 'wheel' group; enter nothing to skip" read username if [ ! -v $username ] then if ! getent passwd $username >/dev/null # user doesn't exist yet then useradd -m $username password=$(openssl rand -base64 9) echo -e "password\npassword" | passwd $username --stdin fi # if wheel group exists, add the user to it if getent group wheel > /dev/null then usermod -aG wheel $username else no_wheel=true fi fi ## Configure ssh ## echo -e "Enter new ssh port (> 1024 and < 65535)" read port if [ ! -v $port ] then if ss -tunlp | grep :${port} > /dev/null then echo -e "port ${port} is already in use, aborting" exit 1 else ssh_port=$port # sometimes port 22 is already commented in config, # but 22 port can be needed if new port is not available echo "Port 22" | tee -a /etc/ssh/sshd_config echo "Port ${port}" | tee -a /etc/ssh/sshd_config sshd -t && systemctl restart sshd fi else echo -e "sshPort not set, aborting" exit 1 fi ## Configure firewall ## if [ $(command -v firewall-cmd > /dev/null) ] && [ $(firewall-cmd --state) = "running" ] then firewall-cmd --list-all firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --permanent --add-port=${ssh_port}/tcp firewall-cmd --reload fi ## Configure SELinux ## command -v semanage > /dev/null && semanage port -a -t ssh_port_t -p tcp ${ssh_port} ## for podman ## # allow user apps (including podman) use ports from 80 and above echo "net.ipv4.ip_unprivileged_port_start=80" > /etc/sysctl.d/unprivileged-ports.conf sysctl --system if [ -v $username ] then echo -e "Enter username for which to enable long-running services" read username fi # allow non-logged user to run long-running services, such as podman container if [ ! -v $username ] then loginctl enable-linger $username else echo -e "username not set, aborting" exit 1 fi ## Summary ## echo -e " ---- Summary ---- " if [ ! -v $password ] then echo -e "New user ${username} is created with password: ${password} don't forget to change it with passwd ${username} " fi echo -e "Check that ssh is available at port ${ssh_port} then close port 22 commenting line(s) Port 22 in /etc/ssh/sshd_config and running systemctl restart sshd " echo -e "Then you are ready to log out from the server, then log in as ${username} with new ssh port ${ssh_port}. " echo -e "If you encouner problems, try to reboot server first, to restart services. "