Android

คำสั่ง Chmod ใน linux (การอนุญาตไฟล์)

Faith Evans feat. Stevie J – "A Minute" [Official Music Video]

Faith Evans feat. Stevie J – "A Minute" [Official Music Video]

สารบัญ:

Anonim

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

บทช่วยสอนนี้ครอบคลุมถึงวิธีการใช้คำสั่ง chmod เพื่อเปลี่ยนสิทธิ์การเข้าถึงของไฟล์และไดเรกทอรี

สิทธิ์การใช้งานไฟล์ Linux

ก่อนที่จะดำเนินการต่อไปให้อธิบายรูปแบบการอนุญาตพื้นฐานของ Linux

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

  • เจ้าของไฟล์สมาชิกกลุ่มอื่น ๆ (ทุกคน)

ความเป็นเจ้าของไฟล์สามารถเปลี่ยนแปลงได้โดยใช้คำสั่ง chown และ chgrp

มีประเภทการอนุญาตไฟล์สามประเภทที่ใช้กับแต่ละคลาส:

  • สิทธิ์ในการอ่านอนุญาตการเขียนอนุญาตการดำเนินการ

แนวคิดนี้อนุญาตให้คุณระบุผู้ใช้ที่ได้รับอนุญาตให้อ่านไฟล์เขียนไปยังไฟล์หรือเรียกใช้ไฟล์

สามารถดูไฟล์สิทธิ์ได้โดยใช้ ls สั่ง ls :

ls -l filename.txt

-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt |- | | | | | | | | | | | | | +-----------> 7. Group | | | | | +-------------------> 6. Owner | | | | +--------------------------> 5. Alternate Access Method | | | +----------------------------> 4. Others Permissions | | +-------------------------------> 3. Group Permissions | +----------------------------------> 2. Owner Permissions +------------------------------------> 1. File Type

อักขระตัวแรกแสดงประเภทไฟล์ สามารถเป็นไฟล์ปกติ ( - ), ไดเรกทอรี ( d ), ลิงก์สัญลักษณ์ ( l ) หรือไฟล์ชนิดพิเศษอื่น ๆ

อักขระเก้าตัวถัดไปแสดงสิทธิ์ของไฟล์โดยแต่ละสามในสามของอักขระแต่ละตัว Triplet แรกแสดงสิทธิ์ของเจ้าของสิทธิ์กลุ่มที่สองและสิทธิ์ล่าสุดแสดงให้เห็นการอนุญาตสำหรับทุกคน การอนุญาตอาจมีความหมายแตกต่างกันไปขึ้นอยู่กับประเภทของไฟล์

ในตัวอย่างด้านบน ( rw-r--r-- ) หมายความว่าเจ้าของไฟล์มีสิทธิ์อ่านและเขียน ( rw- ) กลุ่มและคนอื่น ๆ มีสิทธิ์อ่านเท่านั้น ( r-- )

ทริปเปิสิทธิ์สามอย่างแต่ละอย่างสามารถสร้างอักขระต่อไปนี้และมีเอฟเฟกต์ต่างกันขึ้นอยู่กับว่าพวกเขาถูกตั้งค่าเป็นไฟล์หรือไปที่ไดเรกทอรี:

ผลกระทบของการอนุญาตต่อไฟล์

การอนุญาต ตัวละคร ความหมายในไฟล์
อ่าน - ไฟล์ไม่สามารถอ่านได้ คุณไม่สามารถดูเนื้อหาไฟล์
r ไฟล์สามารถอ่านได้
เขียน - ไม่สามารถเปลี่ยนแปลงหรือแก้ไขไฟล์ได้
w ไฟล์สามารถเปลี่ยนแปลงหรือแก้ไขได้
ปฏิบัติ - ไม่สามารถเรียกใช้ไฟล์
x ไฟล์สามารถดำเนินการได้
s หากพบใน user triplet จะตั้งค่าบิต setuid หากพบใน group triplet มันตั้งบิต setgid นอกจากนี้ยังหมายถึงการตั้งค่าสถานะ x

เมื่อตั้งค่าสถานะ setuid หรือ setgid ในไฟล์ที่ปฏิบัติการไฟล์จะถูกดำเนินการโดยใช้สิทธิ์ของเจ้าของและ / หรือกลุ่มของไฟล์

S เหมือนกับ s แต่ไม่ได้ตั้งค่า x การตั้งค่าสถานะนี้ไม่ค่อยได้ใช้กับไฟล์
t หากพบใน triplet others มันตั้งค่าบิตที่ sticky

