QUẢN LÝ FILE VÀ THƯ MỤC TRONG LINUX — chmod, chown, chgrp, umask, find


 

✅ 1. HIỂU VỀ QUYỀN FILE LINUX (FILE PERMISSIONS)

Mỗi file/thư mục trong Linux có 3 loại quyền:

  • r (read) — đọc nội dung
  • w (write) — ghi/chỉnh sửa/xóa
  • x (execute) — thực thi (file) / vào được (thư mục)

Quyền được chia cho 3 nhóm người dùng:

  • User (u) — chủ sở hữu file
  • Group (g) — nhóm người dùng
  • Others (o) — tất cả người dùng khác

👉 Khi gõ ls -l, bạn thấy:

bash
-rwxr-xr-- 1 kali kali 1024 Apr 5 10:00 script.sh

Giải thích:

  • - → loại file (- = file thường, d = thư mục)
  • rwx → quyền của user (chủ sở hữu)
  • r-x → quyền của group
  • r-- → quyền của others
  • 1 → số hard link
  • kali kali → owner và group
  • 1024 → kích thước
  • Apr 5 10:00 → thời gian sửa đổi
  • script.sh → tên file
  • ✅ 2. chmod — THAY ĐỔI QUYỀN FILE/THƯ MỤC

    Chức năng: Thay đổi quyền truy cập (read/write/execute).

    🔹 2 cách dùng: Symbolic modeNumeric mode


    🅰️ Symbolic Mode (dễ hiểu, trực quan)

    Cú pháp:

    bash
    chmod [aiou][+-=][rwx] [file]
    • u = user, g = group, o = others, a = all
    • + thêm quyền, - bớt quyền, = gán quyền
    • r, w, x — quyền cụ thể

    💡 Ví dụ:

    bash
    chmod u+x script.sh # Cho phép user thực thi
    chmod g-w config.txt # Cấm group ghi file
    chmod o=r note.txt # Cho others chỉ được đọc
    chmod a+x tool.py # Cho tất cả được thực thi

    🅱️ Numeric Mode (dùng số — phổ biến hơn)

    Mỗi quyền có giá trị:

    • r = 4
    • w = 2
    • x = 1

    → Cộng lại → ra số quyền.

    Ví dụ:

    • rwx = 4+2+1 = 7
    • r-x = 4+0+1 = 5
    • rw- = 4+2+0 = 6

    → Quyền file gồm 3 chữ số: [user][group][others]

    💡 Ví dụ:

    bash
    chmod 755 script.sh # rwxr-xr-x → owner full, group/others read+execute
    chmod 644 config.txt # rw-r--r-- → owner read+write, others chỉ đọc
    chmod 777 dangerous.sh # ai cũng full quyền — NGUY HIỂM!

✅ 3. chown & chgrp — THAY ĐỔI CHỦ SỞ HỮU & NHÓM

🔹 chown — Change Owner

bash
chown [user]:[group] [file]

💡 Ví dụ:

bash
chown root:root script.sh # Gán owner và group là root
chown kali script.sh # Chỉ đổi owner
chown :staff script.sh # Chỉ đổi group
chown -R kali:kali /tmp/mydir # Đổi owner + group cho cả thư mục con (-R)

👉 Trong pentest:

  • Nếu bạn có quyền sudo chown, có thể chiếm quyền file hệ thống → privilege escalation.
  • Nếu thư mục web có quyền ghi và bạn đổi owner → upload shell dễ dàng.

🔹 chgrp — Change Group (ít dùng hơn — chown có thể thay thế)

bash
chgrp staff file.txt

✅ 4. umask — THIẾT LẬP QUYỀN MẶC ĐỊNH KHI TẠO FILE/THƯ MỤC

Chức năng: Quy định quyền mặc định khi tạo file mới.

umask là giá trị bị trừ đi từ quyền tối đa:

  • File: mặc định 666 (rw-rw-rw-)
  • Thư mục: mặc định 777 (rwxrwxrwx)

💡 Ví dụ:

bash
umask # Xem giá trị hiện tại → thường là 0022
umask 0022 # → file mới sẽ có quyền 666 - 022 = 644 (rw-r--r--)
# → thư mục mới: 777 - 022 = 755 (rwxr-xr-x)

umask 0077 # → file mới: 600 (rw-------), thư mục: 700 (rwx------)

