ทำความเข้าใจเกี่ยวกับสิทธิ์ UNIX และประเภทไฟล์


68

ฉันไม่เคยได้chmodทำงานมาจนถึงทุกวันนี้ ฉันทำตามบทช่วยสอนที่อธิบายเรื่องสำคัญให้ฉัน

ตัวอย่างเช่นฉันได้อ่านว่าคุณมีกลุ่มสิทธิ์ที่แตกต่างกันสามกลุ่ม:

  • เจ้าของ ( u)
  • กลุ่ม ( g)
  • ทุกคน ( o)

จากสามกลุ่มนี้ฉันรู้แล้วว่า:

  • หากผู้ใช้เป็นเจ้าของไฟล์สิทธิ์ของผู้ใช้จะกำหนดการเข้าถึง
  • หากกลุ่มของไฟล์เหมือนกันกับกลุ่มของผู้ใช้สิทธิ์กลุ่มจะกำหนดการเข้าถึง
  • หากผู้ใช้ไม่ใช่เจ้าของไฟล์และไม่ได้อยู่ในกลุ่มจะมีการใช้สิทธิ์อื่น ๆ

ฉันได้เรียนรู้ด้วยว่าคุณได้รับอนุญาตดังต่อไปนี้:

  • อ่าน ( r)
  • เขียน ( w)
  • ดำเนินการ ( x)

ฉันสร้างไดเรกทอรีเพื่อทดสอบความรู้ที่ได้มาใหม่:

mkdir test

จากนั้นฉันทำแบบทดสอบ:

chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---

หลังจากหลอกไประยะหนึ่งฉันคิดว่าในที่สุดฉันก็หยุดchmodและวิธีที่คุณตั้งค่าการอนุญาตโดยใช้คำสั่งนี้


แต่...

ฉันยังมีคำถามสองสามข้อ:

  • อะไรdที่เริ่มต้นยืน?
  • ชื่อและการใช้งานของสล็อตที่มีอะไรและมันมีค่าอื่น ๆ อีกบ้าง?
  • ฉันจะตั้งค่าและยกเลิกการตั้งค่าได้อย่างไร
  • คุณค่าสำหรับสิ่งนี้dคืออะไร? (เนื่องจากคุณมีเพียง 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1)
  • เหตุใดบางคนจึงใช้0777แทน777การตั้งค่าการอนุญาต

แต่เนื่องจากฉันไม่ควรถามคำถามหลายข้อฉันจะพยายามถามคำถามข้อเดียว

ในระบบที่ใช้ UNIX เช่นลีนุกซ์ลีนุกซ์ทั้งหมด, เกี่ยวกับการอนุญาต, ส่วนแรก ( d) คืออะไรและสิ่งที่ใช้สำหรับการอนุญาตส่วนนี้?


3
โปรดลองครั้งต่อไปที่จะถามเพียงคำถามเดียวคำถามหลายข้อมักจะไม่ดีสำหรับการอ้างอิงและแทบไม่เคยตอบคำถามทั้งหมดในเวลาเดียวกัน
Kiwy

1
@ กีวีฉันขอโทษฉันคิดว่าฉันจะทำแบบนี้เพราะมันเกี่ยวข้องกับเรื่องเดียวกัน หากคุณต้องการคุณสามารถแนะนำชื่อเรื่องที่ดีกว่าสำหรับคำถามของฉันเพื่อปรับปรุงการอ้างอิง
ปีเตอร์

1
อนึ่งค่าสำหรับ "D" เป็น 040,000 - S_IFDIRมันสามารถพบได้ในส่วนหัวของไฟล์ภายใต้ชื่อ คุณไม่ได้ใช้มันเมื่อตั้งค่าโหมดไฟล์ แต่stat()ฟังก์ชั่นจริงส่งกลับค่า 040750 drwxr-x---สำหรับ
Random832

2
@jamesqf จริง ๆ แล้วตอนนี้ฉันเข้าใจวิธีการแมปรหัสฐานแปดมันง่ายสำหรับฉันที่จะคิดเกี่ยวกับวิธีการที่
HalosGhost

