UMASK


Posted in:
 
   หลังจากย้าย host ใหม่มาได้หลายวันแล้วยังไม่ได้มีโอกาสเขียนบทความสักทีวันนี้ขอประเดิมเขียนบทความแรกสำหรับ host ใหม่หน่อยละกันครับ(อู้มานาน แหะๆๆ) เรื่องที่จะมาเขียนวันนี้เป็นเรื่องเกี่ยวกับการเปลี่ยน permission ในการสร้างไฟล์ในระบบ linux ครับ
 
    พอพูดถึงเรื่อง permission ก็คงต้องขอปูพื้นกันสักนิดนึงก่อนครับเผื่อเพื่อนๆที่เพิ่งเล่นลินุกซ์ใหม่ๆจะยังไม่ทราบกัน แต่ว่า...... ขี้เกียจจะ เขียนอ่ะ(แป่ว!!!) เอางี้ได้มะไปอ่านเอาจาก ที่นี่ ละกันครับ วันนี้ผมขอโซโล่เรื่อง umask อย่างเดียวพอครับอันดับแรกขอแนะนำก่อนว่ามันคืออะไร umask เนี่ยมันย่อมาจากคำว่า user file-creation mode mask ประโยชน์ของมันก็คือ เป็นตัวกำหนดว่าไฟล์ และไดเรคทอรีที่ user สร้างขึ้นมาใหม่ในระบบจะให้มีค่า permision เป็นเท่าไรโดย default หลังสร้างเสร็จ เช่น พอสั่ง

$mkdir share

เพื่อสร้างไดเร็คทอรีปุ๊บ ไอ้ไดเร็คทอรีที่เราสร้างก็มี permision เป็น 755 ปั๊บประมาณนั้นน่ะครับ ซึ่งถ้าเป็น ubuntu ที่เราใช้งานกันอยู่ ค่า umask จะถูกเซ็ตให้มีค่าเป็น 022 ดังนั้นไดเรดทอรีในระบบที่เราสร้างขึ้นจะมีค่าเป็น 755 โดย default ส่วนไฟล์ก็จะมีค่าเป็น 644 แต่ถ้าเราไม่ต้องการให้ค่าโดย default เป็น 755 และ 644 ก็สามารถแก้ไขค่า umask เป็นค่าใหม่ได้ง่ายๆครับ

 
   วิธีการคำนวณค่า umask

* ค่า default ของ permission ของระบบกรณีเป็นไฟล์ คือ 666

** ค่า default ของ permission ของระบบกรณีเป็นไดเรคทอรี คือ 777

 
สมมติว่าเราต้องการให้ค่า permission ของไดเรคทอรีหลังจาก user ในระบบที่ได้ทำการสร้างมีค่าเป็น 770 โดย default ก็ให้คำนวณหาค่า umask ดังนี้
 
step 1: ให้นำค่า 777 ซึ่งเป็นค่า default ของ permission ของระบบ(ไดเรคทอรี) มาทำการตั้ง

step 2: แล้วก็นำค่า permission ที่ต้องการมากรอกตรงคำตอบ

step 3: หาค่าที่มา exclusive-or กับ 777 แล้วได้คำตอบเป็น 770

ปัจจุบัน

ค่าที่มา exclusive-or กับ 777 แล้วได้คำตอบเป็น 770 คือ

สรุปเลยครับ : ค่า umask ที่ได้ คือ 007

* exclusive-or บางคนอาจจะลืมว่าทำยังไง เอาตารางนี้ไปดูครับ

ส่วนของจริง ถ้าตามตัวอย่างข้างบนก็จะได้ดังนี้ครับ

exclusive-or คือ บิตเหมือนกันจะ ex-or กันได้ค่าเป็น 0 ส่วนบิตต่างกันจะ ex-or กันได้ค่าเป็น 1

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

step 1: เริ่มต้นด้วยการเอา 666 ซึ่งเป็นค่าเริ่มต้นของไฟล์ permission มาตั้ง

step 2: นำค่า umask ที่หามาได้แล้วจากตอนคำนวณหา umask ให้ไดเรคทอรีมาใส่ลงไป

step 3: ทีนี้ก็คำนวณหาค่า permission ซะ

จากการคำนวณจะได้ค่า permission ของไฟล์เป็น 6 6 1 แต่ เนื่องจากในระบบ linux มันจะไม่ยอมให้ permission ของไฟล์สามารถ execute ได้โดย default ต้องให้ user ทำการ chmod เองถึงจะ execute ได้ ดังนั้นจากผลลัพธ์ที่ควรจะเป็น 661 ก็จะถูกตัดในส่วน execute ทิ้งไป ก็เลยส่งผลให้ permission จาก 661 ถูกปรับเป็น 660 โดยอัตโนมัติ

*สรุปก็คือ เมื่อเราแก้ไขค่า umask จากเดิม 022 เป็น 007 ค่า permission ของไดเรคทอรีที่สร้างใหม่จะมีค่าเป็น 770 ส่วนไฟล์จะต้องมีค่าเป็น 660(จริงๆต้องเป็น 661 แต่ระบบมันไม่ยอม)

 
    เมื่อรู้วิธีการหาคำนวณหาค่า umask แล้วมาดูวิธีการแก้ไขค่า umask ของระบบดีกว่าครับ

step 1: $sudo gedit /etc/profile --> เปิดไฟล์ที่เก็บค่า umask ขึ้นมาแก้ไข

step 2: ไปดูที่บรรทัดล่างสุดจะเจอคำว่า umask 022 ให้แก้ค่าเป็น umask ที่ต้องการใช้ ซึ่งจากตัวอย่างก็ คือ 007

step 3: save ซะ แล้วก็จัดการ log out ออกจากระบบ

step 4: หลังจาก log in เข้ามาใหม่ค่า umask ที่แก้ไว้ก็เป็นอันใช้ได้ครับ

 
   trick

ถ้าต้องการ test ดูว่าค่า umask ที่จะเปลี่ยนใหม่ให้ผลดังที่ต้องการได้จริงมั๊ย ก็สามารถทำได้ดังนี้

ให้เราเปิด terminal แล้วพิมพ์ลงไปว่า umask แล้วตามด้วยค่า permission ที่ต้องการ ซึ่งในที่นี้ คือ 007

$ umask 007

แล้วก็ enter หลังจาก enter ค่า umask ของระบบก็จะกลายเป็น 007 ครับ แต่ได้ผลแค่ชั่วคราวนะครับ ถ้า log out หรือ restart ค่า umask ของระบบจะกลับไปเป็นค่าที่ตั้งไว้ในไฟล์ /etc/profile คือ 022

 
   ###จบข่าว###
centrino14's picture

อยากได้วิธีเปลี่ยนทั้งไดเร็คทอรี่ สับไดเร็คทอรี่ และไฟล์ครับ

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

ลองคำสั่งนี้ครับ

# chmod 777 -R [directory ที่ต้องการ]

คำเตือน ห้ามใช้คำสั่งนี้กับ /home เด็ดขาด (อ้างอิงประสบการณ์ตรง : http://noistuff.wordpress.com/2005/09/11/)

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
  • Allowed HTML tags: <i> <center> <span> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <br> <dt> <dd> <object> <embed> <hr> <img> <blockquote> <b> <u> <del> <div> <p> <table> <tr> <td> <font>

More information about formatting options