สิทธิ์ใน Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

สวัสดีทุกคน. นี่คือการแปลบทความจากหนังสือ RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 และ EX300

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

งั้นไปกันเถอะ

สิทธิ์ใน Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

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

บทความนี้เริ่มต้นด้วยภาพรวมของแนวคิดพื้นฐาน ตามด้วยการอภิปรายเกี่ยวกับสิทธิ์พิเศษและรายการควบคุมการเข้าถึง (ACL) ในตอนท้ายของบทความนี้ เราจะกล่าวถึงการตั้งค่าการอนุญาตเริ่มต้นผ่าน umask ตลอดจนการจัดการแอตทริบิวต์ของผู้ใช้เพิ่มเติม

การจัดการความเป็นเจ้าของไฟล์

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

การแสดงเจ้าของไฟล์หรือไดเร็กทอรี

ใน Linux ทุกไฟล์และทุกไดเร็กทอรีมีเจ้าของสองคน: ผู้ใช้และเจ้าของกลุ่ม

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

สิ่งนี้เกิดขึ้นตามลำดับต่อไปนี้:

  1. เชลล์จะตรวจสอบเพื่อดูว่าคุณเป็นเจ้าของไฟล์ที่คุณต้องการเข้าถึงหรือไม่ หากคุณเป็นเจ้าของ คุณจะได้รับสิทธิ์และเชลล์จะหยุดตรวจสอบ
  2. หากคุณไม่ใช่เจ้าของไฟล์ เชลล์จะตรวจสอบเพื่อดูว่าคุณเป็นสมาชิกของกลุ่มที่มีสิทธิ์ในไฟล์หรือไม่ หากคุณเป็นสมาชิกของกลุ่มนี้ คุณจะเข้าถึงไฟล์ด้วยสิทธิ์ที่กลุ่มกำหนดไว้ และเชลล์จะหยุดการตรวจสอบ
  3. หากคุณไม่ใช่ผู้ใช้หรือเจ้าของกลุ่ม คุณจะได้รับสิทธิ์ของผู้ใช้รายอื่น (Other)

หากต้องการดูการกำหนดเจ้าของปัจจุบัน คุณสามารถใช้คำสั่ง ls -l. คำสั่งนี้แสดงผู้ใช้และเจ้าของกลุ่ม ด้านล่างนี้ คุณสามารถดูการตั้งค่าเจ้าของสำหรับไดเร็กทอรีในไดเร็กทอรี /home

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

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

find / -user linda

คุณสามารถใช้ พบ เพื่อค้นหาไฟล์ที่มีกลุ่มใดกลุ่มหนึ่งเป็นเจ้าของ

ตัวอย่างเช่น คำสั่งต่อไปนี้ค้นหาไฟล์ทั้งหมดที่อยู่ในกลุ่ม ผู้ใช้:

find / -group users

เปลี่ยนเจ้าของ

หากต้องการใช้สิทธิ์ที่เหมาะสม สิ่งแรกที่ควรพิจารณาคือความเป็นเจ้าของ มีคำสั่งสำหรับสิ่งนี้ chown. ไวยากรณ์ของคำสั่งนี้เข้าใจง่าย:

chown кто что

ตัวอย่างเช่น คำสั่งต่อไปนี้เปลี่ยนเจ้าของไดเร็กทอรี /home/account เป็นผู้ใช้ linda:

chown linda /home/account

ทีม chown มีหลายตัวเลือก ซึ่งหนึ่งในนั้นมีประโยชน์อย่างยิ่ง: -R. คุณสามารถคาดเดาได้ว่ามันทำอะไรเพราะตัวเลือกนี้มีให้สำหรับคำสั่งอื่นๆ มากมายเช่นกัน วิธีนี้ทำให้คุณสามารถตั้งค่าเจ้าของซ้ำได้ ซึ่งจะช่วยให้คุณสามารถตั้งค่าเจ้าของไดเร็กทอรีปัจจุบันและทุกอย่างด้านล่าง คำสั่งต่อไปนี้เปลี่ยนความเป็นเจ้าของไดเร็กทอรี /home และทุกอย่างที่อยู่ด้านล่างให้กับผู้ใช้ linda:

ตอนนี้เจ้าของมีลักษณะดังนี้:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

มาทำ:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

ตอนนี้ผู้ใช้ lisa ได้กลายเป็นเจ้าของไดเร็กทอรีบัญชี:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

เปลี่ยนเจ้าของกลุ่ม

มีสองวิธีในการเปลี่ยนความเป็นเจ้าของกลุ่ม คุณสามารถทำได้โดยใช้ chownแต่มีคำสั่งพิเศษชื่อ ซีจีอาร์พีที่ทำงาน หากต้องการใช้คำสั่ง chown, ใช้ . หรือ : ข้างหน้าชื่อกลุ่ม

คำสั่งต่อไปนี้เปลี่ยนเจ้าของกลุ่ม /home/account เป็นกลุ่มบัญชี:

chown .account /home/account

