umask ใน Linux คืออะไรและคุณใช้งานอย่างไร

เผยแพร่แล้ว: 2022-07-29
แล็ปท็อป Linux แสดง bash prompt
fatmawati achmad zaenuri/Shutterstock.com

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

สิทธิ์การเข้าถึง

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

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

การอนุญาตไฟล์ Linux ทำงานอย่างไร
ที่เกี่ยวข้อง สิทธิ์ของไฟล์ Linux ทำงานอย่างไร

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

มีการอนุญาตชุดที่สามและชุดสุดท้ายสำหรับ "ผู้อื่น" มันเป็นเกมที่จับได้สำหรับทุกคนที่ไม่มีอยู่ในสองชุดแรก

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

The Mode Bits

คุณสามารถดูการอนุญาตสำหรับไฟล์ได้โดยใช้คำสั่ง ls และตัวเลือก -l (รูปแบบยาว)

 ls -l ใด ๆ *

เราจะดูไดเร็กทอรีด้วยการเพิ่มตัวเลือก -d (ไดเร็กทอรี) หากไม่มีตัวเลือกนี้ ls จะดูไฟล์ภายในไดเร็กทอรี ไม่ใช่ที่ไดเร็กทอรีเอง

 ls -ld 

การใช้ ls เพื่อดูการอนุญาตบนไดเร็กทอรีและไฟล์

ที่จุดเริ่มต้นของแต่ละรายการในรายการ ls มีชุดอักขระ 10 ตัว นี่คือภาพระยะใกล้ของอักขระเหล่านั้นสำหรับไฟล์และสำหรับไดเร็กทอรี

สิทธิ์ของไฟล์และไดเรกทอรี ปิดขึ้น

ไฟล์คือบรรทัดบนสุด ไดเร็กทอรีคือบรรทัดล่าง อักขระตัวแรกบอกเราว่าเรากำลังดูไดเร็กทอรีหรือไฟล์ ตัว “d” หมายถึงไดเร็กทอรีและเครื่องหมายขีด “ - ” หมายถึงไฟล์

สิทธิ์สามชุดจะถูกระบุโดยแต่ละกลุ่มที่มีอักขระสามตัว จากซ้ายไปขวา นี่คือสิทธิ์สำหรับเจ้าของ กลุ่ม และอื่นๆ ในแต่ละชุดของสิทธิ์ อักขระสามตัว จากซ้ายไปขวา ระบุการตั้งค่าสำหรับสิทธิ์ในการอ่าน "r" สิทธิ์ในการเขียน "w" และสิทธิ์ในการดำเนินการ "x" จดหมายหมายถึงการตั้งค่าการอนุญาต ขีดกลาง “ - ” หมายความว่าไม่ได้ตั้งค่าการอนุญาต

สำหรับไฟล์ตัวอย่างของเรา อักขระ 10 ตัวหมายถึง:

  • : นี่คือไฟล์ ไม่ใช่ไดเร็กทอรี
  • rwx : เจ้าของสามารถอ่าน เขียน และรันไฟล์นี้ได้
  • rw- : สมาชิกอื่นในกลุ่มเดียวกันที่ไฟล์นี้ถูกกำหนดให้สามารถอ่านและเขียนไปยังไฟล์ได้ แต่ไม่สามารถดำเนินการได้
  • r– : ทุกคนสามารถอ่านไฟล์ได้เท่านั้น

สำหรับไดเรกทอรีตัวอย่างของเรา อักขระ 10 ตัวหมายถึง:

  • d : นี่คือไดเร็กทอรี
  • rwx : เจ้าของสามารถอ่าน เขียน และดำเนินการ ( cd ลงใน) ไดเร็กทอรีนี้
  • rwx : สมาชิกคนอื่นๆ ในกลุ่มเดียวกันสามารถอ่าน เขียน และ cd ลงในไดเร็กทอรีนี้ได้
  • rx : ทุกคนสามารถ cd ลงในไดเร็กทอรีนี้ แต่สามารถอ่านได้เฉพาะไฟล์เท่านั้น พวกเขาไม่สามารถลบไฟล์ แก้ไขไฟล์ หรือสร้างไฟล์ใหม่ได้

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

  • r : บิตการอ่านมีค่าเป็น 4 หากตั้งค่าไว้
  • w : บิตการเขียนมีค่าเป็น 2 หากตั้งค่าไว้
  • x : บิตดำเนินการมีค่า 1 หากตั้งค่าไว้

ชุดของการอนุญาตสามรายการสามารถแสดงด้วยผลรวมของค่าบิต ค่าสูงสุดคือ 4+2+1=7 ซึ่งจะตั้งค่าการอนุญาตทั้งสามชุดเป็น "เปิด" นั่นหมายถึงการเรียงสับเปลี่ยนทั้งหมดของทั้งสามชุดสามารถจับได้ในค่าเลขฐานแปดสามหลัก (ฐาน 8)