นอกจากนี้ยังหมายถึงการตั้งค่าสถานะ x การตั้งค่าสถานะนี้ไม่มีประโยชน์ในไฟล์

T เหมือนกับ t แต่ไม่ได้ตั้งค่าแฟล็ก x การตั้งค่าสถานะนี้ไม่มีประโยชน์ในไฟล์

ผลของการอนุญาตในนาม (โฟลเดอร์)

ใน Linux ไดเรกทอรีเป็นไฟล์ประเภทพิเศษที่มีไฟล์และไดเรกทอรีอื่น ๆ

การอนุญาต ตัวละคร ความหมายในไดเรกทอรี
อ่าน - ไม่สามารถแสดงเนื้อหาของไดเรกทอรี
r เนื้อหาของไดเรกทอรีสามารถแสดงได้

(เช่นคุณสามารถแสดงรายการไฟล์ในไดเรกทอรีด้วย ls )

เขียน - เนื้อหาของไดเรกทอรีไม่สามารถเปลี่ยนแปลงได้
w เนื้อหาของไดเรกทอรีสามารถเปลี่ยนแปลงได้

(เช่นคุณไม่สามารถสร้างไฟล์ใหม่ลบไฟล์.. เป็นต้น)

ปฏิบัติ - ไม่สามารถเปลี่ยนไดเรกทอรีเป็น
x ไดเรกทอรีสามารถสำรวจได้โดยใช้ cd
s หากพบใน user triplet มันตั้งบิต setuid หากพบใน group triplet มันตั้งบิต setgid นอกจากนี้ยังหมายถึงการตั้งค่าสถานะ x เมื่อมีการตั้งค่าสถานะ setgid ในไดเรกทอรีไฟล์ใหม่ที่สร้างขึ้นภายในจะสืบทอด ID กลุ่มไดเรกทอรี (GID) แทนรหัสกลุ่มหลักของผู้ใช้ที่สร้างไฟล์

setuid ไม่มีผลกระทบกับไดเรกทอรี

S เหมือนกับ s แต่ไม่ได้ตั้งค่า x การตั้งค่าสถานะนี้ไม่มีประโยชน์ในไดเรกทอรี
t หากพบใน triplet others มันตั้งค่าบิตที่ sticky

นอกจากนี้ยังหมายถึงการตั้งค่าสถานะ x เมื่อ sticky bit ถูกตั้งค่าไว้ในไดเรกทอรีเฉพาะเจ้าของไฟล์เจ้าของไดเรกทอรีหรือผู้ใช้ที่เป็นผู้ดูแลระบบเท่านั้นที่สามารถลบหรือเปลี่ยนชื่อไฟล์ภายในไดเรกทอรีได้

T เหมือนกับ t แต่ไม่ได้ตั้งค่าแฟล็ก x การตั้งค่าสถานะนี้ไม่มีประโยชน์ในไดเรกทอรี

การใช้ chmod

คำสั่ง chmod ใช้รูปแบบทั่วไปต่อไปนี้:

chmod MODE FILE…

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

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

วิธีสัญลักษณ์ (ข้อความ)

ไวยากรณ์ของคำสั่ง chmod เมื่อใช้โหมดสัญลักษณ์มีรูปแบบต่อไปนี้:

chmod perms… FILE…

ชุดธงแรก ( ), ค่าสถานะผู้ใช้, กำหนดว่าผู้ใช้คลาสใดที่อนุญาตให้มีการเปลี่ยนแปลงไฟล์

  • u - เจ้าของไฟล์ g - ผู้ใช้ที่เป็นสมาชิกของกลุ่ม o - ผู้ใช้อื่นทั้งหมด a - ผู้ใช้ทั้งหมดเหมือนกับ ugo

หากไม่ระบุค่าสถานะผู้ใช้ค่าเริ่มต้นคือ a และสิทธิ์ที่กำหนดโดย umask จะไม่ได้รับผลกระทบ

ชุดธงที่สอง ( ) การตั้งค่าสถานะการดำเนินการกำหนดว่าจะอนุญาตให้ลบเพิ่มหรือตั้งค่าสิทธิ์:

  • - ลบสิทธิ์ที่ระบุ + เพิ่มสิทธิ์ที่ระบุ = เปลี่ยนสิทธิ์ปัจจุบันเป็นสิทธิ์ที่ระบุ หากไม่มีการระบุสิทธิ์หลังจากสัญลักษณ์ = อนุญาตทั้งหมดจากคลาสผู้ใช้ที่ระบุจะถูกลบออก