คุณสามารถใช้ได้ chown เพื่อเปลี่ยนเจ้าของผู้ใช้และ/หรือกลุ่มได้หลายวิธี นี่คือตัวอย่างบางส่วน:

  • chown ลิซ่า myfile1 กำหนดให้ผู้ใช้ lisa เป็นเจ้าของ myfile1
  • chunk lisa.sales myfile ตั้งค่าผู้ใช้ lisa เป็นเจ้าของไฟล์ myfile และยังตั้งค่ากลุ่มการขายเป็นเจ้าของไฟล์เดียวกัน
  • chown lisa: ขาย myfile เช่นเดียวกับคำสั่งก่อนหน้า
  • chown .sales myfile ตั้งกลุ่มการขายเป็นเจ้าของ myfile โดยไม่เปลี่ยนเจ้าของผู้ใช้
  • chown : ขาย myfile เช่นเดียวกับคำสั่งก่อนหน้า

คุณสามารถใช้คำสั่ง ซีจีอาร์พีเพื่อเปลี่ยนเจ้าของกลุ่ม พิจารณาตัวอย่างต่อไปนี้ ซึ่งคุณสามารถใช้ ซีจีอาร์พี ตั้งค่าเจ้าของไดเร็กทอรีบัญชีเป็นกลุ่มขาย:

chgrp .sales /home/account

เช่นเดียวกับ chownคุณสามารถใช้ตัวเลือก -R с ซีจีอาร์พีรวมทั้งเปลี่ยนเจ้าของกลุ่มซ้ำ

ทำความเข้าใจกับเจ้าของเริ่มต้น

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

ในการแสดงกลุ่มหลักที่มีประสิทธิภาพในปัจจุบัน ผู้ใช้สามารถใช้คำสั่ง กลุ่ม:

[root@server1 ~]# groups lisa
lisa : lisa account sales

หากผู้ใช้ linda ปัจจุบันต้องการเปลี่ยนกลุ่มหลักที่มีประสิทธิภาพ เขาจะใช้คำสั่ง ใหม่ตามด้วยชื่อกลุ่มที่ต้องการตั้งเป็นกลุ่มหลักที่มีประสิทธิภาพใหม่ หลังจากใช้คำสั่ง ใหม่ กลุ่มหลักจะทำงานจนกว่าผู้ใช้จะป้อนคำสั่ง ทางออก หรือไม่ออกจากระบบ

ข้อมูลต่อไปนี้แสดงวิธีที่ผู้ใช้ linda ใช้คำสั่งนี้ โดยมีการขายเป็นกลุ่มหลัก:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

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

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

การจัดการสิทธิ์ขั้นพื้นฐาน

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

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

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

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

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

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

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

สรุปการใช้สิทธิ์พื้นฐานดังต่อไปนี้:

สิทธิ์ใน Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

ใช้ chmod

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

สิทธิ์ใน Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

เมื่อตั้งค่าสิทธิ์ ให้คำนวณค่าที่คุณต้องการ หากคุณต้องการตั้งค่า read/write/execute สำหรับผู้ใช้, read/execute สำหรับกลุ่ม และ read/execute สำหรับผู้อื่นใน /somefile ให้ใช้คำสั่งต่อไปนี้ chmod:

chmod 755 /somefile

เมื่อคุณใช้ chmod ด้วยวิธีนี้ สิทธิ์ปัจจุบันทั้งหมดจะถูกแทนที่ด้วยสิทธิ์ที่คุณตั้งไว้

หากคุณต้องการเปลี่ยนสิทธิ์ที่เกี่ยวข้องกับสิทธิ์ปัจจุบัน คุณสามารถใช้ chmod ในโหมดสัมพัทธ์ โดยใช้ chmod ในโหมดสัมพัทธ์ คุณทำงานกับตัวบ่งชี้สามตัวเพื่อระบุสิ่งที่คุณต้องการทำ:

  1. ก่อนอื่น คุณระบุว่าคุณต้องการเปลี่ยนสิทธิ์ให้กับใคร ในการทำเช่นนี้ คุณสามารถเลือกระหว่างผู้ใช้ (u), กลุ่ม (g) และคนอื่น ๆ (o).
  2. จากนั้นคุณใช้คำสั่งเพื่อเพิ่มหรือลบการอนุญาตจากโหมดปัจจุบัน หรือตั้งค่าทั้งหมด
  3. ในตอนท้ายคุณใช้ r, w и xเพื่อระบุสิทธิ์ที่คุณต้องการตั้งค่า

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

chmod +x somefile

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

chmod g+w,o-r somefile

เมื่อใช้งาน chmod -R o+rx /ข้อมูล คุณตั้งค่าการอนุญาตให้ดำเนินการสำหรับไดเร็กทอรีทั้งหมดรวมถึงไฟล์ในไดเร็กทอรี /data ในการตั้งค่าการอนุญาตให้ดำเนินการเฉพาะสำหรับไดเร็กทอรี ไม่ใช่สำหรับไฟล์ ให้ใช้ chmod -R o+ rX /ข้อมูล.