จากไฟล์ตัวอย่างของเราจากด้านบน เจ้าของได้อ่าน เขียน และดำเนินการสิทธิ์ ซึ่งก็คือ 4+2+1=7 สมาชิกรายอื่นของกลุ่มที่ไฟล์อยู่มีสิทธิ์ในการอ่านและเขียน ซึ่งก็คือ 4+2=6 หมวดหมู่อื่น ๆ มีเพียงชุดสิทธิ์ในการอ่านซึ่งก็คือ 4

ดังนั้นการอนุญาตสำหรับไฟล์นั้นสามารถแสดงเป็น 764

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

วิธีใช้คำสั่ง chmod บน Linux
วิธีใช้คำสั่ง chmod บน Linux

คำสั่ง chmod ( ch ange mod e bits) เป็นเครื่องมือที่ใช้ในการตั้งค่าการอนุญาตบนไดเร็กทอรีและไฟล์ แต่ไม่ได้กำหนดว่ามีการอนุญาตใดบ้างที่ตั้งค่าไว้ในไดเร็กทอรีหรือไฟล์เมื่อคุณสร้าง ใช้ชุดสิทธิ์เริ่มต้นสำหรับสิ่งนั้น

สิทธิ์เริ่มต้นและ umask

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

วิธีใช้คำสั่ง stat บน Linux
วิธีใช้คำสั่ง stat บน Linux

อย่างไรก็ตาม หากคุณสร้างไดเร็กทอรีใหม่และไฟล์ใหม่ และดูการอนุญาต พวกมันจะไม่ถูกตั้งค่าเป็น 777 และ 666 เราจะสร้างไฟล์และไดเร็กทอรี จากนั้นใช้ stat ที่ไพพ์ผ่าน grep เพื่อแยกบรรทัดด้วย ตัวแทน Octal ของการอนุญาต

 แตะ umask-article.txt
 mkdir howtogeek
 stat umask-article.txt | grep "การเข้าถึง: ("
 stat howtogeek | grep "การเข้าถึง: (" 

สิทธิ์เริ่มต้นสำหรับไดเร็กทอรีและไฟล์ และเอาต์พุตสถิติสำหรับแต่ละไดเร็กทอรี

โดยตั้งค่าเป็น 775 สำหรับไดเรกทอรีและ 664 สำหรับไฟล์ ค่าเหล่านี้ไม่ได้ตั้งค่าเป็นสิทธิ์เริ่มต้นสากลเนื่องจากค่าอื่นจะแก้ไข เรียกว่าค่า umask

ค่าอูมาสก์

ค่า umask ถูกตั้งค่าทั่วโลกด้วยค่าหนึ่งสำหรับรูทและอีกค่าหนึ่งสำหรับผู้ใช้รายอื่นทั้งหมด แต่สามารถตั้งค่าใหม่ให้กับทุกคนได้ หากต้องการดูว่าการตั้งค่า umask ปัจจุบันคืออะไร ให้ใช้คำสั่ง umask

 umask 

ค่า umask สำหรับผู้ใช้ทั่วไป

และสำหรับรูต:

 umask 

ค่า umask สำหรับผู้ใช้รูท

การอนุญาตบนไดเร็กทอรีหรือไฟล์ที่สร้างขึ้นใหม่เป็นผลมาจากค่า umask ที่แก้ไขการอนุญาตเริ่มต้นส่วนกลาง

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

ค่า umask ไม่สามารถ เพิ่ม การอนุญาตได้ สามารถลบหรือ ปิดบังได้เฉพาะการ อนุญาตเท่านั้น นั่นเป็นสาเหตุที่การอนุญาตเริ่มต้นเป็นแบบเสรีนิยม ออกแบบมาเพื่อลดระดับที่เหมาะสมโดยการใช้ค่า umask

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

วิธี umask มาสก์ออกสิทธิ์

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

ค่า umask ทำงานเป็นค่าผกผันของค่าการอนุญาตตามปกติ

  • 0 : ไม่มีการลบการอนุญาต
  • 1 : บิตดำเนินการไม่ได้ตั้งค่าในการอนุญาต
  • 2 : บิตการเขียนไม่ได้ตั้งค่าในการอนุญาต
  • 4 : บิตการอ่านไม่ได้ตั้งค่าในการอนุญาต

สิทธิ์เริ่มต้นของ 777 สำหรับไดเร็กทอรีและ 666 สำหรับไฟล์ถูกแก้ไขโดยค่า umask ที่ 002 เพื่อให้สิทธิ์ในที่สุด 775 และ 664 ในไดเร็กทอรีและไฟล์ทดสอบของเรา

 stat umask-article.txt | grep "การเข้าถึง: ("
 stat howtogeek | grep "การเข้าถึง: (" 

