วิธีใช้คำสั่ง chmod บน Linux
เผยแพร่แล้ว: 2022-10-25 ควบคุมผู้ที่สามารถเข้าถึงไฟล์ ค้นหาไดเรกทอรี และเรียกใช้สคริปต์โดยใช้คำสั่ง chmod
ของ Linux คำสั่งนี้จะแก้ไขการอนุญาตไฟล์ Linux ซึ่งดูซับซ้อนในแวบแรก แต่จริงๆ แล้วค่อนข้างง่ายเมื่อคุณรู้ว่ามันทำงานอย่างไร
chmod แก้ไขการอนุญาตไฟล์
ใน Linux ผู้ที่สามารถทำอะไรกับไฟล์หรือไดเร็กทอรีจะถูกควบคุมผ่านชุดการอนุญาต มีการอนุญาตสามชุด ชุดหนึ่งสำหรับเจ้าของไฟล์ อีกชุดสำหรับสมาชิกของกลุ่มไฟล์ และชุดสุดท้ายสำหรับคนอื่นๆ
สิทธิ์จะควบคุมการดำเนินการที่สามารถทำได้บนไฟล์หรือไดเร็กทอรี พวกเขาอนุญาตหรือป้องกันไม่ให้ไฟล์ถูกอ่าน แก้ไข หรือหากเป็นสคริปต์หรือโปรแกรม ให้ดำเนินการ สำหรับไดเร็กทอรี การอนุญาตจะควบคุมว่าใครสามารถ cd
ลงในไดเร็กทอรีและใครสามารถสร้างหรือแก้ไขไฟล์ภายในไดเร็กทอรี
คุณใช้คำสั่ง chmod
เพื่อตั้งค่าสิทธิ์เหล่านี้แต่ละรายการ หากต้องการดูว่ามีการอนุญาตใดบ้างในไฟล์หรือไดเรกทอรี เราสามารถใช้ ls
การดูและทำความเข้าใจสิทธิ์ของไฟล์
เราสามารถใช้ตัวเลือก -l
(รูปแบบยาว) เพื่อให้ ls
แสดงรายการสิทธิ์ของไฟล์สำหรับไฟล์และไดเร็กทอรี
ลส -ล
ในแต่ละบรรทัด อักขระตัวแรกระบุประเภทของรายการที่กำลังแสดงรายการ หากเป็นเส้นประ ( -
) แสดงว่าเป็นไฟล์ หากเป็นตัวอักษร d
แสดงว่าเป็นไดเร็กทอรี
อักขระเก้าตัวถัดไปแสดงถึงการตั้งค่าสำหรับการอนุญาตสามชุด
- อักขระสามตัวแรกแสดงการอนุญาตสำหรับผู้ใช้ที่เป็นเจ้าของไฟล์ ( สิทธิ์ของผู้ใช้ )
- อักขระสามตัวตรงกลางแสดงการอนุญาตสำหรับสมาชิกของกลุ่มไฟล์ ( การ อนุญาตกลุ่ม )
- อักขระสามตัวสุดท้ายแสดงการอนุญาตสำหรับผู้ที่ไม่ได้อยู่ในสองหมวดหมู่แรก (การ อนุญาตอื่น ๆ )
มีอักขระสามตัวในแต่ละชุดของสิทธิ์ อักขระเป็นตัวบ่งชี้ว่ามีหรือไม่มีสิทธิ์อย่างใดอย่างหนึ่ง จะเป็นเครื่องหมายขีดกลาง ( -
) หรือตัวอักษรก็ได้ หากตัวละครเป็นเส้นประ แสดงว่าไม่ได้รับอนุญาต หากตัวละครเป็น r
, w
หรือ x
ได้รับอนุญาตแล้ว
ตัวอักษรแสดงถึง:
- r : สิทธิ์ในการอ่าน สามารถเปิดไฟล์และดูเนื้อหาได้
- w : เขียนสิทธิ์ ไฟล์สามารถแก้ไข แก้ไข และลบได้
- x : ดำเนินการอนุญาต หากไฟล์เป็นสคริปต์หรือโปรแกรม ก็สามารถเรียกใช้ได้ (ดำเนินการ)
ตัวอย่างเช่น:
-
---
หมายถึงไม่มีการอนุญาตใด ๆ เลย -
rwx
หมายความว่าได้รับอนุญาตเต็มรูปแบบแล้ว มีตัวบ่งชี้การอ่าน เขียน และดำเนินการทั้งหมด
ในภาพหน้าจอของเรา บรรทัดแรกเริ่มต้นด้วย d
บรรทัดนี้อ้างอิงถึงไดเร็กทอรีที่เรียกว่า "archive" เจ้าของไดเร็กทอรีคือ "dave" และชื่อของกลุ่มที่เป็นของไดเร็กทอรีจะเรียกว่า "dave"
อักขระสามตัวถัดไปคือสิทธิ์ของผู้ใช้สำหรับไดเร็กทอรีนี้ สิ่งเหล่านี้แสดงว่าเจ้าของมีสิทธิ์เต็มที่ อักขระ r
, w
และ x
มีอยู่ทั้งหมด ซึ่งหมายความว่าผู้ใช้ dave มีสิทธิ์ในการอ่าน เขียน และดำเนินการสำหรับไดเร็กทอรีนั้น
ชุดที่สองของอักขระสามตัวคือการอนุญาตกลุ่ม เหล่านี้คือ rx
สิ่งเหล่านี้แสดงว่าสมาชิกของกลุ่ม dave ได้อ่านและดำเนินการสิทธิ์สำหรับไดเร็กทอรีนี้ นั่นหมายความว่าพวกเขาสามารถแสดงรายการไฟล์และเนื้อหาในไดเร็กทอรี และพวกเขาสามารถ cd
(รัน) ลงในไดเร็กทอรีนั้น ไม่มีสิทธิ์ในการเขียน จึงไม่สามารถสร้าง แก้ไข หรือลบไฟล์ได้
ชุดสุดท้ายของอักขระสามตัวก็เป็น rx
ด้วย สิทธิ์เหล่านี้ใช้กับผู้ที่ไม่ได้อยู่ภายใต้การอนุญาตสองชุดแรก บุคคลเหล่านี้ (เรียกว่า "คนอื่น") ได้อ่านและดำเนินการสิทธิ์ในไดเร็กทอรีนี้
ดังนั้น เพื่อสรุป สมาชิกกลุ่มและคนอื่นๆ ได้อ่านและดำเนินการสิทธิ์ เจ้าของซึ่งเป็นผู้ใช้ชื่อเดฟก็มีสิทธิ์ในการเขียนเช่นกัน
สำหรับไฟล์อื่นๆ ทั้งหมด (นอกเหนือจากไฟล์สคริปต์ mh.sh) dave และสมาชิกของกลุ่ม dave มีคุณสมบัติในการอ่านและเขียนในไฟล์ และไฟล์อื่นๆ มีสิทธิ์ในการอ่านเท่านั้น
สำหรับกรณีพิเศษของไฟล์สคริปต์ mh.sh เจ้าของ dave และสมาชิกกลุ่มมีสิทธิ์ในการอ่าน เขียน และดำเนินการ และคนอื่นๆ มีสิทธิ์อ่านและดำเนินการเท่านั้น
การทำความเข้าใจไวยากรณ์การอนุญาต
ในการใช้ chmod
เพื่อตั้งค่าการอนุญาต เราต้องบอก:
- ใคร: เรากำลังตั้งค่าการอนุญาตสำหรับใคร
- อะไร : เรากำลังเปลี่ยนแปลงอะไร? เรากำลังเพิ่มหรือลบการอนุญาตหรือไม่
- ใด : เรากำลังตั้งค่าการอนุญาตใด
เราใช้ตัวบ่งชี้เพื่อแสดงค่าเหล่านี้และสร้าง "คำสั่งอนุญาต" สั้น ๆ เช่น u+x
โดยที่ "u" หมายถึง " ผู้ใช้" (ใคร) "+" หมายถึงเพิ่ม (อะไร) และ "x" หมายถึงการอนุญาตดำเนินการ (ที่).
ค่า "ใคร" ที่เราสามารถใช้ได้คือ:
- u : User หมายถึงเจ้าของไฟล์
- g : Group หมายถึงสมาชิกของกลุ่มที่ไฟล์นั้นเป็นสมาชิกอยู่
- o : อื่น ๆ หมายถึงผู้ที่ไม่ได้อยู่ภายใต้การอนุญาต
u
และg
- a : All หมายถึงทั้งหมดข้างต้น
หากไม่มีการใช้สิ่งเหล่านี้ chmod
จะทำงานเหมือนกับว่ามีการใช้ “ a
”
ค่า "อะไร" ที่เราสามารถใช้ได้คือ:
- – : เครื่องหมายลบ. ลบการอนุญาต
- + : เครื่องหมายบวก ให้สิทธิ์. สิทธิ์จะถูกเพิ่มไปยังสิทธิ์ที่มีอยู่ หากคุณต้องการได้รับสิทธิ์นี้และมีเพียงชุดสิทธิ์นี้เท่านั้น ให้ใช้ตัวเลือก
=
ตามที่อธิบายด้านล่าง - = : เครื่องหมายเท่ากับ ตั้งค่าการอนุญาตและลบผู้อื่น
ค่า "ไหน" ที่เราสามารถใช้ได้คือ:
- r : สิทธิ์ในการอ่าน
- w : สิทธิ์ในการเขียน
- x : การอนุญาตดำเนินการ
การตั้งค่าและแก้ไขการอนุญาต
สมมติว่าเรามีไฟล์ที่ทุกคนมีสิทธิ์เต็มที่ในไฟล์นั้น
ls -l new_ file.txt
เราต้องการให้ผู้ใช้เดฟมีสิทธิ์อ่านและเขียน และกลุ่มและผู้ใช้รายอื่นมีสิทธิ์ในการอ่านเท่านั้น เราสามารถทำได้โดยใช้คำสั่งต่อไปนี้:
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
การตั้งค่าการอนุญาตสำหรับหลายไฟล์
เราสามารถใช้การอนุญาตกับหลายไฟล์พร้อมกันได้
นี่คือไฟล์ในไดเร็กทอรีปัจจุบัน:
ลส -ล
สมมติว่าเราต้องการลบสิทธิ์ในการอ่านสำหรับผู้ใช้ "คนอื่น" ออกจากไฟล์ที่มีนามสกุล ".page" เราสามารถทำได้ด้วยคำสั่งต่อไปนี้:
chmod หรือ *.page
มาดูกันว่ามีผลกระทบอะไรบ้าง:
ลส -ล
ดังที่เราเห็น สิทธิ์ในการอ่านถูกลบออกจากไฟล์ ".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
ซึ่งจะกำหนดสิทธิ์ที่เราต้องการสำหรับผู้ใช้ สมาชิกกลุ่ม และอื่นๆ ตามที่เราต้องการ ผู้ใช้และสมาชิกกลุ่มมีสิทธิ์ในการรีเซ็ตเป็นสิ่งที่พวกเขาเป็นอยู่แล้ว และคนอื่นๆ ได้รับสิทธิ์ในการอ่านคืน
ลส -ล
ตัวเลือกขั้นสูง
หากคุณอ่าน man page สำหรับ chmod
คุณจะเห็นว่ามีตัวเลือกขั้นสูงที่เกี่ยวข้องกับบิต SETUID และ SETGID และการลบแบบจำกัดหรือบิต "เหนียว"
สำหรับ 99% ของเคสที่คุณต้องการ chmod
คุณสามารถครอบคลุมตัวเลือกที่อธิบายไว้ในที่นี้
คำสั่งลินุกซ์ | ||
ไฟล์ | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · ดู · strings · พิมพ์ · เปลี่ยนชื่อ · zip · unzip · mount · umount · ติดตั้ง · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · ฉีก · srm | |
กระบวนการ | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · หมดเวลา · ผนัง · ใช่ · ฆ่า · หลับ · sudo · su · เวลา · groupadd · usermod · กลุ่ม · lshw · ปิดระบบ · รีบูต · หยุด · poweroff · passwd · lscpu · crontab · วันที่ · bg · fg | |
ระบบเครือข่าย | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