ใช้ visudo สำหรับสิ่งนี้ด้วยโปรแกรมแก้ไขแบบกำหนดเอง วิธีนี้ช่วยแก้ปัญหาสภาพการแข่งขันและปัญหา "แฮ็ก" ทั้งหมดด้วยโซลูชันของ Brian
#!/bin/sh
if [ -z "$1" ]; then
echo "Starting up visudo with this script as first parameter"
export EDITOR=$0 && sudo -E visudo
else
echo "Changing sudoers"
echo "# Dummy change to sudoers" >> $1
fi
สคริปต์นี้จะเพิ่มบรรทัด "# Dummy change to sudoers" ต่อท้าย sudoers ไม่มีการแฮ็กและไม่มีเงื่อนไขการแข่งขัน
เวอร์ชันคำอธิบายประกอบที่อธิบายวิธีการใช้งานจริง:
if [ -z "$1" ]; then
# When you run the script, you will run this block since $1 is empty.
echo "Starting up visudo with this script as first parameter"
# We first set this script as the EDITOR and then starts visudo.
# Visudo will now start and use THIS SCRIPT as its editor
export EDITOR=$0 && sudo -E visudo
else
# When visudo starts this script, it will provide the name of the sudoers
# file as the first parameter and $1 will be non-empty. Because of that,
# visudo will run this block.
echo "Changing sudoers"
# We change the sudoers file and then exit
echo "# Dummy change to sudoers" >> $1
fi
echo "$USER ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')
ทั้งควรจะดำเนินการเป็นรากเช่น