4
@ ปีเตอร์: ไม่มีคำถามโง่ ๆ - แค่โง่ที่ไม่เรียนเพราะกลัวที่จะถาม
mgarciaisaia

คำตอบ:


117

chmodฉันจะตอบคำถามของคุณในสามส่วนประเภทไฟล์สิทธิ์และกรณีการใช้งานสำหรับรูปแบบต่างๆของ

ประเภทไฟล์

อักขระตัวแรกในls -lเอาต์พุตแสดงถึงชนิดไฟล์; dหมายความว่ามันเป็นไดเรกทอรี ไม่สามารถตั้งค่าหรือยกเลิกการตั้งค่าได้ขึ้นอยู่กับวิธีการสร้างไฟล์ คุณสามารถค้นหารายการประเภทไฟล์ทั้งหมดได้จากเอกสารคู่มือls ; สิ่งที่คุณน่าจะเจอคือ

  • -: ไฟล์“ ปกติ” สร้างขึ้นด้วยโปรแกรมใด ๆ ที่สามารถเขียนไฟล์ได้
  • b: บล็อกไฟล์พิเศษโดยทั่วไปแล้วอุปกรณ์ดิสก์หรือพาร์ติชันสามารถสร้างขึ้นด้วย mknod
  • c: ไฟล์พิเศษของตัวละครสามารถสร้างได้ด้วยmknod(ดู/devตัวอย่าง)
  • d: ไดเรกทอรีสามารถสร้างขึ้นด้วย mkdir
  • l: ลิงก์สัญลักษณ์สามารถสร้างได้ด้วย ln -s
  • p: pipe ที่มีชื่อสามารถสร้างได้ด้วย mkfifo
  • s: ซ็อกเก็ตสามารถสร้างขึ้นด้วย nc -U
  • D: doorสร้างโดยกระบวนการเซิร์ฟเวอร์บางอย่างบน Solaris / openindiana

สิทธิ์

chmod 0777ใช้เพื่อตั้งค่าการอนุญาตทั้งหมดในchmodการดำเนินการครั้งเดียวแทนที่จะรวมการเปลี่ยนแปลงกับu+ฯลฯ แต่ละหลักสี่หลักเป็นค่าฐานแปดที่แทนชุดการอนุญาต:

  • suid, sgidและ“เหนียว” (ดูด้านล่าง)
  • สิทธิ์ของผู้ใช้
  • สิทธิ์ของกลุ่ม
  • สิทธิ์“ อื่น ๆ ”

ค่าฐานแปดจะถูกคำนวณเป็นผลรวมของการอนุญาต:

  • “ อ่าน” คือ 4
  • “ เขียน” คือ 2
  • “ execute” คือ 1

สำหรับตัวเลขตัวแรก:

  • suidคือ 4; ไบนารีด้วยชุดบิตนี้ทำงานเป็นผู้ใช้ของพวกเขาเจ้าของ (ปกติroot)
  • sgidคือ 2; ไบนารีที่มีการตั้งค่าบิตนี้ทำงานเป็นกลุ่มเจ้าของ (ซึ่งใช้สำหรับเกมเพื่อให้คะแนนสูงสามารถแบ่งปันได้ แต่มักจะมีความเสี่ยงด้านความปลอดภัยเมื่อรวมกับช่องโหว่ในเกม) และไฟล์ที่สร้างในไดเรกทอรีที่มีชุดบิตนี้เป็นของ กลุ่มเจ้าของไดเรกทอรีโดยค่าเริ่มต้น (เป็นประโยชน์สำหรับการสร้างโฟลเดอร์ที่ใช้ร่วมกัน)
  • “ เหนียว” (หรือ“ การลบแบบ จำกัด ”) คือ 1; ไฟล์ในไดเรกทอรีที่มีการตั้งค่าบิตนี้สามารถลบได้โดยเจ้าของของพวกเขาเจ้าของไดเรกทอรีหรือroot(ดู/tmpตัวอย่างทั่วไปของสิ่งนี้)

ดูmanpageสำหรับรายละเอียด โปรดทราบว่าในทั้งหมดนี้ฉันไม่สนใจคุณสมบัติความปลอดภัยอื่น ๆ ที่สามารถแก้ไขการอนุญาตของผู้ใช้ในไฟล์ (SELinux, ACLs ไฟล์ ... )chmod