X ตัวพิมพ์ใหญ่ช่วยให้แน่ใจว่าไฟล์ไม่ได้รับการอนุญาตให้ดำเนินการ เว้นแต่ว่าไฟล์ได้ตั้งค่าการอนุญาตให้ดำเนินการสำหรับออบเจกต์บางอย่างแล้ว สิ่งนี้ทำให้ X เป็นวิธีที่ชาญฉลาดในการจัดการกับการอนุญาตดำเนินการ สิ่งนี้จะหลีกเลี่ยงการตั้งค่าการอนุญาตนี้ในไฟล์ที่ไม่จำเป็น

ขยายสิทธิ์

นอกเหนือจากสิทธิ์พื้นฐานที่คุณเพิ่งอ่านไป Linux ยังมีชุดสิทธิ์ขั้นสูงอีกด้วย สิ่งเหล่านี้ไม่ใช่สิทธิ์ที่คุณตั้งไว้ตามค่าเริ่มต้น แต่บางครั้งก็มีส่วนเพิ่มเติมที่เป็นประโยชน์ ในส่วนนี้ คุณจะได้เรียนรู้ว่าสิ่งเหล่านี้คืออะไรและจะตั้งค่าได้อย่างไร

ทำความเข้าใจกับ SUID, GUID และสิทธิ์แบบขยาย Sticky Bit

มีสามสิทธิ์ขั้นสูง ประการแรกคือการอนุญาตให้ตั้งค่าตัวระบุผู้ใช้ (SUID) ในกรณีพิเศษบางอย่าง คุณสามารถใช้การอนุญาตนี้กับไฟล์ปฏิบัติการได้ ตามค่าเริ่มต้น ผู้ใช้ที่เรียกใช้งานโปรแกรมได้จะเรียกใช้ไฟล์นั้นด้วยสิทธิ์ของตนเอง

สำหรับผู้ใช้ทั่วไป หมายความว่าจำกัดการใช้โปรแกรม อย่างไรก็ตาม ในบางกรณี ผู้ใช้ต้องการสิทธิ์พิเศษเพื่อทำงานบางอย่างเท่านั้น

ตัวอย่างเช่น ลองพิจารณาสถานการณ์ที่ผู้ใช้จำเป็นต้องเปลี่ยนรหัสผ่าน ในการทำเช่นนี้ ผู้ใช้ต้องเขียนรหัสผ่านใหม่ลงในไฟล์ /etc/shadow อย่างไรก็ตาม ไฟล์นี้ไม่สามารถเขียนได้โดยผู้ใช้ที่ไม่ใช่รูท:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

การอนุญาต SUID นำเสนอวิธีแก้ปัญหานี้ ยูทิลิตี /usr/bin/passwd ใช้สิทธิ์นี้เป็นค่าเริ่มต้น ซึ่งหมายความว่าเมื่อเปลี่ยนรหัสผ่าน ผู้ใช้จะกลายเป็นรูทชั่วคราว ซึ่งอนุญาตให้เขาเขียนไปยังไฟล์ /etc/shadow คุณสามารถดูการอนุญาต SUID ด้วย ls -l ในขณะที่ s ในตำแหน่งที่คุณคาดว่าจะเห็นตามปกติ x สำหรับการอนุญาตที่กำหนดเอง:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

สิทธิ์ SUID อาจดูมีประโยชน์ (และในบางกรณีก็มีประโยชน์) แต่ในขณะเดียวกันก็อาจเป็นอันตรายได้ หากใช้ไม่ถูกต้อง คุณสามารถให้สิทธิ์การรูทโดยไม่ได้ตั้งใจ ดังนั้นฉันแนะนำให้ใช้ด้วยความระมัดระวังสูงสุดเท่านั้น

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

สิทธิ์พิเศษที่สองคือตัวระบุกลุ่ม (SGID) การอนุญาตนี้มีผลสองอย่าง เมื่อนำไปใช้กับไฟล์ปฏิบัติการ จะให้สิทธิ์แก่ผู้ใช้ที่เรียกใช้ไฟล์จากเจ้าของกลุ่มของไฟล์ ดังนั้น SGID จึงสามารถทำสิ่งเดียวกันกับ SUID ได้มากหรือน้อย อย่างไรก็ตาม SGID ไม่ได้ใช้จริงเพื่อจุดประสงค์นี้

เช่นเดียวกับการอนุญาต SUID SGID จะถูกนำไปใช้กับไฟล์ระบบบางไฟล์เป็นการตั้งค่าเริ่มต้น

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

สิ่งนี้ไม่ได้มีประโยชน์เสมอไป โดยเฉพาะอย่างยิ่งเมื่อผู้ใช้ Red Hat/CentOS มีกลุ่มหลักที่ตั้งค่าเป็นกลุ่มที่มีชื่อเดียวกับผู้ใช้ และผู้ใช้เป็นสมาชิกเพียงคนเดียว ดังนั้น ตามค่าเริ่มต้น ไฟล์ที่ผู้ใช้สร้างจะถูกแชร์เป็นกลุ่ม

ลองนึกภาพสถานการณ์ที่ผู้ใช้ linda และ lori ทำงานด้านบัญชีและเป็นสมาชิกของกลุ่ม บัญชี. ตามค่าเริ่มต้น ผู้ใช้เหล่านี้เป็นสมาชิกของกลุ่มส่วนตัวซึ่งพวกเขาเป็นสมาชิกเพียงคนเดียว อย่างไรก็ตาม ผู้ใช้ทั้งสองเป็นสมาชิกของกลุ่มบัญชี แต่ยังเป็นพารามิเตอร์กลุ่มรองด้วย

สถานการณ์เริ่มต้นคือเมื่อผู้ใช้เหล่านี้สร้างไฟล์ กลุ่มหลักจะกลายเป็นเจ้าของ ดังนั้น ตามค่าเริ่มต้น ลินดาจึงไม่สามารถเข้าถึงไฟล์ที่สร้างโดย lori และในทางกลับกัน อย่างไรก็ตาม หากคุณสร้างไดเร็กทอรีกลุ่มที่ใช้ร่วมกัน (เช่น /groups/account) และตรวจสอบให้แน่ใจว่ามีการใช้สิทธิ์ SGID กับไดเร็กทอรีนั้น และตั้งค่าบัญชีกลุ่มเป็นเจ้าของกลุ่มสำหรับไดเร็กทอรีนั้น ไฟล์ทั้งหมดที่สร้างขึ้นในไดเร็กทอรีนั้นและทั้งหมด ของไดเร็กทอรีย่อย และรับบัญชีกลุ่มเป็นเจ้าของกลุ่มตามค่าเริ่มต้น

ด้วยเหตุนี้ การอนุญาต SGID จึงเป็นการอนุญาตที่มีประโยชน์มากในการตั้งค่าไดเร็กทอรีกลุ่มสาธารณะ

สิทธิ์ SGID ที่แสดงในเอาต์พุต ls -l ในขณะที่ s ในตำแหน่งที่คุณมักจะได้รับอนุญาตให้ดำเนินการกลุ่ม:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

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

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

เมื่อคุณใช้บิตเหนียว ผู้ใช้สามารถลบไฟล์ได้ก็ต่อเมื่อเงื่อนไขใดเงื่อนไขหนึ่งต่อไปนี้เป็นจริง:

  • ผู้ใช้เป็นเจ้าของไฟล์
  • ผู้ใช้เป็นเจ้าของไดเร็กทอรีที่มีไฟล์อยู่

เมื่อใช้งาน ls -lคุณสามารถดูบิตเหนียวเป็น t ในตำแหน่งที่คุณมักจะเห็นการอนุญาตให้ดำเนินการสำหรับผู้อื่น:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

การใช้สิทธิเพิ่มเติม

คุณสามารถใช้ SUID, SGID และบิตเหนียวได้ chmod. SUID มีค่าตัวเลขเท่ากับ 4 SGID มีค่าตัวเลขเท่ากับ 2 และบิตเหนียวมีค่าตัวเลขเท่ากับ 1

หากคุณต้องการใช้สิทธิ์เหล่านี้ คุณต้องเพิ่มอาร์กิวเมนต์สี่หลักเข้าไป chmodซึ่งตัวเลขตัวแรกหมายถึงสิทธิ์พิเศษ ตัวอย่างเช่น บรรทัดต่อไปนี้จะเพิ่มสิทธิ์ SGID ให้กับไดเร็กทอรีและตั้งค่า rwx สำหรับผู้ใช้และ rx สำหรับกลุ่มและอื่น ๆ :

chmod 2755 /somedir

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

  1. สำหรับการใช้งาน SUID chmod u+s.
  2. สำหรับการใช้งาน SGID chmod g+s.
  3. สำหรับการใช้งานบิตเหนียว ชโมด+ทีตามด้วยชื่อไฟล์หรือไดเร็กทอรีที่คุณต้องการตั้งค่าสิทธิ์

ตารางสรุปทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับการจัดการสิทธิ์พิเศษ

สิทธิ์ใน Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

ตัวอย่างการทำงานด้วยสิทธิพิเศษ

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

  1. เปิดเทอร์มินัลที่คุณเป็นผู้ใช้ linda คุณสามารถสร้างผู้ใช้ด้วยคำสั่ง ผู้ใช้เพิ่มลินดา, เพิ่มรหัสผ่าน รหัสผ่าน linda.
  2. สร้างไดเร็กทอรี /data ในรูทและไดเร็กทอรีย่อย /data/sales ด้วยคำสั่ง mkdir -p /ข้อมูล/การขาย. สมบูรณ์ ซีดี /ข้อมูล/การขายเพื่อไปยังไดเร็กทอรีการขาย สมบูรณ์ สัมผัสลินดา1 и สัมผัสลินดา2เพื่อสร้างไฟล์เปล่าสองไฟล์ที่เป็นของลินดา
  3. ปฏิบัติตาม ซูลิซ่า เพื่อเปลี่ยนผู้ใช้ปัจจุบันเป็นผู้ใช้ lisa ซึ่งเป็นสมาชิกของกลุ่มการขายด้วย
  4. ปฏิบัติตาม ซีดี /ข้อมูล/การขาย และจากไดเร็กทอรีนั้นดำเนินการ ls -l. คุณจะเห็นไฟล์สองไฟล์ที่สร้างโดยผู้ใช้ linda และอยู่ในกลุ่ม linda สมบูรณ์ rm -f ลินดา*. การดำเนินการนี้จะลบทั้งสองไฟล์
  5. ปฏิบัติตาม แตะลิซ่า1 и แตะลิซ่า2เพื่อสร้างไฟล์สองไฟล์ที่เป็นของผู้ใช้ลิซ่า
  6. ปฏิบัติตาม สุ- เพื่อยกระดับสิทธิ์ของคุณในการรูท
  7. ปฏิบัติตาม chmod g+s,o+t /data/การขายเพื่อตั้งค่าบิตตัวระบุกลุ่ม (GUID) และบิตเหนียวในไดเร็กทอรีกลุ่มที่ใช้ร่วมกัน
  8. ปฏิบัติตาม สุลินดา. แล้วทำ สัมผัสลินดา3 и สัมผัสลินดา4. ตอนนี้คุณควรเห็นว่าไฟล์สองไฟล์ที่คุณสร้างเป็นของกลุ่มการขาย ซึ่งเป็นเจ้าของกลุ่มของไดเร็กทอรี /data/sales
  9. ปฏิบัติตาม rm -rf ลิซ่า*. บิตเหนียวจะป้องกันไม่ให้ไฟล์เหล่านี้ถูกลบในนามของผู้ใช้ linda เนื่องจากคุณไม่ใช่เจ้าของไฟล์เหล่านี้ โปรดทราบว่าหากผู้ใช้ linda เป็นเจ้าของไดเร็กทอรี /data/sales พวกเขาสามารถลบไฟล์เหล่านี้ได้!

การจัดการ ACL (setfacl, getfacl) ใน Linux

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

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

ทำความเข้าใจเกี่ยวกับ ACL

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

ยูทิลิตี้ tar ไม่รองรับ ACL เพื่อให้แน่ใจว่าการตั้งค่า ACL จะไม่สูญหายไปเมื่อคุณสร้างข้อมูลสำรอง ให้ใช้ ดาว แทนน้ำมันดิน ดาว ใช้งานได้กับตัวเลือกเดียวกับน้ำมันดิน มันเพิ่มการรองรับการตั้งค่า ACL เท่านั้น

คุณยังสามารถสำรองข้อมูล ACL ด้วย getfaclซึ่งสามารถกู้คืนได้โดยใช้คำสั่ง setfacl หากต้องการสร้างข้อมูลสำรอง ให้ใช้ getfacl -R /ไดเรกทอรี > file.acls. หากต้องการคืนค่าการตั้งค่าจากไฟล์สำรอง ให้ใช้ setfacl --restore=file.acl.

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

การเตรียมระบบไฟล์สำหรับ ACL

ก่อนที่คุณจะเริ่มทำงานกับ ACL คุณอาจต้องเตรียมระบบไฟล์ของคุณให้รองรับ ACL เนื่องจากต้องมีการขยายข้อมูลเมตาของระบบไฟล์ จึงไม่มีการสนับสนุนเริ่มต้นสำหรับ ACL ในระบบไฟล์เสมอไป หากคุณได้รับข้อความ "ไม่รองรับการดำเนินการ" เมื่อตั้งค่า ACL สำหรับระบบไฟล์ ระบบไฟล์ของคุณอาจไม่รองรับ ACL

ในการแก้ไขปัญหานี้ คุณต้องเพิ่มตัวเลือก เมาท์ acl ใน /etc/fstab เพื่อให้ระบบไฟล์ติดตั้งโดยรองรับ ACL ตามค่าเริ่มต้น

การเปลี่ยนและดูการตั้งค่า ACL ด้วย setfacl และ getfacl

ในการตั้งค่า ACL คุณต้องมีคำสั่ง setfacl. หากต้องการดูการตั้งค่า ACL ปัจจุบัน คุณต้องมี getfacl. ทีม ls -l ไม่แสดง ACL ที่มีอยู่ มันเพิ่งแสดงเครื่องหมาย + หลังรายการสิทธิ์ ซึ่งบ่งชี้ว่า ACL มีผลกับไฟล์ด้วย

ก่อนตั้งค่า ACL คุณควรแสดงการตั้งค่า ACL ปัจจุบันด้วยเสมอ getfacl. ในตัวอย่างด้านล่าง คุณสามารถดูสิทธิ์ปัจจุบันดังที่แสดงด้วย ls -lและยังแสดงด้วย getfacl. หากดูอย่างใกล้ชิดคุณจะเห็นว่าข้อมูลที่แสดงนั้นเหมือนกันทุกประการ

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

อันเป็นผลมาจากการดำเนินการตามคำสั่ง getfacl ด้านล่างนี้คุณจะเห็นว่าสิทธิ์นั้นแสดงสำหรับออบเจกต์ที่แตกต่างกันสามรายการ: ผู้ใช้ กลุ่ม และอื่นๆ ตอนนี้เรามาเพิ่ม ACL เพื่อให้สิทธิ์ในการอ่านและดำเนินการแก่กลุ่มการขายด้วย คำสั่งนี้ setfacl -mg:sales:rx /dir. ในทีมนี้ -m แสดงว่าต้องเปลี่ยนการตั้งค่า ACL ปัจจุบัน หลังจากนั้น g:ขาย:rx บอกคำสั่งให้ตั้งค่า ACL แบบอ่านและรัน (rx) สำหรับกลุ่ม (g) ฝ่ายขาย. ด้านล่างนี้ คุณจะเห็นลักษณะของคำสั่ง รวมถึงเอาต์พุตของคำสั่ง getfacl หลังจากเปลี่ยนการตั้งค่า ACL ปัจจุบัน

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

