วิธีใช้คำสั่ง chmod บน Linux
ควบคุมว่าใครสามารถเข้าถึงไฟล์ไดเร็กทอรีการค้นหาและรันสคริปต์โดยใช้chmod
คำสั่งของ Linux คำสั่งนี้แก้ไขการอนุญาตไฟล์ Linux ซึ่งดูซับซ้อนในตอนแรก แต่จริงๆแล้วค่อนข้างง่ายเมื่อคุณรู้ว่ามันทำงานอย่างไร
chmod แก้ไขสิทธิ์ของไฟล์
ใน Linux ใครสามารถทำอะไรกับไฟล์หรือไดเร็กทอรีจะถูกควบคุมผ่านชุดสิทธิ์ สิทธิ์มีสามชุด ชุดหนึ่งสำหรับเจ้าของไฟล์อีกชุดสำหรับสมาชิกในกลุ่มของไฟล์และชุดสุดท้ายสำหรับคนอื่น ๆ
สิทธิ์ควบคุมการดำเนินการที่สามารถทำได้บนไฟล์หรือไดเร็กทอรี พวกเขาอนุญาตหรือป้องกันไม่ให้ไฟล์ถูกอ่านแก้ไขหรือถ้าเป็นสคริปต์หรือโปรแกรมจะถูกเรียกใช้งาน สำหรับไดเร็กทอรีสิทธิ์จะกำหนดว่าใครสามารถcd
เข้าสู่ไดเร็กทอรีและใครสามารถสร้างหรือแก้ไขไฟล์ภายในไดเร็กทอรี
คุณใช้ chmod
คำสั่งเพื่อตั้งค่าสิทธิ์เหล่านี้ ls
หากต้องการดูว่าสิทธิ์ได้รับการตั้งค่าในแฟ้มหรือไดเรกทอรีเราสามารถใช้
การดูและทำความเข้าใจสิทธิ์ของไฟล์
เราสามารถใช้-l
ตัวเลือก (รูปแบบยาว) เพื่อls
แสดงรายการสิทธิ์ของไฟล์สำหรับไฟล์และไดเร็กทอรี
ls -l
ในแต่ละบรรทัดอักขระตัวแรกจะระบุชนิดของรายการที่อยู่ในรายการ ถ้าเป็นเส้นประ ( -
) มันคือไฟล์ ถ้าเป็นตัวอักษรแสดงd
ว่าเป็นไดเร็กทอรี
อักขระเก้าตัวถัดไปแสดงถึงการตั้งค่าสำหรับสิทธิ์สามชุด
- อักขระสามตัวแรกแสดงสิทธิ์สำหรับผู้ใช้ที่เป็นเจ้าของไฟล์ ( สิทธิ์ของผู้ใช้ )
- อักขระสามตัวตรงกลางแสดงสิทธิ์สำหรับสมาชิกของกลุ่มของไฟล์ ( สิทธิ์กลุ่ม )
- อักขระสามตัวสุดท้ายแสดงสิทธิ์สำหรับทุกคนที่ไม่ได้อยู่ในสองประเภทแรก ( สิทธิ์อื่น ๆ )
มีสามอักขระในแต่ละชุดสิทธิ์ อักขระเป็นตัวบ่งชี้ว่ามีหรือไม่มีสิทธิ์อย่างใดอย่างหนึ่ง เป็นทั้งเส้นประ ( -
) หรือตัวอักษร หากอักขระเป็นเส้นประแสดงว่าไม่ได้รับอนุญาต ถ้าตัวละครเป็นr
, w
หรือx
ได้รับอนุญาตที่ได้รับ
ตัวอักษรแสดงถึง:
- r : อ่านสิทธิ์ สามารถเปิดไฟล์และดูเนื้อหาได้
- w : สิทธิ์ในการเขียน ไฟล์สามารถแก้ไขแก้ไขและลบได้
- x : ดำเนินการอนุญาต หากไฟล์นั้นเป็นสคริปต์หรือโปรแกรมก็สามารถรัน (เรียกใช้งาน) ได้
ตัวอย่างเช่น:
-
---
หมายความว่าไม่มีการให้สิทธิ์ใด ๆ เลย -
rwx
หมายความว่าได้รับอนุญาตเต็มแล้ว ตัวบ่งชี้การอ่านเขียนและดำเนินการมีอยู่ทั้งหมด
ในภาพหน้าจอบรรทัดแรกเริ่มต้นด้วยไฟล์d
. บรรทัดนี้หมายถึงไดเร็กทอรีที่เรียกว่า "archive" เจ้าของไดเร็กทอรีคือ "dave" และชื่อของกลุ่มที่ไดเร็กทอรีอยู่นั้นเรียกอีกอย่างว่า "dave"
อักขระสามตัวถัดไปคือสิทธิ์ของผู้ใช้สำหรับไดเร็กทอรีนี้ สิ่งเหล่านี้แสดงว่าเจ้าของมีสิทธิ์เต็มรูปแบบ r
, w
และx
ตัวอักษรที่มีอยู่ทั้งหมด ซึ่งหมายความว่าผู้ใช้ dave มีสิทธิ์ในการอ่านเขียนและดำเนินการสำหรับไดเร็กทอรีนั้น
r-x
ชุดที่สองของตัวละครทั้งสามเป็นสิทธิ์ของกลุ่มเหล่านี้เป็น สิ่งเหล่านี้แสดงให้เห็นว่าสมาชิกของกลุ่ม dave ได้อ่านและดำเนินการสิทธิ์สำหรับไดเร็กทอรีนี้ นั่นหมายความว่าพวกเขาสามารถแสดงรายการไฟล์และเนื้อหาในไดเร็กทอรีและสามารถcd
(รัน) ลงในไดเร็กทอรีนั้นได้ พวกเขาไม่มีสิทธิ์ในการเขียนดังนั้นจึงไม่สามารถสร้างแก้ไขหรือลบไฟล์ได้
ชุดสุดท้ายของสามตัวละครก็เช่น r-x
กัน สิทธิ์เหล่านี้ใช้กับผู้ที่ไม่ได้อยู่ภายใต้การอนุญาตสองชุดแรก บุคคลเหล่านี้ (เรียกว่า "คนอื่น") ได้อ่านและดำเนินการสิทธิ์ในไดเรกทอรีนี้
ดังนั้นเพื่อสรุปสมาชิกในกลุ่มและคนอื่น ๆ ได้อ่านและดำเนินการอนุญาต เจ้าของผู้ใช้ชื่อเดฟมีสิทธิ์ในการเขียนด้วย
สำหรับไฟล์อื่น ๆ ทั้งหมด (นอกเหนือจากไฟล์สคริปต์ mh.sh) เดฟและสมาชิกของกลุ่มเดฟมีคุณสมบัติในการอ่านและเขียนบนไฟล์และอื่น ๆ มีสิทธิ์ในการอ่านเท่านั้น
สำหรับกรณีพิเศษของไฟล์สคริปต์ mh.sh เจ้าของ dave และสมาชิกในกลุ่มได้อ่านเขียนและดำเนินการสิทธิ์ส่วนคนอื่น ๆ จะอ่านและดำเนินการสิทธิ์เท่านั้น
การทำความเข้าใจไวยากรณ์การอนุญาต
ในการใช้chmod
กำหนดสิทธิ์เราต้องแจ้งให้ทราบ:
- ใคร: เรากำลังตั้งค่าสิทธิ์ให้กับใคร
- อะไร : เรากำลังเปลี่ยนแปลงอะไร? เรากำลังเพิ่มหรือลบการอนุญาต?
- ไหน : เรากำลังตั้งค่าการอนุญาตใด
เราใช้ตัวบ่งชี้เพื่อแสดงค่าเหล่านี้และสร้าง "คำสั่งสิทธิ์" สั้น ๆ เช่นu+x
โดยที่ "u" หมายถึง "ผู้ใช้" (who), "+" หมายถึงเพิ่ม (อะไร) และ "x" หมายถึงสิทธิ์ในการดำเนินการ (ซึ่ง) .
ค่า“ ใคร” ที่เราใช้ได้คือ:
- u : ผู้ใช้หมายถึงเจ้าของไฟล์
- g : กลุ่มหมายถึงสมาชิกของกลุ่มที่ไฟล์อยู่
- o : อื่น ๆ หมายถึงบุคคลที่ไม่ได้อยู่ภายใต้การควบคุม
u
และการg
อนุญาต - a : ทั้งหมดหมายถึงทั้งหมดข้างต้น
หากไม่มีการใช้สิ่งเหล่านี้จะchmod
ทำงานราวกับว่าa
มีการใช้“”
ค่า“ อะไร” ที่เราใช้ได้คือ:
- - : เครื่องหมายลบ ลบสิทธิ์
- + : เครื่องหมายบวก ให้สิทธิ์ สิทธิ์ถูกเพิ่มในสิทธิ์ที่มีอยู่ หากคุณต้องการได้รับอนุญาตนี้และเฉพาะชุดสิทธิ์นี้ให้ใช้
=
ตัวเลือกที่อธิบายไว้ด้านล่าง - = : เครื่องหมายเท่ากับ ตั้งค่าการอนุญาตและลบผู้อื่น
ค่า“ ซึ่ง” ที่เราใช้ได้คือ:
- r : สิทธิ์ในการอ่าน
- w : สิทธิ์ในการเขียน
- x : สิทธิ์ในการดำเนินการ
การตั้งค่าและแก้ไขสิทธิ์
สมมติว่าเรามีไฟล์ที่ทุกคนมีสิทธิ์อย่างเต็มที่
ls -l new_ file.txt
เราต้องการให้ผู้ใช้ dave มีสิทธิ์ในการอ่านและเขียนและกลุ่มและผู้ใช้อื่น ๆ มีสิทธิ์ในการอ่านเท่านั้น เราสามารถทำได้โดยใช้คำสั่งต่อไปนี้:
chmod u = rw, og = r new_file.txt
การใช้โอเปอเรเตอร์“ =” หมายความว่าเราล้างการอนุญาตที่มีอยู่แล้วตั้งค่าตามที่ระบุ
มาตรวจสอบสิทธิ์ใหม่ในไฟล์นี้:
ls -l new_file.txt
สิทธิ์ที่มีอยู่ถูกลบออกและมีการตั้งค่าการอนุญาตใหม่ตามที่เราคาดไว้
วิธีการเพิ่มการอนุญาตโดยไม่ลบการตั้งค่าการอนุญาตที่มีอยู่? เราสามารถทำได้อย่างง่ายดายเช่นกัน
สมมติว่าเรามีไฟล์สคริปต์ที่เราแก้ไขเสร็จแล้ว เราจำเป็นต้องทำให้สามารถใช้งานได้สำหรับผู้ใช้ทุกคน สิทธิ์ปัจจุบันมีลักษณะดังนี้:
ls -l new_script.sh
เราสามารถเพิ่มสิทธิ์ในการดำเนินการสำหรับทุกคนด้วยคำสั่งต่อไปนี้:
chmod a + x new_script.sh
หากเราดูที่สิทธิ์เราจะเห็นว่าตอนนี้สิทธิ์ในการดำเนินการได้รับการอนุญาตให้กับทุกคนและยังคงมีการอนุญาตที่มีอยู่
ls -l new_script.sh
เราสามารถบรรลุสิ่งเดียวกันได้โดยไม่ต้องมี“ a” ในคำสั่ง“ a + x” คำสั่งต่อไปนี้จะได้ผลเช่นกัน
chmod + x new_script.sh
การตั้งค่าสิทธิ์สำหรับไฟล์หลายไฟล์
เราสามารถใช้สิทธิ์กับไฟล์หลายไฟล์พร้อมกันได้
นี่คือไฟล์ในไดเร็กทอรีปัจจุบัน:
ls -l
สมมติว่าเราต้องการลบสิทธิ์ในการเขียนสำหรับผู้ใช้ "อื่น ๆ " ออกจากไฟล์ที่มีนามสกุล ".page" เราสามารถทำได้ด้วยคำสั่งต่อไปนี้:
chmod หรือ * .page
ตรวจสอบว่ามีผลกระทบอะไรบ้าง:
ls -l
อย่างที่เราเห็นการอนุญาตในการอ่านถูกลบออกจากไฟล์“ .page” สำหรับผู้ใช้หมวด“ อื่น ๆ ” ไม่มีไฟล์อื่น ๆ ได้รับผลกระทบ
หากเราต้องการรวมไฟล์ในไดเรกทอรีย่อยเราสามารถใช้-R
ตัวเลือก (เรียกซ้ำ) ได้
chmod -R หรือ * .page
ชวเลขตัวเลข
อีกวิธีในการใช้chmod
คือให้สิทธิ์ที่คุณต้องการมอบให้กับเจ้าของกลุ่มและคนอื่น ๆ เป็นตัวเลขสามหลัก ตัวเลขทางซ้ายสุดแสดงถึงสิทธิ์สำหรับเจ้าของ ตัวเลขกลางแสดงถึงสิทธิ์สำหรับสมาชิกกลุ่ม ตัวเลขทางขวาสุดแสดงถึงสิทธิ์สำหรับคนอื่น ๆ
ตัวเลขที่คุณสามารถใช้ได้และสิ่งที่แสดงอยู่ที่นี่:
- 0: (000) ไม่ได้รับอนุญาต
- 1: (001) ดำเนินการอนุญาต
- 2: (010) สิทธิ์ในการเขียน
- 3: (011) เขียนและดำเนินการการอนุญาต
- 4: (100) สิทธิ์ในการอ่าน
- 5: (101) อ่านและดำเนินการการอนุญาต
- 6: (110) สิทธิ์ในการอ่านและเขียน
- 7: (111) อ่านเขียนและดำเนินการสิทธิ์
แต่ละสิทธิ์สามสิทธิ์จะแสดงด้วยหนึ่งในบิตในฐานสองเทียบเท่ากับเลขฐานสิบ ดังนั้น 5 ซึ่งเป็น 101 ในไบนารีหมายถึงอ่านและดำเนินการ 2 ซึ่งเป็น 010 ในไบนารีจะหมายถึงสิทธิ์ในการเขียน
เมื่อใช้วิธีนี้คุณตั้งค่าการอนุญาตที่คุณต้องการ คุณไม่ได้เพิ่มสิทธิ์เหล่านี้ลงในสิทธิ์ที่มีอยู่ ดังนั้นหากมีสิทธิ์ในการอ่านและเขียนอยู่แล้วคุณจะต้องใช้ 7 (111) เพื่อเพิ่มสิทธิ์ในการดำเนินการ การใช้ 1 (001) จะลบสิทธิ์ในการอ่านและเขียนและเพิ่มสิทธิ์ในการดำเนินการ
มาเพิ่มสิทธิ์ในการอ่านกลับในไฟล์“ .page” สำหรับผู้ใช้หมวดอื่น ๆ เราต้องตั้งค่าสิทธิ์ผู้ใช้และกลุ่มด้วยดังนั้นเราต้องตั้งค่าให้เป็นสิ่งที่มีอยู่แล้ว ผู้ใช้เหล่านี้มีสิทธิ์ในการอ่านและเขียนแล้วซึ่งก็คือ 6 (110) เราต้องการให้ "คนอื่น" อ่านและอนุญาตดังนั้นจึงต้องตั้งค่าเป็น 4 (100)
คำสั่งต่อไปนี้จะทำให้สำเร็จ:
chmod 664 * .page
สิ่งนี้กำหนดสิทธิ์ที่เราต้องการสำหรับผู้ใช้สมาชิกกลุ่มและคนอื่น ๆ ตามที่เราต้องการ ผู้ใช้และสมาชิกกลุ่มมีสิทธิ์รีเซ็ตเป็นสิ่งที่มีอยู่แล้วและคนอื่น ๆ จะได้รับสิทธิ์ในการอ่านคืน
ls -l
ตัวเลือกขั้นสูง
หากคุณอ่าน man page chmod
คุณจะเห็นว่ามีตัวเลือกขั้นสูงบางอย่างที่เกี่ยวข้องกับบิต SETUID และ SETGID และการลบที่ จำกัด หรือบิต "เหนียว"
สำหรับ 99% ของกรณีที่คุณต้องการchmod
ตัวเลือกที่อธิบายไว้ที่นี่จะมีให้คุณครอบคลุม