บิตพิเศษได้รับการจัดการแตกต่างกันไปขึ้นอยู่กับประเภทของไฟล์ (ไฟล์ปกติหรือไดเรกทอรี) และระบบพื้นฐาน (สิ่งนี้ถูกกล่าวถึงในchmodmanpage) บนระบบที่ผมใช้ทดสอบ (กับcoreutils8.23 ในext4ระบบไฟล์, ใช้ Linux kernel 3.16.7-ckt2) พฤติกรรมดังต่อไปนี้ สำหรับไฟล์บิตพิเศษจะถูกล้างเสมอยกเว้นว่าจะมีการตั้งค่าไว้อย่างชัดเจนดังนั้นจึงchmod 0777เท่ากับchmod 777และคำสั่งทั้งสองจะล้างบิตพิเศษและให้สิทธิ์เต็มที่กับไฟล์แก่ทุกคน สำหรับไดเรกทอรีบิตพิเศษจะไม่ถูกล้างอย่างสมบูรณ์โดยใช้รูปแบบตัวเลขสี่หลักดังนั้นผลchmod 0777ก็จะเท่ากับchmod 777แต่มันทำให้เข้าใจผิดเนื่องจากบิตพิเศษบางอย่างจะยังคงอยู่ตามที่เป็นอยู่ (รุ่นก่อนหน้าของคำตอบนี้ได้ผิดนี้.) ในการล้างบิตพิเศษในไดเรกทอรีคุณจำเป็นต้องใช้u-s, g-sและ / หรือo-tอย่างชัดเจนหรือระบุเป็นค่าตัวเลขเชิงลบเพื่อchmod -7000จะล้างทุกชิ้นพิเศษในไดเรกทอรี

ในls -lการส่งออกsuid, sgidและ“เหนียว” จะปรากฏในสถานที่ของxรายการ: suidเป็นsหรือSแทนของผู้ใช้x, sgidเป็นsหรือSแทนของกลุ่มxและ“เหนียว” เป็นtหรือแทนผู้อื่นT xอักษรตัวพิมพ์เล็กระบุว่าทั้งบิตพิเศษและบิตที่ปฏิบัติการได้มีการตั้งค่า; ตัวอักษรตัวพิมพ์ใหญ่แสดงให้เห็นว่ามีการตั้งค่าบิตพิเศษเท่านั้น

รูปแบบต่างๆของ chmod

เนื่องจากพฤติกรรมที่อธิบายไว้ข้างต้นการใช้ตัวเลขสี่หลักแบบเต็มchmodอาจทำให้เกิดความสับสน (อย่างน้อยก็กลายเป็นว่าฉันสับสน) มันมีประโยชน์เมื่อคุณต้องการตั้งค่าบิตพิเศษเช่นเดียวกับบิตสิทธิ์ มิฉะนั้นบิตจะถูกล้างหากคุณจัดการไฟล์เก็บไว้หากคุณจัดการกับไดเรกทอรี ดังนั้นchmod 2750รับรองว่าคุณจะได้รับอย่างน้อยsgidและแน่นอนu=rwx,g=rx,o=; แต่chmod 0750จะไม่จำเป็นต้องล้างบิตพิเศษ

การใช้โหมดตัวเลขแทนคำสั่ง text ( [ugo][=+-][rwxXst]) อาจเป็นเรื่องของนิสัยและจุดประสงค์ของคำสั่งมากกว่า เมื่อคุณคุ้นเคยกับการใช้โหมดตัวเลขบ่อยครั้งที่ระบุโหมดแบบเต็มได้ง่ายขึ้น และมันมีประโยชน์ที่จะคิดเกี่ยวกับการอนุญาตโดยใช้โหมดตัวเลขเนื่องจากคำสั่งอื่น ๆ สามารถใช้มัน ( install, mknod... )

