Skip to content

Instantly share code, notes, and snippets.

@Nurmukhamed
Last active June 6, 2021 13:18
Show Gist options
  • Save Nurmukhamed/ab4c0c8dee39ad9c62b450401342cc9a to your computer and use it in GitHub Desktop.
Save Nurmukhamed/ab4c0c8dee39ad9c62b450401342cc9a to your computer and use it in GitHub Desktop.
Linux console and remote access security policy

Обновление Требования были изменены, чтобы соответствовать требованиям ОС Ubuntu 18.04 Bionic Beaver. Скрипты нужно запускать в порядке, как они указаны здесь Скрипты нужно запускать как curl script-url | bash

  • Пользователь root не должен иметь возможность войти в систему с консоли;
  • Пользователь root не должен иметь возможность войти в систему удаленно через openssh;
  • Пароль пользователя root должен генерироваться автоматически, нигде не сохраняется и не должен быть известен никому;
  • В Openssh должна работать по порту 2345;
  • В Openssh должна поддерживаться авторизацию по ECDSA-публичный ключ;
  • DISABLED В Openssh должна не поддерживать авторизацию по другим публичным ключам;
  • В Openssh должна быть запрещена парольная авторизация;
  • В Openssh должна работать по протоколу 2;
  • В Openssh должен быть определен список пользователей, которым разрешена удаленная авторизация;
  • Сетевая подсистема должна блокировать больше 4 обращений в течение 30 секунд;
  • Подсистема SELINUX и (или) AppArmor должна быть включена и работать в режиме Enforcing;
  • Все сервисы должны быть настроены в соответствие с правилами SELINUX, AppArmor;

Использовались следующие статьи How to secure your ssh server with public key elliptic curve ed25519 crypto, Checking openssh sshd configuration syntax errors, How to setup Documentolog on Centos 7, very hardened, russian language, List of things for hardening Ubuntu.

#!/usr/bin/env bash
echo "Changing root shell"
usermod -s /sbin/nologin root
echo "Disabling root access via console"
rm -f /etc/securetty
touch /etc/securetty
echo "Setting random root password"
echo "root:$(openssl rand -hex 24)" | chpasswd
passwd -l root
#!/usr/bin/env bash
# Settings for ubuntu bionic beaver lts
#
#
cat<<EOF| tee /etc/ssh/sshd_config
Port 2345
Protocol 2
LogLevel VERBOSE
PermitRootLogin no
StrictModes yes
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication no
ClientAliveInterval 300
ClientAliveCountMax 0
AllowTcpForwarding no
X11Forwarding no
UseDNS no
Subsystem sftp /usr/lib/openssh/sftp-server -f AUTHPRIV -l INFO #Enable sFTP subsystem over SSH
EOF
#echo "Enabling only users listed in /etc/ssh/sshd_allow"
echo "auth required pam_listfile.so item=user sense=allow file=/etc/ssh/sshd_allow onerr=fail" >> /etc/pam.d/sshd
# echo testing sshd config
/usr/sbin/sshd -t
echo $?
systemctl restart ssh
#!/usr/bin/env bash
# use this command to generate new key
# ssh-keygen -o -t ecdsa -C "$(hostname)-$(date +'%d-%m-%Y')"
declare -A users
users["nartykaly",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBiYaqq5SmrcSk/FsKWkvDINKlhHY6l/FlEz59x+Y9/faZ7owDDhT94bNxskslnwOyuZoWvEzbadxtFp1g7op/Y= otrs.edenprime.kz-14-08-2020"
users["rjkz808",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBS2hRSs9a8WxTzNHekAuYjqAY9S/aH94FTNrKjuaeLkIovhYP/9ZkpDWfkCmMDZ4bLoU05Wgdx3mmmzrjNYvtY= MacBook-Pro-Nikolai.local-14-08-2020"
users["kotokrad",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCDuZxMdMM2j0+xtWpLgPR8FJ5J9SFkyuxCO8umH16uCzHytWa5U68jocHyjV5Lg0pnkLV6EVonmn2EnMNsWuO8= thinkpad-15-08-2020"
users["lazukinpavel",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGXd0/Orvb6Kv6MTuKd2zwoIvKgsR5jAO1NwCaoAmEfcGJ1A7d/WA5ikibwmSe0oK2FY+nHKsgRM/b9hWC7HeSE= pavel-ThinkPad-T540p-15-08-2020"
users["pavlenkoxx",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFwtqwHEvjImPgJMGrRD/RXIXVb0jRYx/wD2uVpR4zG5aPXR7ai7Ju5yALaPs/I9+x1idhwliWsuxG79Pdgt6fU= Vladislavs-MacBook-Pro.local-15-08-2020"
users["gnoblin",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNfdtqfMuiEKbEoPBkkgocg4n5AhP0tK0y8+CJbotYWBYXFH0H0dKWQ9nEWGkd+EPd0nVtRVJlD26AaXM9PX9O8= Slavs-MacBook-Pro.local-15-08-2020"
users["fanenand",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFaSc5IBk4f9pZ38CQqzRJywjqLjQucvSvv62iTP+b0cnMR0+X59O39u2IlCzPvaxH2eX3bfxXZgt4VBFtbC+e4= DESKTOP-5B5V1DA-15-08-2020"
users["vladmarkus",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMOyYZmMulrMvCvsvuUzrBwXbi1GPQtdFDIMyAKjXtPQ44JAnH0rHoW/c8kvuMxQZ5RMVOGP/3//NPGzzKhdNIQ= macbook.local-15-08-2020"
users["hawk",1]="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB7yXKfI5DELFm/7qnobwZ7Sl3gvtnNOBFndSh9LC2qxsgPpw7ImEbKvoVYh2F6PPRXiRJxoSt/VdkbFi4xhX2A= DESKTOP-GLNCUBN-15-08-2020"
for userNumber in "${!users[@]}"; do
user=$(echo ${userNumber}|cut -d "," -f 1)
number=$(echo ${userNumber}|cut -d "," -f 2)
if [ `id -u ${user} 2>/dev/null || echo -1` -ge 0 ]; then
echo "User is already added"
if [ -f "/home/${user}/.ssh/authorized_keys" ]; then
echo "/home/${user}/.ssh/authorized_keys exists."
else
touch /home/${user}/.ssh/authorized_keys
chmod 600 /home/${user}/.ssh/authorized_keys
chown ${user}:${user} -R /home/${user}/.ssh
fi
echo "${users["${userNumber}"]}" >> /home/${user}/.ssh/authorized_keys
else
#create user
adduser ${user} --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
# set random password for user
echo "${user}:$(openssl rand -hex 24)" | chpasswd
# Add users to list of allowed users to connect to ssh
echo "${user}" >> /etc/ssh/sshd_allow
# create .ssh folder and put authorized_keys
mkdir /home/${user}/.ssh
chmod 700 /home/${user}/.ssh
echo "${users["${userNumber}"]}" > /home/${user}/.ssh/authorized_keys
chmod 600 /home/${user}/.ssh/authorized_keys
chown ${user}:${user} -R /home/${user}/.ssh
#create sudoers file for user
echo "${user} ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/${user}
fi
done
chmod o-w /etc/ssh/sshd_allow
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment