เรื่่องของ file permission ใน Linux

ปกติแล้วไฟล์ทุกไฟล์ใน linux จะมีเจ้าของเสมอ และสามารถกำหนดได้เลยว่า ใครจะมีสิทธิ์ทำอะไรกับไฟล์นั้นได้บ้าง ถ้าอยากรู้ว่าไฟล์ xyz มี file permission เป็นอย่างไร ให้พิมพ์คำสั่ง ls -la xyz ดู

-rwxr--r-- john users xyz

ตามตัวอย่างนี้ ไฟล์ xyz มี john เป็นเจ้าของ และถือว่าไฟล์นี้อยู่ในกลุ่มผู้ใช้ชื่อ users (ซึ่งก็แน่นอนว่าเป็นกลุ่มที่ john อยู่นั่นเอง)

ส่วนคำว่า -rwxrw-r– เป็นวลีที่แสดงว่าใครมีสิทธิ์อะไรกับไฟล์ xyz บ้าง ซึ่งสิทธิ์เกี่ยวกับการใช้งานไฟล์บน linux จะแบ่งออกได้เป็นสามอย่างคือ อ่าน(r) เขียน(w) รัน(x) โดยสามตัวแรกสุดจะแสดงสิทธิ์ของเจ้าของไฟล์ ซึ่งคือสิทธิ์ของ john ส่วนสามตัวถัดมาคือ สิทธิของผู้ใช้ที่อยู่ในกลุ่ม users และสามตัวสุดท้ายคือสิทธิ์ของคนอื่นๆ ทั้งหมด

ตามตัวอย่างนี้ john มีสิทธิ์ทั้งอ่านเขียนและรันไฟล์ xyz ในขณะที่ คนอื่นที่อยู่ในกลุ่ม users มีสิทธิ์แค่อ่านและเขียน ส่วนคนอื่นนอกจากนั้นมีสิทธิแค่อ่าน เครื่องหมาย – หมายถึงไม่มีสิทธิ์นั้นๆ

ถ้าอยากเปลี่ยนเจ้าของและกลุ่มให้ไฟล์ xyz จาก john:users เป็น root:root ให้พิมพ์ว่า

chown root:root xyz

ถ้าอยากเปลี่ยนให้คนอื่นๆ ทั้งหมด (o) เขียนไฟล์ xyz ได้ด้วย ให้สั่งว่า

chmod o+w xyz

ถ้าอยากให้คนในกลุ่ม(g)เลิกเขียนไฟล์ xyz ได้ ให้สั่งว่า

chmod g-w xyz

หรือถ้าอยากให้เจ้าของ(u)ไฟล์รันไฟล์ไม่ได้ ให้สั่งว่า

chmod u-x xyz

เช่นนี้เป็นต้น เราใช้เครื่องหมาย + กับ – ในการเพิ่มและลดสิทธิ์ของตัวเอง กลุ่ม และคนอื่นๆ

folder ใน linux ก็มี permission เช่นเดียวกับ file แต่ คำว่า r จะหมายถึง ls ได้, w หมายถึง ลบได้ และ x หมายถึง cd ได้ โดยปกติแล้วถ้าเราต้องการให้ใครเข้าถึง folder ได้จะต้องให้สิทธิ์ทั้ง r-x เป็นอย่างน้อย เพราะถ้าให้ cd ได้ แต่ ls ไม่ได้ ก็ไม่มีประโยชน์

เรื่องน่ารู้อื่นๆ เกี่ยวกับ permission

  • ไฟล์ที่เราสร้างใหม่จะได้สิทธิ์ rw-r–r– และโฟลเดอร์ใหม่จะได้สิทธิ rwxr-xr-x นั่นคือ คนอื่นๆ ทั้งในกลุ่มและนอกกลุ่มของเราจะอ่านได้อย่างเดียว ตัวอย่างเช่น ไฟล์ .html ส่วนการรันนั้นแม้แต่ตัวเราเองก็ต้อง chmod +x เพิ่ม
  • ถ้าต้องการ chmod ทุกไฟล์ใน folder ชื่อ folder1 ที่ใช้เก็บไฟล์ html ให้สั่งสองคำสั่งดังนี้
find /folder1 -type f -exec chmod 664 {} ;
find /folder1 -type d -exec chmod 775 {} ;

Leave a Reply

Your email address will not be published. Required fields are marked *