ตัวแปรข้อความบางอย่างอาจมีประโยชน์: ถ้าคุณเพียงแค่ต้องการให้แน่ใจว่าทุกคนสามารถเรียกใช้ไฟล์ได้chmod a+xจะทำได้โดยไม่คำนึงถึงการอนุญาตอื่น ในทำนองเดียวกัน+Xเพิ่มสิทธิ์ดำเนินการเฉพาะเมื่อสิทธิการดำเนินการอย่างใดอย่างหนึ่งถูกตั้งค่าไว้แล้วหรือไฟล์เป็นไดเรกทอรี สิ่งนี้มีประโยชน์สำหรับการกู้คืนสิทธิ์ทั่วโลกโดยไม่ต้องใช้ไฟล์ case-case ไดเรกทอรี v. ดังนั้นจึงchmod -R ug=rX,u+w,o=เทียบเท่ากับการใช้chmod -R 750กับไดเรกทอรีและไฟล์ที่เรียกใช้งานได้และchmod -R 640ไฟล์อื่น ๆ ทั้งหมด


แม้ว่าคำตอบอื่น ๆ ค่อนข้างดีคุณใช้เวลาตอบคำถามนี้จริงๆ ขอบคุณ
ปีเตอร์

ในไดเรกทอรี * BSD จะทำงานราวกับว่าsgidบิตของพวกเขาถูกตั้งค่าเสมอโดยไม่คำนึงถึงมูลค่าที่แท้จริง บน FreeBSD suidบิตสามารถกำหนดค่าให้ทำหน้าที่แบบอะนาล็อกกับsgid(เช่นไฟล์และไดเรกทอรีย่อยที่สร้างขึ้นภายในจะมีเจ้าของเช่นเดียวกับไดเรกทอรี) โดยมีเงื่อนไขว่าระบบไฟล์พื้นฐานสนับสนุนนั้นและติดตั้งกับsuiddirตัวเลือก
lcd047

" +Xเพิ่มสิทธิ์ดำเนินการเฉพาะเมื่อสิทธิ์การดำเนินการอย่างใดอย่างหนึ่งถูกตั้งค่าไว้แล้วหรือไฟล์เป็นไดเรกทอรี" ขอบคุณ @ stephen-kitt ที่ขาดหายไปเอกสาร"ตั้งค่าไว้แล้ว"เป็นเอกสารที่ทำให้ฉันต้องวนซ้ำ!
Ryan Fisher

39

ดังนั้นการอนุญาตใน Linux จึงมีความสำคัญมาก ฉันจะพยายามอธิบายสั้น ๆ

สำหรับชิ้นส่วนของโหมดไฟล์

ไฟล์ Unix ทุกไฟล์มีชุดของสิทธิ์ที่กำหนดว่าคุณสามารถอ่านเขียนหรือเรียกใช้ไฟล์ได้หรือไม่ การรัน ls -l แสดงการอนุญาต นี่คือตัวอย่างของการแสดงผล:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile

ฉันแนบภาพชิ้นส่วนของโหมดไฟล์:

ป้อนคำอธิบายรูปภาพที่นี่

ประเภทอาจแตกต่างกัน ตัวอย่างเช่น:

  • d (ไดเรกทอรี)
  • c (อุปกรณ์ตัวอักษร)
  • l (symlink)
  • p (ชื่อไปป์)
  • s (ซ็อกเก็ต)
  • b (อุปกรณ์บล็อก)
  • D (ประตูไม่ใช่เรื่องปกติในระบบ Linux แต่ได้รับการพอร์ต)

หากคุณต้องการตั้งค่าการอนุญาตบางอย่างสำหรับไดเรกทอรีทั้งหมดคุณสามารถใช้แอตทริบิวต์ R ตัวอย่างเช่น

chmod -R 777 /some/directory/

สำหรับ chmod 777 กับ 0777

chmodคำสั่งมักจะคาดหวังว่าการป้อนข้อมูลที่จะเป็นตัวเลขฐานแปดชั้นนำศูนย์หมายถึงค่าของเหนียว / sgid / แฝดบิต SUID และ อย่างไรก็ตามใน C มันจะสร้างความแตกต่างเนื่องจาก777จะถูกแปลเป็น01411(ฐานแปด) ดังนั้นการตั้งค่าบิตที่เหนียว (ดูchmod(2)หน้าคน) อ่านสิทธิ์สำหรับเจ้าของและบิตปฏิบัติการสำหรับกลุ่มและอื่น ๆ (ซึ่งเป็นชุดที่ค่อนข้างแปลก) .