ตอนนี้คุณเข้าใจวิธีตั้งค่า ACL แบบกลุ่มแล้ว การทำความเข้าใจ ACL สำหรับผู้ใช้และผู้ใช้อื่นๆ ก็เป็นเรื่องง่าย ตัวอย่างเช่น คำสั่ง setfacl -mu:linda:rwx /ข้อมูล ให้สิทธิ์แก่ผู้ใช้ linda ในไดเร็กทอรี /data โดยไม่กำหนดให้เป็นเจ้าของหรือเปลี่ยนการมอบหมายของเจ้าของปัจจุบัน

ทีม setfacl มีคุณสมบัติและตัวเลือกมากมาย ตัวเลือกหนึ่งที่มีความสำคัญเป็นพิเศษคือพารามิเตอร์ -R. หากใช้ ตัวเลือกนี้จะตั้งค่า ACL สำหรับไฟล์และไดเร็กทอรีย่อยทั้งหมดที่มีอยู่ในไดเร็กทอรีที่คุณตั้งค่า ACL ขอแนะนำให้ใช้ตัวเลือกนี้เสมอเมื่อเปลี่ยน ACL สำหรับไดเร็กทอรีที่มีอยู่

การทำงานกับ ACL เริ่มต้น

ข้อดีอย่างหนึ่งของการใช้ ACL คือคุณสามารถให้สิทธิ์แก่ผู้ใช้หรือกลุ่มหลายคนในไดเร็กทอรีได้ ข้อดีอีกอย่างคือคุณสามารถเปิดใช้งานการสืบทอดโดยทำงานกับ ACL เริ่มต้น

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

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

ในการตั้งค่า ACL เริ่มต้น คุณเพียงแค่ต้องเพิ่มตัวเลือก d หลังจากตัวเลือก -m (เรื่องการสั่งซื้อ!). ดังนั้นใช้ setfacl -md:g:sales:rx /dataหากคุณต้องการให้การขายแบบกลุ่มอ่านและดำเนินการตามที่เคยสร้างไว้ในไดเร็กทอรี /data

เมื่อใช้ ACL เริ่มต้น การตั้งค่า ACL สำหรับผู้อื่นอาจมีประโยชน์เช่นกัน ซึ่งมักจะไม่สมเหตุสมผลนักเพราะคุณสามารถเปลี่ยนการอนุญาตสำหรับผู้อื่นที่ใช้ได้เช่นกัน chmod. อย่างไรก็ตาม สิ่งที่คุณทำไม่ได้ chmodคือการระบุสิทธิ์ที่ต้องมอบให้กับผู้ใช้รายอื่นสำหรับไฟล์ใหม่ทุกไฟล์ที่เคยสร้าง หากคุณต้องการป้องกันไม่ให้ผู้อื่นได้รับสิทธิ์จากสิ่งใดก็ตามที่สร้างขึ้นใน /data เพื่อใช้เป็นตัวอย่าง setfacl -md:o::- /ข้อมูล.

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

ตัวอย่างการจัดการสิทธิ์ขั้นสูงโดยใช้ ACL

ในตัวอย่างนี้ คุณจะดำเนินการต่อด้วยไดเร็กทอรี /data/account และ /data/sales ที่คุณสร้างไว้ก่อนหน้านี้ ในตัวอย่างก่อนหน้านี้ คุณตรวจสอบให้แน่ใจว่ากลุ่มการขายมีสิทธิ์ใน /data/sales และกลุ่มบัญชีมีสิทธิ์ใน /data/account

ขั้นแรก ตรวจสอบให้แน่ใจว่ากลุ่มบัญชีได้รับสิทธิ์ในการอ่านในไดเร็กทอรี /data/sales และกลุ่มการขายได้รับสิทธิ์ในการอ่านในไดเร็กทอรี /data/account

จากนั้น คุณตั้งค่า ACL เริ่มต้นเพื่อให้แน่ใจว่าไฟล์ใหม่ทั้งหมดมีสิทธิ์ที่ถูกต้องสำหรับรายการใหม่ทั้งหมด

  1. เปิดเทอร์มินัล
  2. ปฏิบัติตาม setfacl -mg:account:rx /data/sales и setfacl -mg:sales:rx /data/account.
  3. ปฏิบัติตาม getfaclเพื่อให้แน่ใจว่าได้ตั้งค่าการอนุญาตตามที่คุณต้องการ
  4. ปฏิบัติตาม setfacl -md:g:บัญชี:rwx,g:sales:rx /data/salesเพื่อตั้งค่า ACL เริ่มต้นสำหรับไดเร็กทอรีการขาย
  5. เพิ่ม ACL เริ่มต้นสำหรับไดเร็กทอรี /data/account โดยใช้ setfacl -md:g:sales:rwx,g:บัญชี:rx /data/account.
  6. ตรวจสอบว่าการตั้งค่า ACL มีผลโดยการเพิ่มไฟล์ใหม่ไปยัง /data/sales สมบูรณ์ แตะ /data/sales/ไฟล์ใหม่ และทำ getfacl /data/sales/ไฟล์ใหม่ เพื่อตรวจสอบสิทธิ์ปัจจุบัน