สิทธิ์ในที่สุดบนไดเร็กทอรีและไฟล์

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

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

 sudo mkdir root-dir
 stat howtogeek | grep "การเข้าถึง: (" 

การอนุญาตเมื่อรูทสร้างไดเร็กทอรี

เราจะเห็นว่าการอนุญาตเริ่มต้นของ 777 ลดลงเหลือ 755

ที่เกี่ยวข้อง: วิธีตรวจสอบความปลอดภัยของระบบ Linux ของคุณด้วย Lynis

การเปลี่ยนค่า umask เริ่มต้น

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

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

บน Ubuntu และ Manjaro การตั้งค่า umask สามารถพบได้ในไฟล์เหล่านี้:

  • Login Shell umask : สำหรับค่า umask เริ่มต้นของเชลล์การเข้าสู่ระบบ: /etc/profile
  • Non-Login Shell : สำหรับค่า umask เริ่มต้นของเชลล์ที่ไม่ได้ล็อกอิน: /etc/bash.bashrc

ใน Fedora คุณสามารถพบการตั้งค่า umask ได้ในไฟล์เหล่านี้:

  • ล็อกอิน Shell umask : สำหรับการล็อกอินของเชลล์ ค่า umask เริ่มต้น: /etc/profile
  • Non-Login Shell : สำหรับค่า umask เริ่มต้นของเชลล์ที่ไม่ได้ล็อกอิน: /etc/bashrc

หากคุณไม่จำเป็นต้องเปลี่ยนแปลงสิ่งเหล่านี้ ทางที่ดีควรปล่อยทิ้งไว้ตามลำพัง

วิธีที่แนะนำคือการตั้งค่า umask ใหม่สำหรับบัญชีผู้ใช้แต่ละบัญชีที่ต้องการแตกต่างจากค่าเริ่มต้น การตั้งค่า umask ใหม่สามารถใส่ลงในไฟล์ ".bashrc" ของผู้ใช้ในโฮมไดเร็กทอรีของตนได้

 gedit .bashrc 

การเปิดไฟล์ .bashrc ในตัวแก้ไข

เพิ่มการตั้งค่า umask ของคุณใกล้กับด้านบนของไฟล์

การเพิ่มค่า umask ให้กับไฟล์ .bashrc

บันทึกไฟล์และปิดตัวแก้ไข เปิดหน้าต่างเทอร์มินัลใหม่และตรวจสอบค่า umask ด้วยคำสั่ง umask

 umask 

กำลังตรวจสอบค่า umask ใหม่

ค่าใหม่เปิดใช้งานอยู่

ที่เกี่ยวข้อง: วิธีเชื่อมต่อกับเซิร์ฟเวอร์ SSH จาก Windows, macOS หรือ Linux

การเปลี่ยนแปลงระยะสั้นของ umask

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

คุณสามารถตั้งค่า umask เป็น 077 จากนั้นตรวจสอบว่าค่าใหม่ทำงานอยู่

 อูมาสก์ 077
 umask 

การตั้งค่า umask ชั่วคราว

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

 mkdir ปลอดภัย-dir
 ls -ld ปลอดภัย-dir 

การสร้างไดเร็กทอรีใหม่ในเซสชันที่มีค่า umask ชั่วคราว

สิทธิ์เฉพาะสำหรับเจ้าของไดเร็กทอรี

 mkdir secure-file.txt
 ls -ld secure-file.txt 

การสร้างไฟล์ใหม่ในเซสชันที่มีค่า umask ชั่วคราว

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

ใช้วิธีอื่น umask ถูกใช้

Linux อนุญาตให้บางกระบวนการสืบทอดค่า umask ของระบบ หรือกำหนดการตั้งค่า umask ของตนเองได้ ตัวอย่างเช่น useradd ใช้การตั้งค่า umask เพื่อสร้างโฮมไดเร็กทอรีของผู้ใช้ใหม่

ค่า umask สามารถใช้กับระบบไฟล์ได้เช่นกัน

 น้อยกว่า /etc/fstab 

ดูไฟล์ /etc/fstab ด้วย less

บนคอมพิวเตอร์เครื่องนี้ ระบบไฟล์ “/boot/efi” มีการตั้งค่า umask เป็น 077 ที่ใช้กับมัน

การตั้งค่า umask ในไฟล์ /etc/fstab

ดูที่จุดต่อเชื่อมระบบไฟล์ด้วย ls เราสามารถยืนยันได้ว่าค่า umask ได้ลบการอนุญาตทั้งหมดออกจากทุกคนยกเว้นรูทเจ้าของ

 ls /boot/efi -ld 

การใช้ ls เพื่อดูการอนุญาตบนจุดต่อเชื่อมระบบไฟล์ "/boot./efi"

umask และการอนุญาตต้องการกันและกัน

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

ที่เกี่ยวข้อง: วิธีรักษาความปลอดภัยเซิร์ฟเวอร์ Linux ของคุณด้วย UFW Firewall