我在别人给我的脚本中发现了一些代码,作为我正在做的项目的 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
要提高安全性这有点超出我的理解范围。