Неизвестный код в скрипте

Я нашел некоторый код в скрипте, который мне дал другой человек в качестве ресурса для блокировки / усиления 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
}

Любая помощь в определении их была бы удивительной.

7
задан 25 April 2019 в 16:16

3 ответа

Первая функция проверяет, существует ли файл $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 так, что файл записывается / перемещается только один раз.

0
ответ дан 25 April 2019 в 16:16

Скрипт содержит два определения функций. Первая функция, 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 и создает файл конфигурации для него.

0
ответ дан 25 April 2019 в 16:16

Программа chage изменяет срок действия пароля для всех пользователей. Таким образом, он позволяет им сохранять свой текущий пароль не более 60 дней . Он запускается ежедневно. Минимальная продолжительность 0 сомнительна с https://security.stackexchange.com/questions/78758/what-is-the-purpose-of-the-password-minimum-age-setting , Возможно, спросите на https://security.stackexchange.com , действительно ли это рекомендуется.

Почему logrotate должен улучшить безопасность, немного выше меня.

0
ответ дан 25 April 2019 в 16:16

Другие вопросы по тегам:

Похожие вопросы: