How to list linux file permissions in Octal Notation

วันนี้เนื่องจากทีมผู้ดูแล  Web Hosting ต้องการดูว่ามีไฟล์ไหนบ้างที่มี permission เป็น 777 ก็เลยนั่งหาดูพบว่า สามารถใช้คำสั่ง stat ในการดูได้ เช่น

$stat -c "%a %n" /var/www

ผลลัพธ์
Screenshot from 2013-05-01 11:47:06

หรือ

$stat -c "%A (%a) %8s %.19y %n" /var/www

ผลลัพธ์
Screenshot from 2013-05-01 11:49:19

ทั้งนี้เนื่องจากไม่สามารถทำให้มัน recursive ได้ ก็ต้องหาไปทีละโฟลเดอร์ …. จนกระทั่งเจออีกคำสั่ง คือ สร้าง alias ชื่อ lso ดังนี้

$alias lso="ls -alG | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\" %0o \",k);print}'"

เมื่อจะใช้งาน ก็เพียงสั่ง lso ที่คอมมานด์ไลน์ ผลลัพธ์
Screenshot from 2013-05-01 11:54:27

สามารถปรับ option ของ ls ใน alias ให้ recursive ได้โดยเพิ่ม R ตัวใหญ่ลงไป ดังนี้

$alias lso="ls -alGR | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\" %0o \",k);print}'"

เมื่อเรียกใช้จะได้ผลลัพธ์
Screenshot from 2013-05-01 11:57:21

สามารถใช้ร่วมกับ grep เพื่อค้นหาเฉพาะค่าที่ต้องการ เช่น

$lso|grep " ^777"

ผลลัพธ์
Screenshot from 2013-05-01 13:11:12

ก็พอจะช่วยได้บ้างครับ Big Smile ขอให้สนุกครับ

ที่มา

http://thenubbyadmin.com/2012/02/16/how-to-list-linux-file-permissions-in-octal-notation/

http://askubuntu.com/questions/152001/how-can-i-get-octal-file-permissions-from-command-line

5 thoughts on “How to list linux file permissions in Octal Notation”

  1. อึ่มมม จริงๆแล้ว แค่นี้ก็ได้นะ
    find /home -type d -perm +ugo+w -exec ls -ld {} \;

    แล้วจะหาว่า มีทีใดบ้าง เปิดให้ apache เขียนได้ ก็
    find /home -type d -user apache -perm /ugo=w -exec ls -ld {} \;

  2. +1 ตอนเขาถามพี่ไม่อยู่นี่ คร้าบบบ

  3. ส่วนใหญ่แล้วโฟร์เดอร์อัพโหลดจะเป็น 777 ถ้าเปลี่ยนแล้วจะอัพโหลดไม่ได้ พอจะมีทางแก้ไขไหมคับ นอกจากการ ftp มันไม่ค่อยสะดวกอ่ะ… คิดว่าถ้าตั้งรหัสผ่านให้ยากมากๆ ก็คงไม่มีปัญหา (รือป่าว)

  4. ถ้าโฟลเดอร์นั้นสามารถเข้าถึงและอัพโหลดได้เลย โดยไม่ต้องส็อคอิน ก็จะเป็นโฟลเดอร์ที่ไม่ปลอดภัยครับ อย่าง Joomla เองมีช่องโหว่ตรงนี้ จึงต้องปิดไม่ให้โฟลเดอร์เป็น 777 เลย เป็นได้แค่ 755 สำหรับโฟลเดอร์ และ 644 สำหรับไฟล์ และเจ้าของโฟลเดอร์/ไฟล์ ต้องไม่เป็น www-data หรือ apache ครับ

  5. permission 755 เพื่อไม่ให้ other เขียนได้
    การตั้งให้ owner + group = apache ทำให้ web เขียนได้
    ในพื้นที่ upload มีวิธีเดียว คือ ต้องใช้ .htaccess คุมไม่ให้ php หรือ script execute ได้
    แต่อย่าคิดว่า ทำให้ permission ของไฟล์เป็น 644 คือ ไม่มี execute bit แล้วจะปลอดภัย เพราะ มันกันไม่ให้ไฟล์เป็น executable เท่านั้น แต่… scripting language นั้น ขอแค่สิทธิ์ read ไป ให้ php ทำงานครับ ก็จบแล้ว
    ตั้งรหัสผ่านยาก … ไม่ช่วยอะไรครับ
    ที่เลวร้ายกว่านั้นคือ ถ้าเขียน code แล้วให้ owner เป็น root แล้วดันไปมีช่องโหว่ให้เกิด Buffer Overflow ….. หาก crackers เจาะได้ …..มันได้ root privilege ทันที จบข่าวครับ…

Comments are closed.