สิทธิ์ที่ถูกต้องสำหรับ / tmp คืออะไร ฉันตั้งใจตั้งให้ทุกคนเรียกซ้ำโดยไม่ตั้งใจ


78

sudoฉันได้ทำร้าย

ฉันได้สร้างไดเรกทอรีชั่วคราวชั่วคราวที่สั้นมากจริงๆซึ่งฉันต้องการแบ่งปันระหว่างผู้ใช้บางคนในสองสามชั่วโมง ... และฉันตั้งชื่อไดเรกทอรีนี้ /some/path/tmp

น่าเสียดายที่ฉันเปิดsudo chown 777 -R /tmpตัวแทนsudo chown 777 -R tmpดังนั้น/tmpตอนนี้ไฟล์ของฉันจึงเป็นแบบสาธารณะโดยสมบูรณ์

ฉันใช้งานทั่วไป/tmpบ่อยๆ (ทุกวันเกือบทุกชั่วโมง) เป็นการส่วนตัวสำหรับไฟล์ชีวิตสั้นสคริปต์สคริปต์จำนวนมาก

ตอนนี้มันเป็นเรื่องความปลอดภัยที่ตั้งไว้อย่างสมบูรณ์ต่อสาธารณะหรือไม่? ฉันควรเปลี่ยนกลับเป็นการตั้งค่าที่ปลอดภัยกว่าหรือชอบการตั้งค่าเริ่มต้นทั่วไปสำหรับ Debian หรือ Ubuntu distro - (ฉันไม่ทราบว่าพวกเขาเป็นใคร) สิทธิ์ที่ถูกต้องมีไว้เพื่อ/tmpอะไร?


ระวังว่าฉันลืมสิ่งที่สำคัญในคำตอบแรกของฉัน: ซ็อกเก็ต X11 ต้องสามารถเข้าถึงได้แบบสาธารณะมิฉะนั้นคุณจะไม่สามารถเริ่มแอปพลิเคชัน GUI ใหม่ได้ ฉันอัพเดตคำตอบแล้ว
Gilles

มันเป็นchownหรือchmod?
Melebius

@Melebius ฉันเป็นบิตงงงวยโดยคำถามของคุณ: chmodผมไม่ได้พูดถึง chown (เช่น ch - own) เป็นเรื่องเกี่ยวกับความเป็นเจ้าของไฟล์ซึ่งผู้ใช้เป็นเจ้าของไฟล์ chmod (เช่น ch - modifify) เป็นข้อมูลเพิ่มเติมเกี่ยวกับผู้ที่สามารถดำเนินการหรือเขียนภายในหรืออ่านเนื้อหาของไฟล์
Stephane Rolland

2
@StephaneRolland ใช่นั่นคือสิ่งที่ทำให้ฉันสับสน คุณสามารถใช้การchown 777ตั้งค่าความเป็นเจ้าของไฟล์ให้กับผู้ใช้ด้วย ID 777 อย่างไรก็ตามคำตอบทั้งหมดรวมถึงคำตอบที่ได้รับการยอมรับสามารถใช้งานchmodได้ เนื่องจากทั้งหมดของพวกเขาตั้งค่าการอนุญาตเป็นค่าเดียวกันสำหรับผู้ใช้ทั้งหมด (เจ้าของกลุ่มอื่น ๆ ) ผลกระทบส่วนใหญ่ของการเป็นเจ้าของไฟล์จะไม่เกี่ยวข้อง แต่คำสั่งที่ถูกต้องที่จะแก้ไขผลมาจากการที่ควรจะเป็นsudo chown 777 -R /tmp sudo chown root -R /tmp
Melebius

คำตอบ:


117

การตั้งค่าปกติ/tmpอยู่ที่ 1,777 ซึ่งแสดงให้เห็นว่าเป็นls drwxrwxrwtนั่นคือ: เปิดกว้างยกเว้นเฉพาะเจ้าของไฟล์เท่านั้นที่สามารถลบออกได้ (นั่นคือความtหมายพิเศษของบิตสำหรับไดเรกทอรี)

ปัญหาเกี่ยว/tmpกับโหมด 777 คือผู้ใช้รายอื่นสามารถลบไฟล์ที่คุณสร้างขึ้นและแทนที่เนื้อหาที่เลือกได้

หากคุณ/tmpเป็นระบบไฟล์ tmpfs การรีบูตจะคืนค่าทุกอย่าง chmod 1777 /tmpมิฉะนั้นทำงาน

นอกจากนี้ไฟล์จำนวนมาก/tmpจำเป็นต้องเป็นส่วนตัว อย่างไรก็ตามไดเรกทอรีอย่างน้อยหนึ่งรายการจะต้องสามารถอ่านได้ทั่วโลก: /tmp/.X11-unixและอาจเป็นไดเรกทอรีที่คล้ายกันอื่น ๆ ( /tmp/.XIM-unixและอื่น ๆ ) คำสั่งต่อไปนี้ส่วนใหญ่ควรตั้งสิ่งที่ถูกต้อง:

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +

