Shell Script : Security Tunning

Este script faz algumas alterações para melhorias no sistema dedicado a segurança .

Nele configuracao a chamada execute e rollback , para executar e voltar backup caso seja necessário

./hardening.sh execute
./harning.sh rollback

O uso deste script é de responsabilidade total de quem estiver executando , sempre tenha certeza do que está rodando em sua máquina.

 

#!/bin/bash
#FAJLINUX Hardening

start() {
echo $'Executando hardening!'

echo "1. Checando alguns pacotes basicos que nao deverao estar no servidor"
for package in inetd ypserv tftp-server telnet-server rsh-serve
do
if ! rpm -qa | grep $package >& /etc/null;
then
echo "package $package nao esta instalado"
else
echo "The $package nao esta instalado. Removendo agora."
yum erase $package
fi
done
sleep 2
echo " "


echo "2. Checking configuracoes do SELINUX"
x=`cat /etc/sysconfig/selinux | grep ^SELINUX | head -n 1 | awk -F= '{print $2}'`
if [ $x == disabled ]
then
cp /etc/sysconfig/selinux /etc/sysconfig/selinux.bkp
echo "SElinux esta desabilitado"
echo "Alterando para permissive"
sed -i 's/^SELINUX=disabled/SELINUX=permissive/' /etc/sysconfig/selinux
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/sysconfig/selinux
else
echo "SElinux está setado para opcao permissive"
fi
sleep 2
echo " "

cp /etc/login.defs /etc/login.defs.bkp
echo "3. Alterando paramentos de periodo de troca de senha"
sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS  60' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS  1' /etc/login.defs
sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN   8' /etc/login.defs
sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE   15' /etc/login.defs
echo "Mudanca nos arquivos foram feitas /etc/login.defs foram feitas"
sleep 2
echo " "

echo "4. Verificando contas com senhas vazias:"
x=`awk -F: '($2 == "") {print}' /etc/shadow | wc -l`
if [ $x -lt 1 ]
then
echo "Sem contas com senha vazias"
else
echo "Reverifique suas contas, pois foram encontrados contas sem senha"
fi
sleep 2


echo "5. Checando se contas Non-Root tem UID setado para 0:"
x=`awk -F: '($3 == "0") {print}' /etc/passwd | awk -F: '{print $1}'`
if [ $x == root ]
then
echo "Nao ha conta com o UID 0 fora o  ROOT"
else
echo "***** Revise suas contas , pois existem contas UID 0"
fi
sleep 2
echo " "

echo "6. Voce quer realizar ajustes no SSH ?
Tenha certeza que voce tem uma conta sudo (Sim ou Nao) "
read resposta
if [ $resposta == "Sim" ]
then
cp /etc/ssh/ssh_config /etc/ssh_config.bkp
echo PermitRootLogin no >> /etc/ssh/ssh_config
sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding no/g' /etc/ssh/ssh_config
sed -i 's/#X11Forwarding no/X11Forwarding no/g' /etc/ssh/ssh_config
sed -i 's/X11Forwarding yes/#X11Forwarding yes/g' /etc/ssh/ssh_config
sed -i 's/#StrictModes yes/StrictModes yes/g' /etc/ssh/ssh_config
sed -i 's/#IgnoreRhosts yes/IgnoreRhosts yes/g' /etc/ssh/ssh_config
sed -i 's/#HostbasedAuthentication no/HostbasedAuthentication no/g' /etc/ssh/ssh_config
sed -i 's/#RhostsRSAAuthentication no/RhostsRSAAuthentication no/g' /etc/ssh/ssh_config
service sshd restart
sleep 2
else
echo "Continuando hardening..."
fi


echo "7. Linux kernel hardening:"
cp /etc/sysctl.conf /etc/sysctl.conf.backup
echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.forwarding = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.mc_forwarding = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.log_martians = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.log_martians = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 4096" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
sleep 2
echo "Alteracoes em /etc/sysctl.conf foram feitas."
sysctl -p &
sleep 1
echo " "

echo "8. desabilitando os usuarios 'lp' e 'game' do arquivo passwd:"
sed -i 's/^lp/#lp/' /etc/passwd
sed -i 's/^games/#games/' /etc/passwd

sed -i 's/^lp/#lp/' /etc/group
sed -i 's/^games/#games/' /etc/group
echo "Users are disabled"
sleep 1
echo " "

echo "*****************************************************************************" > /etc/motd
echo -e "!!!CUIDADO!!!\n" >> /etc/motd
echo " Este sistema é para o uso de apenas pessoal autorizado da empresa e todos os acessos estão sendo monitorados " >> /etc/motd
echo "*****************************************************************************" >> /etc/motd
cp /etc/issue /etc/issue.net
echo "O baner foi alterado."
sleep 1


echo "10. Desabilitando o crtl alt del e acertando o init"
cp /etc/inittab /etc/inittab.bkp
sed -i 's/id:5:initdefault:/id:3:initdefault:/g' /etc/inittab
sed -i 's/ca::ctrlaltdel:/#ca::ctrlaltdel:/g' /etc/inittab



}

rollback() {
rm -rf /etc/sysconfig/selinux
cp /etc/sysconfig/selinux.bkp /etc/sysconfig/selinux
rm -rf /etc/login.defs
cp /etc/login.defs.bkp /etc/login.defs
rm -rf /etc/ssh/ssh_config
cp /etc/ssh/ssh_config.bkp /etc/ssh_config
sed -i 's/^lp/lp/' /etc/passwd
sed -i 's/^games/games/' /etc/passwd
rm -rf /etc/inittab
cp /etc/inittab.bkp /etc/inittab
}


case "$1" in
execute)
start
;;
rollback)
stop
;;

*)
echo $"Use estas opcoes $0 {execute|rollback}"
exit 1
esac
exit $?