👉 Trong pentest:

  • Nếu bạn tạo file trong /tmp — kiểm tra umask để biết quyền mặc định → có thể bị người khác đọc/ghi không?
  • ✅ 5. find — TÌM KIẾM FILE THEO NHIỀU TIÊU CHÍ (CỰC KỲ QUAN TRỌNG!)

    Chức năng: Tìm file/thư mục theo tên, quyền, owner, kích thước, thời gian...

    🔹 Cú pháp cơ bản:

    bash
    find [vị_trí] [tiêu_chí] [hành_động]

    💡 Các cách dùng HAY GẶP TRONG PENTEST:

    ➤ Tìm file theo tên:

    bash
    find /home -name "*.txt" # Tìm file .txt trong /home
    find / -name "config.php" 2>/dev/null # Tìm config.php — bỏ qua lỗi

    ➤ Tìm file theo quyền:

    bash
    find / -perm -4000 2>/dev/null # Tìm file SUID (quan trọng!)
    find / -perm -2000 2>/dev/null # Tìm file SGID
    find / -writable 2>/dev/null # Tìm file/thư mục ai cũng ghi được

    ➤ Tìm file theo owner:

    bash
    find /home -user kali # Tìm file thuộc về user kali
    find / -group staff 2>/dev/null # Tìm file thuộc nhóm staff

    ➤ Tìm file theo kích thước:

    bash
    find / -size +100M 2>/dev/null # Tìm file > 100MB
    find / -size 0 2>/dev/null # Tìm file rỗng

    ➤ Kết hợp với hành động:

    bash
    find /tmp -name "*.log" -exec rm {} \; # Xóa tất cả file .log trong /tmp
    find /home -name "*.bak" -type f -ls # Liệt kê chi tiết file .bak

    🧠 TÌNH HUỐNG THỰC TẾ


  •  Bạn SSH vào máy nạn nhân với quyền user thường → muốn escalate lên root.

    🔍 Bước 1: Tìm file SUID khả nghi

    bash
    find / -perm -4000 2>/dev/null

    → Kết quả:

    /usr/bin/nmap
    /usr/bin/find

    💥 Bước 2: Khai thác SUID find

    bash
    find . -exec /bin/sh \; -quit

    → Bạn có shell root!

    👉 Đây là lý do vì sao find, chmod, chownbộ 3 quyền lực trong Privilege Escalation.

     

    📝 GHI NHỚ NHANH — IN RA DÁN TRƯỚC MÁY

    ls -l → xem quyền file
    chmod 755 → rwxr-xr-x
    chmod u+s → bật SUID
    find / -perm -4000 2>/dev/null → tìm SUID
    chown root:root file → đổi chủ sở hữu
    umask → xem quyền mặc định khi tạo file

    ⚠️ MẸO AN TOÀN & HIỆU QUẢ

    • Luôn dùng 2>/dev/null khi find trong root → tránh ngập màn hình lỗi.
    • Dùng ls -l như phản xạ — trước khi đọc/ghi/xóa file.
    • Khi upload webshell → nhớ chmod +x nếu cần thực thi.
    • Khi tìm SUID → note lại các binary có thể khai thác: find, nmap, vim, bash, cp, mv...

    GIẢI THÍCH

     

    SUID là gì? (Set User ID)

    📌 KHÁI NIỆM:

    • SUID = Set User ID upon execution
    • Là một bit quyền đặc biệt trên file (thường là file thực thi — binary/script).
    • Khi bật SUID → bất kỳ ai chạy file đó sẽ có quyền của CHỦ SỞ HỮU file, chứ không phải quyền của người chạy.

    💡 VÍ DỤ THỰC TẾ:

    Giả sử file /usr/bin/passwd có quyền:

    bash
    -rwsr-xr-x 1 root root ... /usr/bin/passwd

    → Chữ s ở vị trí x của user → SUID đã bật.

    → Dù bạn là user kali, khi chạy passwd để đổi mật khẩu → hệ thống sẽ cho phép bạn ghi vào file /etc/shadow (chỉ root mới ghi được) → vì passwd đang chạy với quyền root.

     

  • Nếu bạn tìm thấy file SUID có thể khai thác (vd: find, nmap, vim, bash, cp...) → bạn có thể leo thang đặc quyền lên root!
  • 💥 Ví dụ khai thác SUID find:

    bash
    find . -exec /bin/sh \; -quit

    → Dòng lệnh này sẽ mở shell với quyền của chủ sở hữu file find — nếu find có SUID và owner là root → bạn có shell root!

    👉 Lệnh tìm SUID trong hệ thống:

    bash
    find / -perm -4000 2>/dev/null
  •  

  • Trong Linux, có 3 luồng (stream) mặc định:
    • 0 → stdin (nhập vào)
    • 1 → stdout (xuất ra — kết quả lệnh)
    • 2 → stderr (xuất lỗi — error message)
  • 2>/dev/null nghĩa là:

    “Chuyển hướng tất cả THÔNG BÁO LỖI (stderr) vào /dev/null — tức là GIẤU CHÚNG ĐI, không hiển thị ra màn hình.”

    💡 VÍ DỤ:

    bash
    find / -name "*.log" 2>/dev/null

    → Lệnh này tìm tất cả file .log từ thư mục gốc /.

    → Nhưng khi quét /, bạn không có quyền đọc nhiều thư mục → Linux sẽ in ra hàng trăm dòng lỗi kiểu:

    find: ‘/proc/1234’: Permission denied
    find: ‘/sys/kernel’: Permission denied
    ...

    → Dùng 2>/dev/null để giấu hết lỗi đi, chỉ hiện kết quả thật sự → màn hình sạch sẽ, dễ đọc!

    • Khi pentest, bạn thường tìm file trên toàn hệ thống — nhưng chỉ có quyền user thường → rất nhiều lỗi “Permission denied”.
    • Dùng 2>/dev/null giúp bạn tập trung vào kết quả hữu ích, không bị phân tâm bởi lỗi.
  • perm là viết tắt của permissionquyền.
  • Trong lệnh find, -permoption để tìm file theo quyền.
  • 💡 VÍ DỤ:

    bash
    find / -perm -4000 2>/dev/null

    → Tìm tất cả file có quyền 4000 → tức là có bật SUID.

    🔢 Giải thích số 4000:

    • Linux dùng hệ bát phân (octal) để biểu diễn quyền.
    • Bit SUID có giá trị là 4000 (trong hệ octal).
    • Bit SGID (Set Group ID) là 2000.
    • Bit Sticky là 1000.

    -perm -4000: tìm file có bật bit SUID (dấu - nghĩa là “ít nhất phải có quyền này”).

    • /usrthư mục hệ thống chứa các chương trình, thư viện, tài liệu... dùng chung cho tất cả người dùng.
    • KHÔNG PHẢI là “user” — nhiều người nhầm!

    💡 CẤU TRÚC BÊN TRONG /usr:

    /usr/bin
    Các lệnh người dùng thường dùng (ls,find,nmap,python3...)
    /usr/sbin
    Các lệnh quản trị hệ thống (iptables,sshd,useradd...) — thường cần root
    /usr/lib
    Thư viện hỗ trợ chương trình
    /usr/share
    Tài liệu, dữ liệu dùng chung (exploit, wordlist, icons...)
    /usr/local
    Chương trình cài thêm bởi người quản trị

  • Khi bạn tìm SUID, thường thấy các file trong /usr/bin — vì đây là nơi chứa các binary hệ thống.
  • Khi upload exploit, bạn có thể lưu trong /usr/local/tmp hoặc /usr/share nếu có quyền ghi.
  • Khi enum hệ thống, bạn cần kiểm tra /usr/bin, /usr/sbin để tìm version dịch vụ, công cụ có sẵn...