ตั้งค่าการอนุญาตเริ่มต้นด้วย umask

ข้างต้น คุณได้เรียนรู้วิธีการทำงานกับ ACL เริ่มต้น หากคุณไม่ได้ใช้ ACL มีตัวเลือกเชลล์ที่กำหนดสิทธิ์เริ่มต้นที่คุณจะได้รับ: อูมาสก์ (หน้ากากย้อนกลับ). ในส่วนนี้ คุณจะได้เรียนรู้วิธีเปลี่ยนสิทธิ์เริ่มต้นด้วย อูมาสก์.

คุณอาจสังเกตเห็นว่าเมื่อคุณสร้างไฟล์ใหม่ จะมีการตั้งค่าการอนุญาตเริ่มต้นบางอย่าง สิทธิ์เหล่านี้ถูกกำหนดโดยการตั้งค่า อูมาสก์. การตั้งค่าเชลล์นี้ใช้กับผู้ใช้ทุกคนเมื่อเข้าสู่ระบบ ในพารามิเตอร์ อูมาสก์ มีการใช้ค่าตัวเลขซึ่งหักออกจากสิทธิ์สูงสุดที่สามารถตั้งค่าได้โดยอัตโนมัติสำหรับไฟล์ การตั้งค่าสูงสุดสำหรับไฟล์คือ 666 และสำหรับไดเร็กทอรีคือ 777

อย่างไรก็ตาม มีข้อยกเว้นบางประการสำหรับกฎนี้ คุณสามารถดูภาพรวมทั้งหมดของการตั้งค่าได้ อูมาสก์ ในตารางด้านล่าง

ของตัวเลขที่ใช้ใน อูมาสก์เช่นเดียวกับในกรณีของอาร์กิวเมนต์ตัวเลขสำหรับคำสั่ง chmodตัวเลขตัวแรกหมายถึงสิทธิ์ของผู้ใช้ ตัวเลขตัวที่สองหมายถึงสิทธิ์ของกลุ่ม และตัวเลขสุดท้ายหมายถึงสิทธิ์เริ่มต้นที่ตั้งไว้สำหรับผู้อื่น ความหมาย อูมาสก์ ค่าเริ่มต้น 022 ให้ 644 สำหรับไฟล์ใหม่ทั้งหมดและ 755 สำหรับไดเร็กทอรีใหม่ทั้งหมดที่สร้างขึ้นบนเซิร์ฟเวอร์ของคุณ

ภาพรวมที่สมบูรณ์ของค่าตัวเลขทั้งหมด อูมาสก์ และผลลัพธ์ของพวกเขาในตารางด้านล่าง

สิทธิ์ใน Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

วิธีง่ายๆ ในการดูการทำงานของการตั้งค่า umask มีดังนี้: เริ่มต้นด้วยการตั้งค่าสิทธิ์เริ่มต้นของไฟล์เป็น 666 และลบ umask ออกเพื่อรับสิทธิ์ที่มีผล ทำเช่นเดียวกันกับไดเร็กทอรีและสิทธิ์เริ่มต้นของไดเร็กทอรี 777

มีสองวิธีในการเปลี่ยนการตั้งค่า umask: สำหรับผู้ใช้ทั้งหมดและสำหรับผู้ใช้แต่ละราย หากคุณต้องการตั้งค่า umask สำหรับผู้ใช้ทั้งหมด คุณต้องแน่ใจว่าการตั้งค่า umask ได้รับการพิจารณาเมื่อเริ่มต้นไฟล์สภาพแวดล้อมเชลล์ ตามที่ระบุไว้ใน /etc/profile วิธีที่ถูกต้องคือสร้างเชลล์สคริปต์ชื่อ umask.sh ในไดเร็กทอรี /etc/profile.d และระบุ umask ที่คุณต้องการใช้ในเชลล์สคริปต์นั้น หากมีการเปลี่ยนแปลง umask ในไฟล์นี้ จะถูกนำไปใช้กับผู้ใช้ทั้งหมดหลังจากล็อกอินเข้าสู่เซิร์ฟเวอร์

อีกทางเลือกหนึ่งในการตั้งค่า umask ผ่าน /etc/profile และไฟล์ที่เกี่ยวข้อง ซึ่งใช้กับผู้ใช้ทุกคนที่เข้าสู่ระบบ คือเปลี่ยนการตั้งค่า umask ในไฟล์ชื่อ .profile ซึ่งสร้างขึ้นในโฮมไดเร็กทอรีของผู้ใช้แต่ละคน

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

การทำงานกับแอ็ตทริบิวต์ผู้ใช้เพิ่มเติม

นี่คือส่วนสุดท้ายเกี่ยวกับสิทธิ์ของ Linux

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

