ทำไมคำสั่ง #include และ #includedir ใน sudo นำหน้าด้วยอักขระ pound (#)


36

ในขณะที่ตั้งค่าsudoสภาพแวดล้อมฉันสังเกตเห็นว่าคำสั่ง include นั้นนำหน้าด้วยอักขระ pound (#)

Solaris แสดงสิ่งนี้เป็น:

## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

สถานะคู่มือ (Linux และ Solaris):

การรวมไฟล์อื่น ๆ จากภายใน sudoers เป็นไปได้ที่จะรวมไฟล์ sudoers อื่น ๆ จากภายในไฟล์ sudoers ที่กำลังวิเคราะห์คำโดยใช้คำสั่ง #include และ #includedir

และ:

อักขระพิเศษอื่น ๆ และคำสงวนเครื่องหมายปอนด์ (`# ') ใช้เพื่อระบุความคิดเห็น (เว้นแต่เป็นส่วนหนึ่งของคำสั่ง #include หรือเว้นแต่จะเกิดขึ้นในบริบทของชื่อผู้ใช้และตามด้วยตัวเลขหนึ่งหลักหรือมากกว่านั้น ในกรณีนี้จะถือว่าเป็น uid) ทั้งความคิดเห็นของตัวละครและข้อความใด ๆ หลังจากนั้นจนถึงจุดสิ้นสุดของบรรทัดจะถูกละเว้น

ไม่มีใครรู้ว่าทำไมตัวเลือกถูกสร้างให้ใช้ตัวละครปอนด์ใน#includeและ#includedirคำสั่ง?

ในฐานะที่เป็นหมายเหตุด้านข้าง: ฉันมักจะใช้บางสิ่งบางอย่างที่ต้องการegrep -v '^#|^$' configfileรับการตั้งค่าที่ไม่ใช่ค่าเริ่มต้น / ที่ใช้งานอยู่และนี่ไม่ได้ผลกับsudoersไฟล์

คำตอบ:


38

#includeถูกเพิ่มเข้ามาในปี 2004 มันต้องเข้ากันได้กับสิ่งที่มีอยู่แล้ว ฉันไม่คิดว่าinclude /path/to/fileจะคลุมเครือ แต่อาจเป็นการยากที่จะแยกวิเคราะห์เล็กน้อยเนื่องจาก parser จะต้องแยกความแตกต่างinclude /path/to/file(รวมถึงคำสั่ง) จากinclude = foo(อนุญาตให้ผู้ใช้includeเรียกใช้คำสั่งfoo)

แต่ฉันคิดว่าเหตุผลส่วนใหญ่คือการมีลักษณะเหมือนตัวประมวลผลล่วงหน้า C ซึ่งคู่มืออ้างอิงอย่างชัดเจนว่าเป็นแรงบันดาลใจ


1
การจับและคำอธิบายที่ดีน่าเสียดายที่คำอธิบายเหล่านั้นถูกลบออกจากคู่มือ (อย่างน้อยใน Ubuntu, RedHat, OpenBSD และ Solaris)
Lambert

2
ครั้งแรกที่ผมวิเคราะห์ของฉันsudoersไฟล์ผมคิดว่าincludeเป็นคำสั่งและ#includeเป็นคำสั่งออกความเห็น กฎของความประหลาดใจน้อยที่สุดละเมิดอย่างหนัก ในความคิดของฉันมันออกแบบไม่ดี
Kamil Maciorowski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.