🅰️ SGID (Set Group ID — giá trị 2000)

  • Tương tự SUID, nhưng áp dụng cho nhóm (group).
  • File có SGID → khi chạy, sẽ có quyền của nhóm chủ sở hữu.
  • Thư mục có SGID → file tạo bên trong sẽ thừa kế nhóm của thư mục, không phải nhóm của người tạo.

→ Dùng trong môi trường chia sẻ nhóm.

🅱️ Sticky Bit (giá trị 1000)

  • Thường dùng cho thư mục.
  • Ai cũng có thể tạo file, nhưng chỉ chủ sở hữu file mới được xóa file đó.
  • Ví dụ: thư mục /tmp
bash
drwxrwxrwt 1 root root ... /tmp

→ Chữ t ở cuối → sticky bit đã bật.

→ User A tạo file trong /tmp → User B không thể xóa file đó → tránh phá hoại.

SUID (4000) → chạy file = quyền CHỦ SỞ HỮU → có thể leo root!
SGID (2000) → chạy file = quyền NHÓM chủ sở hữu
Sticky (1000) → thư mục: ai tạo file, chỉ người đó xóa được
2>/dev/null → GIẤU LỖI — giúp màn hình sạch sẽ
perm → permission — quyền file
/usr → chứa chương trình hệ thống (KHÔNG PHẢI “user”)
/usr/bin → lệnh người dùng (find, nmap, python...)
/usr/sbin → lệnh quản trị (sshd, iptables...)

No comments:

Post a Comment