脚本中的未知代码

脚本中的未知代码

我在别人给我的脚本中发现了一些代码,作为我正在做的项目的 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
}

任何帮助识别这些的帮助都将非常有帮助。

答案1

第一个函数检查文件是否$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您会注意到, evaluate的实例为空,因为(与 不同\$1)它们不受 shell 扩展保护。使用%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以便文件只被写入/移动一次。

答案2

该脚本包含两个函数定义。第一个函数,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

第二个函数安装日志旋转并为其创建一个配置文件。

答案3

chage程序会更改所有用户的密码有效期。也就是说,它只允许他们最多保留当前密码 60 天。它每天运行。0截至https://security.stackexchange.com/questions/78758/what-is-the-purpose-of-the-password-minimum-age-setting。也许问https://security.stackexchange.com如果确实推荐的话。

为什么logrotate要提高安全性这有点超出我的理解范围。

相关内容