33 command : |
44 ADD_PATHS="/usr/local/bin"
55 BACKUP_FILE="/etc/sudoers.backup.$(date +%Y%m%d_%H%M%S)"
6- cp /etc/sudoers "$BACKUP_FILE"
7- echo "tmp file created: $BACKUP_FILE"
6+ cp -p /etc/sudoers "$BACKUP_FILE"
87 TMP_FILE=$(mktemp /tmp/sudoers_update.XXXXXX)
98 chmod 600 "$TMP_FILE"
10- cat /etc/sudoers > "$TMP_FILE"
9+ cp -p /etc/sudoers "$TMP_FILE"
1110 cleanup() {
12- rm -rf "$TMP_FILE"
13- rm -rf "$BACKUP_FILE"
14- exit
11+ rm -f "$TMP_FILE"
12+ rm -f "$BACKUP_FILE"
1513 }
1614 trap cleanup EXIT INT TERM
1715 if grep -q "^Defaults.*secure_path" "$TMP_FILE"; then
18- EXISTING_PATH=$(grep "^Defaults.*secure_path" "$TMP_FILE" | sed -n 's/.*secure_path="\([^"]*\)".*/\1/p')
16+ echo "find current secure_path 配置"
17+ EXISTING_LINE=$(grep "^Defaults.*secure_path" "$TMP_FILE")
18+ EXISTING_PATH=$(echo "$EXISTING_LINE" | sed -e 's/.*secure_path[[:space:]]*=[[:space:]]*"\{0,1\}\([^"[:space:]]*\)"\{0,1\}.*/\1/')
1919 if [ -n "$EXISTING_PATH" ]; then
20+ echo "current secure_path: $EXISTING_PATH"
2021 NEW_PATH="$EXISTING_PATH"
21- IFS_BAK=$IFS
22- IFS=':'
23- for path in $ADD_PATHS; do
22+ IFS=':' read -ra PATHS_TO_ADD <<< "$ADD_PATHS"
23+ for path in "${PATHS_TO_ADD[@]}"; do
2424 if [[ ":$NEW_PATH:" != *":$path:"* ]]; then
2525 NEW_PATH="$NEW_PATH:$path"
2626 fi
2727 done
28- IFS=$IFS_BAK
29- sed -i "s|^Defaults.*secure_path=.*|Defaults secure_path=\"$NEW_PATH\"|" "$TMP_FILE"
30- echo "already updated secure_path: $NEW_PATH"
28+ echo "new secure_path: $NEW_PATH"
29+ sed -i "s/^Defaults.*secure_path/# &/" "$TMP_FILE"
30+ echo "Defaults secure_path=\"$NEW_PATH\"" >> "$TMP_FILE"
31+ else
32+ echo "warning: can not get current secure_path"
33+ echo "Defaults secure_path=\"$ADD_PATHS\"" >> "$TMP_FILE"
3134 fi
3235 else
36+ echo "current secure_path config not found,set new data"
3337 echo "Defaults secure_path=\"$ADD_PATHS\"" >> "$TMP_FILE"
34- echo "already added secure_path: $ADD_PATHS"
3538 fi
36- if visudo -cf "$TMP_FILE"; then
37- cp "$TMP_FILE" /etc/sudoers
39+ if /usr/sbin/ visudo -cf "$TMP_FILE" > /dev/null 2>&1 ; then
40+ cp -f "$TMP_FILE" /etc/sudoers
3841 chmod 440 /etc/sudoers
39- echo "already updated /etc/sudoers"
42+ echo "already update /etc/sudoers"
43+ echo "after update secure_path config:"
44+ grep "^Defaults.*secure_path" /etc/sudoers
4045 else
41- echo "something went wrong ,file roll back"
42- cp "$BACKUP_FILE" /etc/sudoers
46+ echo "error: something went wrong,roll back"
47+ echo "please check visudo log:"
48+ /usr/sbin/visudo -cf "$TMP_FILE"
49+ cp -f "$BACKUP_FILE" /etc/sudoers
4350 chmod 440 /etc/sudoers
4451 echo "already roll back"
4552 exit 1
4653 fi
47- echo "finish "
54+ echo "success "
0 commit comments