สิทธิ์ ( perms… ) สามารถตั้งค่าได้อย่างชัดเจนโดยใช้ศูนย์หรือตัวอักษรอย่างน้อยหนึ่งตัวต่อไปนี้: r , w , x , X , X , s และ t ใช้ตัวอักษรเดียวจาก set u , g และ o เมื่อคัดลอกการอนุญาตจากคลาสหนึ่งไปยังคลาสผู้ใช้อื่น

เมื่อตั้งค่าการอนุญาตสำหรับคลาสผู้ใช้มากกว่าหนึ่งคลาส ( ) ใช้เครื่องหมายจุลภาค (ไม่มีช่องว่าง) เพื่อแยกโหมดสัญลักษณ์

ด้านล่างเป็นตัวอย่างบางส่วนของวิธีการใช้คำสั่ง chmod ในโหมดสัญลักษณ์:

  • ให้สมาชิกกลุ่มได้รับอนุญาตในการอ่านไฟล์ แต่ไม่ต้องเขียนและดำเนินการ:

    chmod g=r filename

    ลบสิทธิ์ดำเนินการสำหรับผู้ใช้ทั้งหมด:

    chmod ax filename

    ลบการอนุญาตการเขียนสำหรับผู้ใช้รายอื่นอย่างชัดเจน:

    chmod -R ow dirname

    ลบสิทธิ์การอ่านเขียนและดำเนินการสำหรับผู้ใช้ทั้งหมดยกเว้นเจ้าของไฟล์:

    chmod og-rwx filename

    สิ่งเดียวกันสามารถทำได้โดยใช้แบบฟอร์มต่อไปนี้:

    chmod og= filename

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

    chmod u=rwx, g=r, o= filename

    เพิ่มสิทธิ์ของเจ้าของไฟล์ในการอนุญาตที่สมาชิกของกลุ่มไฟล์มี:

    chmod g+u filename

    เพิ่มเหนียวเล็กน้อยไปยังไดเรกทอรีที่กำหนด:

    chmod o+t dirname

วิธีตัวเลข

ไวยากรณ์ของคำสั่ง chmod เมื่อใช้วิธีตัวเลขมีรูปแบบต่อไปนี้:

chmod NUMBER FILE…

เมื่อใช้โหมดตัวเลขคุณสามารถตั้งค่าการอนุญาตสำหรับคลาสผู้ใช้ทั้งสาม (เจ้าของกลุ่มและอื่น ๆ ทั้งหมด) ในเวลาเดียวกัน

NUMBER สามารถเป็นตัวเลข 3 หรือ 4 หลัก

เมื่อใช้ตัวเลข 3 หลักตัวเลขตัวแรกจะแสดงถึงการอนุญาตของเจ้าของไฟล์กลุ่มที่สองของกลุ่มไฟล์และผู้ใช้รายอื่นทั้งหมด

สิทธิ์ในการเขียนอ่านและเรียกใช้แต่ละครั้งมีค่าหมายเลขต่อไปนี้:

  • r (read) = 4 w (เขียน) = 2 x (ดำเนินการ) = 1 ไม่อนุญาต = 0

หมายเลขสิทธิ์ของคลาสผู้ใช้ที่ระบุจะแสดงด้วยผลรวมของค่าสิทธิ์สำหรับกลุ่มนั้น

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

  • เจ้าของ: rwx = 4 + 2 + 1 = 7 กลุ่ม: rx = 4 + 0 + 1 = 5 อื่น ๆ: rx = 4 + 0 + 0 = 4

การใช้วิธีการด้านบนทำให้เกิดจำนวน 754 ซึ่งหมายถึงการอนุญาตที่ต้องการ

ในการตั้งค่าแฟล็ก setuid , setgid และ sticky bit ใช้ตัวเลขสี่หลัก

เมื่อใช้ตัวเลข 4 หลักเลขตัวแรกจะมีความหมายดังต่อไปนี้:

  • setuid = 4setgid = 2sticky = 1 ไม่มีการเปลี่ยนแปลง = 0

ตัวเลขสามหลักถัดไปมีความหมายเหมือนกับเมื่อใช้หมายเลข 3 หลัก

หากตัวเลขตัวแรกคือ 0 จะสามารถละเว้นได้และโหมดนั้นสามารถแสดงด้วยตัวเลข 3 หลัก โหมดตัวเลข 0755 เหมือนกับ 755