แก้ไข 1

ฉันพบรูปภาพอื่น ๆ เกี่ยวกับการอนุญาต Linux และฉันจะแนบเพื่อให้เข้าใจง่ายขึ้น: สิทธิ์ไฟล์ UNIX


5
คุณผิดเกี่ยวกับ 777 กับ 0777 ทั้งคู่เป็นฐานแปด (ทศนิยมไม่สมเหตุสมผลในกรณีนี้) แต่ในรูปแบบสี่อักขระหลักแรกจะกำหนดบิตพิเศษ (เหนียว & setuid)
orion

3
@orion บางครั้งจริง ๆ แล้วมันเป็นจริงเช่นในโค้ด C-like chmod(777)จริง ๆ แล้วจะเทียบเท่ากับการทำงานchmod 1411(เช่นchmodคำสั่งที่มีอาร์กิวเมนต์1411)
peterph

2
... ซึ่งในกรณีของ syscall (หรือเสื้อคลุม) และเลขฐานสองที่มีชื่อเดียวกันอาจทำให้เกิดความสับสนเล็กน้อย
เตอร์

3
การแข่งขันหลามโทแก้ปัญหาข้างหลังนี้โดยห้ามทุกคน "ตัวเลข" ที่ขึ้นต้นด้วย 0, บังคับให้ผู้ใช้อย่างชัดเจนว่าพวกเขาต้องการอะไรอื่นนอกจากทศนิยมเช่นฐานสิบหก: 0x1FFไบนารี: หรือฐานแปด:0b111111111 0o777PYTHON POWER
Nick T

แหล่งที่มาของรูปภาพ?
รักบี้

10

dหมายความว่ามันจะไดเรกทอรีถ้าคุณมีไฟล์มันเป็นและถ้ามันคือการเชื่อมโยงที่คุณจะได้พบกับ- lไม่สามารถตั้งค่า / ยกเลิกการตั้งค่าได้

หากคุณใช้ 0777 เป็นสิทธิ์คุณจะให้การควบคุมเต็มรูปแบบ (อ่าน + เขียน + ดำเนินการ) ให้กับผู้ใช้ / กลุ่มของระบบ เป็นวิธีขี้เกียจในการแก้ปัญหาเมื่อคุณมีผู้ใช้ / กลุ่มที่ไม่สามารถเข้าถึงไดเรกทอรี / ไฟล์

ตัวอย่างเช่นหากคุณแสดงรายการเนื้อหาของไดเรกทอรีและรับสิ่งนี้:

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.soเป็นไฟล์ของผู้ใช้รูทและกลุ่มของรูท เจ้าของได้อ่านและเขียนการเข้าถึงที่กลุ่มได้อ่านเท่านั้นเข้าถึงและการใด ๆของผู้อื่นได้อ่านเข้าถึง สามารถแปลได้เป็น 644

หากฉันเปลี่ยนเป็น 777 จะมีลักษณะเช่นนี้:

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so


7

หลังจากได้รับคำตอบของคำถามที่นี่และทำวิจัยเกี่ยวกับผลลัพธ์ฉันพบบทความที่อธิบายได้ดีมาก ฉันต้องการแบ่งปันบางส่วนของบทความนี้ที่นี่เพื่ออ้างอิงในอนาคต

การดูการอนุญาต

เพื่อที่จะใช้chmodในการเปลี่ยนการอนุญาตของไฟล์หรือไดเรกทอรีคุณจะต้องรู้ก่อนว่าโหมดการเข้าถึงปัจจุบันคืออะไร คุณสามารถดูเนื้อหาของไดเรกทอรีในเทอร์มินัลโดยcdไปที่ไดเรกทอรีนั้นแล้วใช้:

$ ls -l

-lสวิทช์เป็นสิ่งสำคัญเพราะใช้lsโดยไม่ได้จะแสดงเฉพาะชื่อของไฟล์หรือโฟลเดอร์ในไดเรกทอรี

