Skip to content

Commit 32aba62

Browse files
bugfix : fix secure path set in centos (#2757)
Signed-off-by: xuesongzuo@yunify.com <xuesongzuo@yunify.com>
1 parent 0b7d62d commit 32aba62

1 file changed

Lines changed: 27 additions & 20 deletions

File tree

  • builtin/core/roles/native/root/tasks

builtin/core/roles/native/root/tasks/main.yaml

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,52 @@
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

Comments
 (0)