เช่นทำให้ไฟล์และไดเรกทอรีทั้งหมดเป็นส่วนตัว (ลบสิทธิ์ทั้งหมดสำหรับกลุ่มและอื่น ๆ ) แต่ทำให้ X11 sockets เข้าถึงได้สำหรับทุกคน การควบคุมการเข้าถึงบนซ็อกเก็ตเหล่านี้ถูกบังคับใช้โดยเซิร์ฟเวอร์ไม่ใช่โดยการอนุญาตของไฟล์ อาจมีซ็อกเก็ตอื่น ๆ ที่ต้องเปิดเผยต่อสาธารณะ เรียกใช้find /tmp -type s -user 0เพื่อค้นหาซ็อกเก็ตที่เป็นเจ้าของรูทซึ่งคุณอาจต้องทำให้เข้าถึงได้ทั่วโลก อาจมีซ็อกเก็ตที่ผู้ใช้ระบบรายอื่นเป็นเจ้าของด้วย (เช่นเพื่อสื่อสารกับบัสระบบ) สำรวจด้วยfind /tmp -type s ! -user $UID( $UIDID ผู้ใช้ของคุณอยู่ที่ไหน)


1
คุณช่วยอธิบาย chmod ตัวที่สองเพิ่มเติมได้ไหม?
Bartlomiej Lewandowski

@BartlomiejLewandowski go-rwx: ไม่มีสิทธิ์สำหรับกลุ่มและอื่น ๆ การตั้งค่าการอนุญาตrwx------(ยกเว้นไฟล์ที่สร้างขึ้นเนื่องจากchmodอาจสิ้นสุดด้วยสิทธิ์น้อยลงเช่นrw-------) กล่าวอีกนัยหนึ่งไฟล์จะสามารถเข้าถึงได้โดยเจ้าของเท่านั้น คือการรวมไฟล์จุดซึ่งมักอยู่ใน/tmp/.[!.]* /tmp
Gilles

@BartlomiejLewandowski: chmod -go-rwx: ตั้งค่าสิทธิ์ "rwx" เป็นเจ้าของและกลุ่ม r = read, w = write, x = execute (สำหรับไฟล์) หรือป้อน / traverse (สำหรับไดเร็กทอรี) 777 = rwxrwxrwx (ส่วนด้านขวาสามารถมองเห็นเป็น: "set 'r' set 'w' set 'x', set 'r' set 'w' set 'x', set 'r' set 'w' set 'x '', ซึ่งในไบนารี่จะแสดงเป็น "111111111" (1 ถึง set, 0 ถึง unset) และ "111111111" ในไบนารี่จะแสดงเป็น octal เป็น "777" (octal = กลุ่ม 3 บิตแต่ละกลุ่มมีค่า 0 ถึง 7). ถ้า "rwxr-xr--" มันจะเป็น "111101100" ซึ่งใน octal คือ "754"
Olivier Dulac

2
เครื่องหมาย + t หมายถึงบิตหนึบ นั่นคือสิ่งที่ทำให้ทุกคนนอกเหนือจากเจ้าของไม่สามารถลบไฟล์ได้แม้ว่าการอนุญาตจะเป็นอย่างอื่นก็ตาม 777 เหนียวเล็กน้อยเดิมเพื่อให้เคอร์เนลออกจากโปรแกรมทั่วไปในหน่วยความจำเมื่อพวกเขาออกดังนั้นพวกเขาจะไม่ต้องดึงข้อมูลจากดิสก์เมื่อเรียกใช้ต่อไป เรากำลังพูดถึง PDP11 วัน ....
kurtm

1
@GabrielFair ฉันแทนที่คำสั่งโดยใช้สัญลักษณ์แทนโดยใช้การค้นหาซึ่งจะไม่พบปัญหานั้น
Gilles

10

/tmpและ/var/tmpควรมีสิทธิ์อ่านเขียนและดำเนินการเพื่อสิทธิทั้งหมด แต่โดยปกติคุณจะเพิ่ม sticky-bit ( o+t) เพื่อป้องกันไม่ให้ผู้ใช้ลบไฟล์ / ไดเรกทอรีที่เป็นของผู้ใช้รายอื่น ดังนั้นchmod a=rwx,o+t /tmpควรทำงาน

สำหรับการเปลี่ยนการอนุญาตซ้ำ ๆ ... ตราบใดที่เจ้าของ / กลุ่มยังคงอยู่เหมือนเดิมสำหรับไฟล์และไดเรกทอรีมันไม่น่าจะมีปัญหาอะไรมากมาย แต่คุณอาจเปลี่ยนสิทธิ์ของทุกสิ่งภายใต้/tmp(ไม่ใช่ / tmp เอง) เพื่อให้แน่ใจว่าข้อมูลส่วนบุคคลของผู้ใช้โดยการลบrxสิทธิ์ของผู้อื่นและกลุ่ม

Find เป็นวิธีที่ดีในการทำเช่นนี้ ในฐานะที่เป็น root ให้ทำ:

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})

สำหรับระบบเดสก์ท็อปทั่วไปคุณควรทำให้/tmp/.X11-unix/*โลกอ่านได้ดีขึ้นหรือคุณจะไม่สามารถเริ่มต้นแอปพลิเคชัน X ได้อีก
Gilles

chmod a=rwX,o+t /tmp -Rควรทำfindเวทย์มนตร์
dhill

3
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

จากเครื่อง CentOS 5.9

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