ด้านล่างเป็นตัวอย่างของการใช้งานls -lในไดเรกทอรีบ้านของฉัน:

total 128
drwxr-xr-x 2 peter users  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 peter users  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 peter users  4096 Jul  5 13:45 Downloads
drwxr-xr-x 2 peter users  4096 Jun 24 03:36 Movies
drwxr-xr-x 2 peter users  4096 Jun 24 03:38 Music
drwxr-xr-x 2 peter users  4096 Jun 26 00:09 Pictures
-rw-r--r-- 1 peter users   354 Jul  6 17:15 chmodtest

ความหมายของคอลัมน์

คอลัมน์แรกคือประเภทของแต่ละไฟล์:

  • - หมายถึงไฟล์ปกติ
  • d หมายถึงไดเรกทอรีเช่นโฟลเดอร์ที่มีไฟล์หรือโฟลเดอร์อื่น ๆ
  • p หมายถึงไปป์ที่มีชื่อ (aka FIFO)
  • l หมายถึงลิงค์สัญลักษณ์

ตัวอักษรหลังจากนั้นคือการอนุญาตคอลัมน์แรกนี้คือสิ่งที่เราจะให้ความสนใจมากที่สุดตัวที่สองคือจำนวนลิงก์ที่มีในไฟล์เราสามารถเพิกเฉยได้อย่างปลอดภัย คอลัมน์ที่สามมีสองค่า / ชื่อ: คอลัมน์แรก (ในตัวอย่าง 'peter') ของฉันคือชื่อของผู้ใช้ที่เป็นเจ้าของไฟล์ ค่าที่สอง ('ผู้ใช้' ในตัวอย่าง) คือกลุ่มที่เจ้าของเป็นเจ้าของ (อ่านเพิ่มเติมเกี่ยวกับกลุ่ม)

คอลัมน์ถัดไปคือขนาดของไฟล์หรือไดเรกทอรีเป็นไบต์และข้อมูลหลังจากนั้นคือวันที่และเวลาที่ไฟล์หรือไดเรกทอรีถูกแก้ไขครั้งล่าสุดและแน่นอนชื่อของไฟล์หรือไดเรกทอรี

สิทธิ์หมายถึงอะไร

ตัวอักษรสามตัวแรกหลังจากตัวแรก-หรือตัวอักษรdเป็นสิทธิ์ที่เจ้าของมี อักษรสามตัวถัดไปคือการอนุญาตที่ใช้กับกลุ่ม ตัวอักษรสามตัวสุดท้ายคือสิทธิ์ที่ใช้กับทุกคน

ชุดของสามตัวอักษรแต่ละตัวจะถูกสร้างขึ้นจากและr w อยู่ในตำแหน่งที่หนึ่งเสมออยู่ในตำแหน่งที่สองเสมอและอยู่ในตำแหน่งที่สามเสมอ คือสิทธิ์ในการอ่านเป็นสิทธิ์ในการเขียนและเป็นสิทธิ์ดำเนินการ หากมีเครื่องหมายยัติภังค์ ( ) แทนตัวอักษรตัวใดตัวหนึ่งนั่นหมายถึงไม่ได้รับอนุญาตและหากมีจดหมายนั้นอยู่ก็จะได้รับอนุญาตxrwxrwx-

โฟลเดอร์

ในกรณีของโฟลเดอร์บิตโหมดสามารถตีความได้ดังนี้

  • r (อ่าน) หมายถึงความสามารถในการอ่านสารบัญของไดเรกทอรีที่กำหนด
  • w(เขียน) ย่อมาจากความสามารถในการเขียนสารบัญของไดเรกทอรีที่กำหนด (สร้างไฟล์ใหม่โฟลเดอร์เปลี่ยนชื่อลบไฟล์ที่มีอยู่โฟลเดอร์) ถ้าหากตั้งบิตดำเนินการ มิฉะนั้นการอนุญาตนี้จะไม่มีความหมาย
  • x (ดำเนินการ) หมายถึงความสามารถในการป้อนไดเรกทอรีที่กำหนดด้วยซีดีคำสั่งและการเข้าถึงไฟล์โฟลเดอร์ในไดเรกทอรีนั้น

