Unix / Linux - การอนุญาตไฟล์ / โหมดการเข้าถึง
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการอนุญาตไฟล์และโหมดการเข้าถึงใน Unix การเป็นเจ้าของไฟล์เป็นองค์ประกอบสำคัญของ Unix ที่มีวิธีการที่ปลอดภัยในการจัดเก็บไฟล์ ทุกไฟล์ใน Unix มีคุณสมบัติดังต่อไปนี้ -
Owner permissions - สิทธิ์ของเจ้าของเป็นตัวกำหนดว่าเจ้าของไฟล์สามารถดำเนินการใดได้บ้างในไฟล์
Group permissions - สิทธิ์ของกลุ่มจะกำหนดสิ่งที่ผู้ใช้ซึ่งเป็นสมาชิกของกลุ่มที่เป็นสมาชิกของไฟล์สามารถดำเนินการกับไฟล์ได้
Other (world) permissions - สิทธิ์สำหรับผู้อื่นระบุว่าผู้ใช้รายอื่นสามารถดำเนินการใดในไฟล์ได้บ้าง
ตัวบ่งชี้การอนุญาต
ขณะใช้งาน ls -l คำสั่งจะแสดงข้อมูลต่างๆที่เกี่ยวข้องกับการอนุญาตไฟล์ดังนี้ -
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
ในที่นี้คอลัมน์แรกแสดงถึงโหมดการเข้าถึงที่แตกต่างกันเช่นสิทธิ์ที่เกี่ยวข้องกับไฟล์หรือไดเร็กทอรี
สิทธิ์จะถูกแบ่งออกเป็นกลุ่มละสามตำแหน่งและแต่ละตำแหน่งในกลุ่มหมายถึงสิทธิ์เฉพาะตามลำดับนี้: read (r), write (w), execute (x) -
อักขระสามตัวแรก (2-4) แสดงถึงสิทธิ์สำหรับเจ้าของไฟล์ ตัวอย่างเช่น,-rwxr-xr-- แสดงว่าเจ้าของมีสิทธิ์อ่าน (r) เขียน (w) และดำเนินการ (x)
กลุ่มที่สองของอักขระสามตัว (5-7) ประกอบด้วยสิทธิ์สำหรับกลุ่มที่ไฟล์นั้นอยู่ ตัวอย่างเช่น,-rwxr-xr-- แสดงว่ากลุ่มมีสิทธิ์อ่าน (r) และดำเนินการ (x) แต่ไม่มีสิทธิ์เขียน
กลุ่มสุดท้ายของอักขระสามตัว (8-10) แสดงถึงสิทธิ์สำหรับคนอื่น ๆ ตัวอย่างเช่น,-rwxr-xr-- แสดงว่ามี read (r) อนุญาตเท่านั้น
โหมดการเข้าถึงไฟล์
สิทธิ์ของไฟล์เป็นด่านแรกในการรักษาความปลอดภัยของระบบ Unix หน่วยการสร้างพื้นฐานของสิทธิ์ Unix คือไฟล์read, writeและ execute สิทธิ์ซึ่งได้อธิบายไว้ด้านล่าง -
อ่าน
ให้ความสามารถในการอ่านเช่นดูเนื้อหาของไฟล์
เขียน
ให้ความสามารถในการแก้ไขหรือลบเนื้อหาของไฟล์
ดำเนินการ
ผู้ใช้ที่มีสิทธิ์ในการดำเนินการสามารถเรียกใช้ไฟล์เป็นโปรแกรมได้
โหมดการเข้าถึงไดเรกทอรี
โหมดการเข้าถึงไดเร็กทอรีจะแสดงรายการและจัดระเบียบในลักษณะเดียวกับไฟล์อื่น ๆ มีข้อแตกต่างบางประการที่ต้องกล่าวถึง -
อ่าน
การเข้าถึงไดเร็กทอรีหมายความว่าผู้ใช้สามารถอ่านเนื้อหาได้ ผู้ใช้สามารถดูไฟล์filenames ภายในไดเร็กทอรี
เขียน
การเข้าถึงหมายความว่าผู้ใช้สามารถเพิ่มหรือลบไฟล์จากไดเร็กทอรี
ดำเนินการ
การเรียกใช้ไดเร็กทอรีไม่สมเหตุสมผลดังนั้นให้คิดว่านี่เป็นการอนุญาตในการข้ามผ่าน
ผู้ใช้ต้องมี execute เข้าถึงไฟล์ bin ไดเร็กทอรีเพื่อดำเนินการ ls หรือ cd คำสั่ง
การเปลี่ยนสิทธิ์
ในการเปลี่ยนไฟล์หรือสิทธิ์ไดเร็กทอรีคุณใช้ไฟล์ chmod(เปลี่ยนโหมด) คำสั่ง มีสองวิธีในการใช้ chmod - โหมดสัญลักษณ์และโหมดสัมบูรณ์
การใช้ chmod ใน Symbolic Mode
วิธีที่ง่ายที่สุดสำหรับผู้เริ่มต้นในการแก้ไขการอนุญาตไฟล์หรือไดเร็กทอรีคือการใช้โหมดสัญลักษณ์ ด้วยสิทธิ์เชิงสัญลักษณ์คุณสามารถเพิ่มลบหรือระบุชุดสิทธิ์ที่คุณต้องการโดยใช้ตัวดำเนินการในตารางต่อไปนี้
ซีเนียร์ | ตัวดำเนินการ Chmod และคำอธิบาย |
---|---|
1 | + เพิ่มสิทธิ์ที่กำหนดให้กับไฟล์หรือไดเร็กทอรี |
2 | - ลบสิทธิ์ที่กำหนดออกจากไฟล์หรือไดเร็กทอรี |
3 | = ตั้งค่าการอนุญาตที่กำหนด |
นี่คือตัวอย่างโดยใช้ testfile. วิ่งls -1 บนไฟล์ทดสอบแสดงว่าสิทธิ์ของไฟล์มีดังนี้ -
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
จากนั้นแต่ละตัวอย่าง chmod คำสั่งจากตารางก่อนหน้านี้ถูกรันบนไฟล์ทดสอบตามด้วย ls –lคุณจึงสามารถเห็นการเปลี่ยนแปลงการอนุญาต -
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g = rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
นี่คือวิธีที่คุณสามารถรวมคำสั่งเหล่านี้ไว้ในบรรทัดเดียว -
$chmod o+wx,u-x,g = rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
ใช้ chmod ด้วยสิทธิ์แบบสัมบูรณ์
วิธีที่สองในการแก้ไขสิทธิ์ด้วยคำสั่ง chmod คือการใช้ตัวเลขเพื่อระบุชุดสิทธิ์แต่ละชุดสำหรับไฟล์
สิทธิ์แต่ละรายการจะได้รับการกำหนดค่าดังตารางต่อไปนี้และผลรวมของสิทธิ์แต่ละชุดจะระบุตัวเลขสำหรับชุดนั้น
จำนวน | การเป็นตัวแทนของการอนุญาต Octal | อ้างอิง |
---|---|---|
0 | ไม่ได้รับอนุญาต | --- |
1 | ดำเนินการอนุญาต | --x |
2 | เขียนอนุญาต | -w- |
3 | สิทธิ์ดำเนินการและเขียน: 1 (ดำเนินการ) + 2 (เขียน) = 3 | -wx |
4 | อ่านสิทธิ์ | r-- |
5 | อ่านและดำเนินการอนุญาต: 4 (อ่าน) + 1 (ดำเนินการ) = 5 | rx |
6 | สิทธิ์ในการอ่านและเขียน: 4 (อ่าน) + 2 (เขียน) = 6 | rw- |
7 | สิทธิ์ทั้งหมด: 4 (อ่าน) + 2 (เขียน) + 1 (ดำเนินการ) = 7 | rwx |
นี่คือตัวอย่างการใช้ testfile วิ่งls -1 บนไฟล์ทดสอบแสดงว่าสิทธิ์ของไฟล์มีดังนี้ -
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
จากนั้นแต่ละตัวอย่าง chmod คำสั่งจากตารางก่อนหน้านี้ถูกรันบนไฟล์ทดสอบตามด้วย ls –lคุณจึงสามารถเห็นการเปลี่ยนแปลงการอนุญาต -
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
การเปลี่ยนเจ้าของและกลุ่ม
ในขณะที่สร้างบัญชีบน Unix จะกำหนดไฟล์ owner ID และก group IDให้กับผู้ใช้แต่ละคน การอนุญาตทั้งหมดที่กล่าวถึงข้างต้นยังได้รับมอบหมายตามเจ้าของและกลุ่ม
มีคำสั่งสองคำสั่งเพื่อเปลี่ยนเจ้าของและกลุ่มของไฟล์ -
chown - chown คำสั่งย่อมาจาก "change owner" และใช้เพื่อเปลี่ยนเจ้าของไฟล์
chgrp - chgrp คำสั่งย่อมาจาก "change group" และใช้เพื่อเปลี่ยนกลุ่มของไฟล์
การเปลี่ยนความเป็นเจ้าของ
chownคำสั่งเปลี่ยนความเป็นเจ้าของไฟล์ ไวยากรณ์พื้นฐานมีดังนี้ -
$ chown user filelist
ค่าของผู้ใช้อาจเป็นได้ทั้ง name of a user บนระบบหรือ user id (uid) ของผู้ใช้ในระบบ
ตัวอย่างต่อไปนี้จะช่วยให้คุณเข้าใจแนวคิด -
$ chown amrood testfile
$
เปลี่ยนเจ้าของไฟล์ที่กำหนดให้เป็นผู้ใช้ amrood.
NOTE - ผู้ใช้ขั้นสูงรูทมีความสามารถที่ไม่ จำกัด ในการเปลี่ยนความเป็นเจ้าของไฟล์ใด ๆ แต่ผู้ใช้ทั่วไปสามารถเปลี่ยนความเป็นเจ้าของเฉพาะไฟล์ที่พวกเขาเป็นเจ้าของได้
การเปลี่ยนความเป็นเจ้าของกลุ่ม
chgrpคำสั่งเปลี่ยนความเป็นเจ้าของกลุ่มของไฟล์ ไวยากรณ์พื้นฐานมีดังนี้ -
$ chgrp group filelist
ค่าของกลุ่มสามารถเป็นไฟล์ name of a group ในระบบหรือ the group ID (GID) ของกลุ่มบนระบบ
ตัวอย่างต่อไปนี้ช่วยให้คุณเข้าใจแนวคิด -
$ chgrp special testfile
$
เปลี่ยนกลุ่มของไฟล์ที่กำหนดเป็น special กลุ่ม.
การอนุญาตไฟล์ SUID และ SGID
บ่อยครั้งเมื่อมีการเรียกใช้คำสั่งคำสั่งนั้นจะต้องดำเนินการด้วยสิทธิพิเศษเพื่อให้งานสำเร็จ
ตัวอย่างเช่นเมื่อคุณเปลี่ยนรหัสผ่านด้วยไฟล์ passwd คำสั่งรหัสผ่านใหม่ของคุณจะถูกเก็บไว้ในไฟล์ /etc/shadow.
ในฐานะผู้ใช้ทั่วไปคุณไม่มี read หรือ writeเข้าถึงไฟล์นี้ด้วยเหตุผลด้านความปลอดภัย แต่เมื่อคุณเปลี่ยนรหัสผ่านคุณจะต้องมีสิทธิ์ในการเขียนไฟล์นี้ ซึ่งหมายความว่าpasswd โปรแกรมต้องให้สิทธิ์เพิ่มเติมแก่คุณเพื่อให้คุณสามารถเขียนลงไฟล์ได้ /etc/shadow.
สิทธิ์เพิ่มเติมจะมอบให้กับโปรแกรมผ่านกลไกที่เรียกว่า Set User ID (SUID) และ Set Group ID (SGID) บิต
เมื่อคุณรันโปรแกรมที่เปิดใช้งานบิต SUID คุณจะได้รับสิทธิ์ของเจ้าของโปรแกรมนั้น โปรแกรมที่ไม่มีชุดบิต SUID จะทำงานโดยได้รับอนุญาตจากผู้ใช้ที่เริ่มโปรแกรม
เป็นกรณีที่มี SGID เช่นกัน โดยปกติโปรแกรมจะดำเนินการโดยใช้สิทธิ์กลุ่มของคุณ แต่กลุ่มของคุณจะถูกเปลี่ยนเฉพาะสำหรับโปรแกรมนี้เป็นเจ้าของกลุ่มของโปรแกรม
บิต SUID และ SGID จะปรากฏเป็นตัวอักษร "s"หากมีการอนุญาต SUID"s" บิตจะอยู่ในบิตการอนุญาตที่เจ้าของ execute การอนุญาตมักจะอยู่
ตัวอย่างเช่นคำสั่ง -
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
แสดงว่าบิต SUID ถูกตั้งค่าและคำสั่งนั้นเป็นของรูท อักษรตัวใหญ่S ในตำแหน่งดำเนินการแทนตัวพิมพ์เล็ก s แสดงว่าไม่ได้ตั้งค่าบิตดำเนินการ
หากเปิดใช้งานบิตเหนียวบนไดเร็กทอรีไฟล์จะถูกลบออกก็ต่อเมื่อคุณเป็นหนึ่งในผู้ใช้ต่อไปนี้ -
- เจ้าของสารบบเหนียว
- เจ้าของไฟล์ที่กำลังถูกลบ
- ผู้ใช้ขั้นสูงรูท
ในการตั้งค่าบิต SUID และ SGID สำหรับไดเร็กทอรีใด ๆ ให้ลองใช้คำสั่งต่อไปนี้ -
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname
$