เช่นเดียวกับ ACL แอตทริบิวต์ของไฟล์อาจต้องมีตัวเลือก ภูเขา.

นี่คือตัวเลือก user_xattr. หากคุณได้รับข้อความ "ไม่รองรับการดำเนินการ" เมื่อทำงานกับแอตทริบิวต์ผู้ใช้เพิ่มเติม โปรดแน่ใจว่าได้ตั้งค่าพารามิเตอร์แล้ว ภูเขา ใน /etc/fstab.

มีการบันทึกแอตทริบิวต์จำนวนมาก แอตทริบิวต์บางอย่างมีให้ใช้งานแต่ยังไม่ได้ใช้งาน อย่าใช้มัน พวกเขาจะไม่นำอะไรมาให้คุณ

ด้านล่างนี้คือแอตทริบิวต์ที่มีประโยชน์ที่สุดที่คุณสามารถใช้ได้:

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

a คุณลักษณะนี้อนุญาตให้คุณเพิ่มแต่ไม่สามารถลบไฟล์ได้

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

D แอตทริบิวต์นี้ทำให้แน่ใจว่าการเปลี่ยนแปลงไฟล์ถูกเขียนลงดิสก์ทันที แทนที่จะแคชไว้ก่อน นี่เป็นแอตทริบิวต์ที่มีประโยชน์สำหรับไฟล์ฐานข้อมูลที่สำคัญเพื่อให้แน่ใจว่าจะไม่สูญหายระหว่างไฟล์แคชและฮาร์ดไดรฟ์

d แอตทริบิวต์นี้ช่วยให้แน่ใจว่าไฟล์จะไม่ถูกบันทึกในข้อมูลสำรองที่ใช้ยูทิลิตี้ดัมพ์

I แอตทริบิวต์นี้เปิดใช้งานการสร้างดัชนีสำหรับไดเร็กทอรีที่เปิดใช้งาน ซึ่งช่วยให้เข้าถึงไฟล์ได้เร็วขึ้นสำหรับระบบไฟล์ดั้งเดิม เช่น Ext3 ที่ไม่ใช้ฐานข้อมูล B-tree เพื่อการเข้าถึงไฟล์ที่รวดเร็ว

i คุณลักษณะนี้ทำให้ไฟล์ไม่เปลี่ยนรูป ดังนั้นจึงไม่สามารถทำการเปลี่ยนแปลงกับไฟล์ได้ ซึ่งมีประโยชน์สำหรับไฟล์ที่ต้องการการป้องกันเพิ่มเติม

j แอ็ตทริบิวต์นี้ช่วยให้แน่ใจว่าในระบบไฟล์ ext3 ไฟล์จะถูกเขียนลงในเจอร์นัลก่อนแล้วจึงเขียนลงในบล็อกข้อมูลบนฮาร์ดดิสก์

s เขียนทับบล็อกที่บันทึกไฟล์เป็น 0 หลังจากลบไฟล์ สิ่งนี้ทำให้มั่นใจได้ว่าไฟล์จะไม่สามารถกู้คืนได้เมื่อถูกลบไปแล้ว

u คุณลักษณะนี้เก็บข้อมูลเกี่ยวกับการลบ สิ่งนี้ทำให้คุณสามารถพัฒนายูทิลิตี้ที่ทำงานร่วมกับข้อมูลนี้เพื่อกู้คืนไฟล์ที่ถูกลบ

หากคุณต้องการใช้แอตทริบิวต์คุณสามารถใช้คำสั่ง พูดพล่อย. ตัวอย่างเช่น ใช้ แชท +s ไฟล์บางไฟล์เพื่อใช้แอตทริบิวต์กับไฟล์บางไฟล์ ต้องการลบแอตทริบิวต์หรือไม่ จากนั้นใช้ chattr -s บางไฟล์และจะถูกลบออก หากต้องการดูภาพรวมของแอตทริบิวต์ทั้งหมดที่ใช้อยู่ในปัจจุบัน ให้ใช้คำสั่ง ศีล.

สรุป

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

หากคุณชอบการแปลนี้ โปรดเขียนเกี่ยวกับการแปลนี้ในความคิดเห็น จะได้มีแรงจูงใจในการแปลที่เป็นประโยชน์มากขึ้น

แก้ไขการพิมพ์ผิดและข้อผิดพลาดทางไวยากรณ์ในบทความ ลดย่อหน้าขนาดใหญ่บางย่อหน้าให้เล็กลงเพื่อให้อ่านง่ายขึ้น

แทนที่จะเป็น "เฉพาะผู้ที่มีสิทธิ์ระดับผู้ดูแลระบบในไดเร็กทอรีเท่านั้นที่สามารถใช้สิทธิ์ดำเนินการได้" แก้ไขเป็น "เฉพาะบุคคลที่มีสิทธิ์เขียนในไดเร็กทอรีเท่านั้นที่สามารถใช้สิทธิ์ดำเนินการได้" ซึ่งจะถูกต้องกว่า

ขอบคุณสำหรับความคิดเห็น เบเรซ.

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

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

ขอบคุณสำหรับความคิดเห็นของคุณ CryptoPirate

ที่มา: will.com

เพิ่มความคิดเห็น