การเปลี่ยนการอนุญาตโดยใช้คำสั่ง chmod

chmodเป็นคำสั่งใน Linux และระบบปฏิบัติการแบบ Unix อนุญาตให้คุณเปลี่ยนการอนุญาต (หรือโหมดการเข้าถึง) ของไฟล์หรือไดเรกทอรี

คุณสามารถแก้ไขการอนุญาตได้สองวิธี: - แบบข้อความ - อิงchmod ตัวเลขchmod

วิธีข้อความ

ในการเปลี่ยนโหมดการอนุญาตหรือการเข้าถึงไฟล์เราจะใช้คำสั่ง chmod ในเทอร์มินัล ด้านล่างเป็นโครงสร้างทั่วไปของคำสั่ง:

chmod who=permissions filename

ที่ใดมีตัวอักษรจากช่วงและแต่ละคนมีความหมายว่าคุณจะได้รับอนุญาตให้ พวกเขามีดังนี้:

u - The user that owns the file.
g - The group the file belongs to.
o - The other users i.e. everyone else.
a - all of the above - use this instead of having to type ugo.

สิทธิ์ที่เป็นเช่นเดียวกับที่กล่าวไว้แล้ว ( r, wและx)

คำสั่ง chmod ให้เราเพิ่มและลบการอนุญาตจากชุดที่มีอยู่โดยใช้ + หรือ - แทน = สิ่งนี้แตกต่างจากคำสั่งข้างต้นซึ่งจำเป็นต้องเขียนสิทธิ์ใหม่ (เช่นเปลี่ยนการอนุญาตจากr--เป็นrw-คุณยังต้องรวมrและwหลังจาก=ใช้chmodคำสั่งด้วย) หากคุณพลาดrมันจะนำrสิทธิ์ดังกล่าวไปใช้ พวกเขากำลังเขียนใหม่ด้วย = การใช้ + และ - หลีกเลี่ยงสิ่งนี้โดยการเพิ่มหรือนำออกจากชุดการอนุญาตปัจจุบัน)

วิธีการตัวเลข

chmod ยังสามารถตั้งค่าการอนุญาตโดยใช้หมายเลข

การใช้ตัวเลขเป็นวิธีการอื่นที่ช่วยให้คุณแก้ไขการอนุญาตสำหรับเจ้าของทั้งสามกลุ่มและอื่น ๆ ในเวลาเดียวกัน โครงสร้างพื้นฐานของรหัสนี้คือ:

chmod xxx file/directory

โดยที่ xxx คือตัวเลข 3 หลักซึ่งแต่ละหลักสามารถเป็นอะไรก็ได้ตั้งแต่ 1 ถึง 7 ตัวเลขแรกนำไปใช้กับการอนุญาตสำหรับเจ้าของหลักที่สองใช้กับการอนุญาตสำหรับกลุ่มและหลักที่สามนำไปใช้กับการอนุญาตสำหรับผู้อื่นทั้งหมด

ในรูปแบบตัวเลขนี้ค่า r, w และ x มีค่าหมายเลขของตัวเอง:

r=4
w=2
x=1

ในการหาตัวเลขสามหลักคุณต้องพิจารณาว่าการอนุญาตใดที่คุณต้องการให้เจ้าของกลุ่มและผู้ใช้มีอยู่จากนั้นจึงรวมค่าทั้งหมด ตัวอย่างเช่นสมมติว่าฉันต้องการให้สิทธิ์การอ่านและเขียนแก่เจ้าของไดเรกทอรีและฉันต้องการจัดกลุ่มและคนอื่น ๆ ทุกคนให้อ่านและดำเนินการตามสิทธิ์ ฉันจะคิดค่าตัวเลขดังนี้:

Owner: rwx = 4+2+1=7
Group: r-x = 4+0+1=5 (or just 4+1=5)
Other: r-x = 4+0+1=5 (or just 4+1=5)

Final number = 755

$ chmod 755 filename

นี่คือเทียบเท่ากับการใช้ดังต่อไปนี้:

chmod u=rwx filename
chmod go=rx filename