ในการคำนวณโหมดตัวเลขคุณสามารถใช้วิธีอื่น (วิธีฐานสอง) ได้ แต่มันก็ซับซ้อนกว่าเล็กน้อย การรู้วิธีคำนวณโหมดตัวเลขโดยใช้ 4, 2 และ 1 นั้นเพียงพอสำหรับผู้ใช้ส่วนใหญ่

คุณสามารถตรวจสอบการอนุญาตของไฟล์ในรูปแบบตัวเลขโดยใช้คำสั่ง stat :

stat -c "%a" filename

644

นี่คือตัวอย่างของวิธีใช้คำสั่ง chmod ในโหมดตัวเลข:

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

    chmod 644 dirname

    มอบสิทธิ์การอ่านเขียนและดำเนินการให้เจ้าของไฟล์อ่านและดำเนินการอนุญาตแก่สมาชิกกลุ่มและไม่ให้สิทธิ์ผู้ใช้รายอื่น:

    chmod 750 dirname

    ให้สิทธิ์ในการอ่านเขียนและดำเนินการและบิตไปยังไดเร็กทอรีที่กำหนด:

    chmod 1777 dirname

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

    chmod -R 700 dirname

การใช้ไฟล์อ้างอิง

ตัวเลือก --reference=ref_file อนุญาตให้คุณตั้งค่าการอนุญาตของไฟล์ให้เหมือนกับของไฟล์อ้างอิงที่ระบุ ( ref_file )

chmod --reference=REF_FILE FILE

ตัวอย่างเช่นคำสั่งต่อไปนี้จะกำหนดสิทธิ์ของ file1 ให้กับ file2

chmod --reference=file1 file2

เปลี่ยนการอนุญาตของไฟล์ซ้ำ ๆ

ในการเรียกใช้ซ้ำบนไฟล์และไดเรกทอรีทั้งหมดภายใต้ไดเรกทอรีที่กำหนดให้ใช้ตัวเลือก -R ( --recursive ):

chmod -R MODE DIRECTORY

ตัวอย่างเช่นหากต้องการเปลี่ยนการอนุญาตของไฟล์และไดเรกทอรีย่อยทั้งหมดภายใต้ไดเรกทอรี /var/www เป็น 755 คุณจะต้องใช้:

chmod -R 755 /var/www

ปฏิบัติการบนลิงค์สัญลักษณ์

ลิงก์สัญลักษณ์มักมีการอนุญาต 777 ครั้ง

โดยค่าเริ่มต้นเมื่อเปลี่ยนการอนุญาตของ symlink chmod จะเปลี่ยนการอนุญาตในไฟล์ที่ลิงก์ชี้ไป

chmod 755 symlink

โอกาสที่จะเปลี่ยนความเป็นเจ้าของเป้าหมายคุณจะได้รับข้อผิดพลาด“ ไม่สามารถเข้าถึง 'symlink': การอนุญาตที่ถูกปฏิเสธ”

ข้อผิดพลาดเกิดขึ้นเนื่องจากโดยค่าเริ่มต้นบน symlink การกระจาย Linux ส่วนใหญ่ได้รับการคุ้มครองและคุณไม่สามารถทำงานกับไฟล์เป้าหมายได้ ตัวเลือกนี้มีการระบุไว้ใน /proc/sys/fs/protected_symlinks 1 หมายถึงเปิดใช้งานและปิดใช้งาน 0 ขอแนะนำไม่ให้ปิดการใช้งานการป้องกัน symlink

การเปลี่ยนการอนุญาตของไฟล์เป็นกลุ่ม

บางครั้งมีสถานการณ์ที่คุณจะต้องเปลี่ยนไฟล์และการอนุญาตเป็นจำนวนมาก

สถานการณ์ที่พบบ่อยที่สุดคือการเปลี่ยนการอนุญาตซ้ำของเว็บไซต์เป็น 644 และการอนุญาตของไดเรกทอรีเป็น 755

ใช้วิธีตัวเลข:

find /var/www/my_website -type d -exec chmod 755 {} ; find /var/www/my_website -type f -exec chmod 644 {} ;

ใช้วิธีสัญลักษณ์:

find /var/www/my_website -type d -exec chmod u=rwx, go=rx {} ; find /var/www/my_website -type f -exec chmod u=rw, go=r {} ;

คำสั่ง find จะค้นหาไฟล์และไดเร็กทอรีภายใต้ /var/www/my_website และส่งแต่ละไฟล์ที่พบและไดเร็กทอรีไปยังคำสั่ง chmod เพื่อตั้งค่าการอนุญาต

ข้อสรุป

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

เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ chmod เยี่ยมชมหน้าคน chmod

ขั้ว chmod