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
$