โฟลเดอร์ / ไดเรกทอรีส่วนใหญ่ตั้งค่าเป็น 755 เพื่อให้การอ่านและการเขียนและการดำเนินการกับเจ้าของ แต่ปฏิเสธการเขียนให้กับคนอื่น ๆ และโดยปกติแล้วไฟล์เป็น 644 เพื่อให้การอ่านและการเขียนสำหรับเจ้าของ แต่เพียงแค่อ่านให้ทุกคน บันทึกการขาดสิทธิ์ x กับไฟล์ที่ไม่สามารถใช้งานได้ - เป็นข้อตกลงเดียวกันที่นี่


เพียงคัดลอกข้อความจากบทความอื่นอย่างน้อยหยาบคาย อาจเป็นการละเมิดลิขสิทธิ์ด้วย หากไม่ได้คัดลอกเท่านั้นหรือคุณใช้ชิ้นส่วนเล็ก ๆ (เป็นมิตรกับลิขสิทธิ์เนื่องจากการใช้งานที่เหมาะสม) กรุณาเพิ่มลิงค์ไปยังบทความที่คุณอ้างอิง / อ้างถึง
รักบี้

0

สำหรับคำถามที่ d

สิ่งนี้บอกประเภทไฟล์ Unix ของคุณ โดยค่าเริ่มต้น Unix มีไฟล์เพียง 3 ประเภทเท่านั้น พวกเขาคือ:

  • - - ไฟล์ปกติ
  • d - ไฟล์ไดเรกทอรี
  • ไฟล์พิเศษ (ที่มี 5 ประเภทย่อย):
    • b - ไฟล์บล็อก
    • c - ไฟล์อุปกรณ์ตัวละคร
    • p - ไฟล์เนมที่มีชื่อหรือไฟล์ไพพ์
    • l - ไฟล์ลิงก์สัญลักษณ์
    • s - ไฟล์ซ็อกเก็ต

อ่านเพิ่มเติมได้ที่นี่: ประเภทไฟล์ใน Linux / Unix อธิบายโดยละเอียด

0777 VS 777

ระบุ Sticky bit หรือไม่ เมื่อตั้งค่า bit เหนียวของไดเรกทอรีระบบไฟล์จะจัดการกับไฟล์ในไดเรกทอรีดังกล่าวด้วยวิธีพิเศษดังนั้นเฉพาะเจ้าของไฟล์เจ้าของไดเรกทอรีหรือผู้ใช้รูทเท่านั้นที่สามารถเปลี่ยนชื่อหรือลบไฟล์ได้ หากไม่มีการตั้งค่าบิตเหนียวผู้ใช้ใด ๆ ที่มีสิทธิ์ในการเขียนและดำเนินการสำหรับไดเรกทอรีสามารถเปลี่ยนชื่อหรือลบไฟล์ที่มีอยู่โดยไม่คำนึงถึงเจ้าของไฟล์

0777 ตั้งค่าการอนุญาตไฟล์ 777 และค่าความหนืดเป็น 0 - ไม่มีโหมดพิเศษ

777 กำลังตั้งค่าการอนุญาตไฟล์ 777 โดยไม่เปลี่ยนบิตเหนียว

อ่านเพิ่มเติม: เหนียวเล็กน้อยและchmod


2
ดีกว่า: แต่ก็ยังไม่มีอะไรที่คำตอบอื่น ๆ ยังไม่ได้กล่าวถึง ...
jasonwryan

1
(1) ไฟล์พื้นฐานมีสามประเภท: ไฟล์ธรรมดาไดเรกทอรีและทุกอย่างอื่น อะไร? คุณได้รับสิ่งนี้ที่ไหน ในรูปแบบที่ยอดเยี่ยมของสิ่งต่าง ๆ ไฟล์และไดเร็กตอรี่ค่อนข้างคล้ายกัน. ไปป์ที่มีชื่อและลิงก์สัญลักษณ์เป็นเหมือนไฟล์และไดเรกทอรีธรรมดามากกว่าเช่นไฟล์อุปกรณ์หรือซ็อกเก็ต (2) คุณคิดว่าchmod 777ไม่ชัดเจนบิต setuid, setgid และเหนียว? ลองมัน.
G-Man

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