Refactor cloud-init/base.sh (#1797)

* Refactor cloud-init/base.sh

* Pass shellcheck
* Use variable for username
* Fix issues with umask and sudo
* Simplify until loops

* Use literal algo for filename in /etc/sudoers.d/10-algo-user
This commit is contained in:
djds 2020-08-03 11:36:18 -04:00 committed by GitHub
parent 3fe09bd904
commit f0d0e91be0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,25 +1,41 @@
#!/bin/bash #!/bin/bash
set -eux set -euxo pipefail
which sudo || until \ readonly user='algo'
apt-get update -y && \
apt-get install sudo -yf --install-suggests; do export DEBIAN_FRONTEND='noninteractive'
until which sudo; do
apt-get update -qq
apt-get install -qqf --install-suggests sudo
sleep 3 sleep 3
done done
getent passwd algo || useradd -m -d /home/algo -s /bin/bash -G adm -p '!' algo getent passwd "${user}" \
|| useradd -m -d "/home/${user}" -s /bin/bash -G adm -p '!' "${user}"
(umask 337 && echo "algo ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/10-algo-user) (
umask 0337 \
&& printf '%s\n' "${user} ALL=(ALL) NOPASSWD:ALL" \
>"/etc/sudoers.d/10-algo-user"
)
cat <<EOF >/etc/ssh/sshd_config printf "{{ lookup('template', 'files/cloud-init/sshd_config') }}\n" \
{{ lookup('template', 'files/cloud-init/sshd_config') }} >/etc/ssh/sshd_config
EOF
test -d /home/algo/.ssh || (umask 077 && sudo -u algo mkdir -p /home/algo/.ssh/) # This should be idempotent; correct permsission on .ssh dir if exists
echo "{{ lookup('file', '{{ SSH_keys.public }}') }}" | (umask 177 && sudo -u algo tee /home/algo/.ssh/authorized_keys) install -o "${user}" -g "${user}" -m 0700 -d "/home/${user}/.ssh"
dpkg -l sshguard && until apt-get remove -y --purge sshguard; do # umask does not reliably work with sudo
install -o "${user}" -g "${user}" -m 0600 \
/dev/null "/home/${user}/.ssh/authorized_keys"
printf "{{ lookup('file', '{{ SSH_keys.public }}') }}\n" \
>"/home/${user}/.ssh/authorized_keys"
until ! dpkg -l sshguard; do
apt-get remove -qq --purge sshguard
sleep 3 sleep 3
done || true done || :
systemctl restart sshd.service systemctl restart sshd.service