Я нашел некоторый код в скрипте, который мне дал другой человек в качестве ресурса для блокировки / усиления Ubuntu 16.04 для проекта, которым я занимаюсь.
Я понятия не имею, что он делает, и не хочу его запускать, если я не могу определить изменение, которое он сделает, кто-нибудь знает о том, что он делает или меняет? Только код без краткого пояснительного комментария, и это единственное, чего я не знаю. Кроме того, вторая функция идентифицируется по функции, но я не понимаю цель или особенности.
function bacon.config.ubuntu.chage() {
CHAGE_SCRIPT='/etc/cron.daily/userchage'
if [ ! -e $CHAGE_SCRIPT ]; then
printf "#%c/bin/bash \nfor i in \$(awk -F: '{if(($3 >= 1000)&&($3 <65534)) print \$1}' /etc/passwd); do \nchage -m 0 -M 60 -W 10 \$i \ndone \n" ! > $CHAGE_SCRIPT
chmod +x $CHAGE_SCRIPT
fi
}
function bacon.config.ubuntu.log.rotate() {
echo "bacon.config.ubuntu.log.rotate: [INFO] Installing logrotate..."
sudo apt-get install logrotate 1>/dev/null
echo "bacon.config.ubuntu.log.rotate: [INFO] Configuring logrotate..."
sed 's/rotate 4/rotate 60/' /etc/logrotate.conf > /etc/logrotate.conf.new
mv /etc/logrotate.conf.new /etc/logrotate.conf
sed 's/rotate 1/rotate 60/' /etc/logrotate.conf > /etc/logrotate.conf.new
mv /etc/logrotate.conf.new /etc/log.rotate.conf
sed 's/rotate 7/rotate 1825/' /etc/logrotate.d/rsyslog > /etc/logrotate.d/rsyslog.new
mv /etc/logrotate.d/rsyslog.new /etc/logrotate.d/rsyslog
}
Любая помощь в определении их была бы удивительной.
Первая функция проверяет, существует ли файл $CHAGE_SCRIPT
, и если нет, пытается создать его с помощью оператора printf
. Вы можете увидеть, что делает этот оператор, запустив его в терминале:
$ printf "#%c/bin/bash \nfor i in \$(awk -F: '{if(($3 >= 1000)&&($3 <65534)) print \$1}' /etc/passwd); do \nchage -m 0 -M 60 -W 10 \$i \ndone \n" !
#!/bin/bash
for i in $(awk -F: '{if(( >= 1000)&&( <65534)) print $1}' /etc/passwd); do
chage -m 0 -M 60 -W 10 $i
done
Вы заметите, что экземпляры $3
оценивают пустые, потому что (в отличие от \$1
) они не защищены от расширения оболочкой , Использование %c
для вставки !
в #!/bin/bash
предполагает, что оригинальный автор не совсем понимает, как работает расширение истории bash.
ИМХО, было бы проще и понятнее использовать здесь документ:
function bacon.config.ubuntu.chage() {
CHAGE_SCRIPT='/etc/cron.daily/userchage'
if [ ! -e "$CHAGE_SCRIPT" ]; then
cat << 'EOF' > "$CHAGE_SCRIPT"
#!/bin/bash
for i in $(awk -F: '{if(($3 >= 1000)&&($3 <65534)) print $1}' /etc/passwd); do
chage -m 0 -M 60 -W 10 $i
done
EOF
chmod +x "$CHAGE_SCRIPT"
fi
}
Работа второй функции должна быть довольно очевидной - ее можно упростить, объединив все команды sed
так, что файл записывается / перемещается только один раз.
Скрипт содержит два определения функций. Первая функция, bacon.config.ubuntu.chage
, создает скрипт в /etc/cron.daily/userchage
(комментарии, добавленные мной):
#!/bin/bash
# loop through users with uid >= 1000 and uid < 65534 theoretically, but $3 isn't escaped -> doesn't work
for i in $(awk -F: '{if(( >= 1000)&&( <65534)) print $1}' /etc/passwd);do
# set password to expire after 60 days, warning after 50 days
chage -m 0 -M 60 -W 10 $i
done
Вторая функция устанавливает logrotate и создает файл конфигурации для него.
Программа chage
изменяет срок действия пароля для всех пользователей. Таким образом, он позволяет им сохранять свой текущий пароль не более 60 дней . Он запускается ежедневно. Минимальная продолжительность 0
сомнительна с https://security.stackexchange.com/questions/78758/what-is-the-purpose-of-the-password-minimum-age-setting , Возможно, спросите на https://security.stackexchange.com , действительно ли это рекомендуется.
Почему logrotate
должен улучшить безопасность, немного выше меня.