Khi xây dựng hệ thống cache ảnh / thumbnail (ví dụ blog.cache_media, blog.cache_thumb), một lỗi rất hay gặp là:

❌ PHP không ghi được file
❌ Lỗi Permission denied
❌ Cron chạy được nhưng web thì không (hoặc ngược lại)

Nguyên nhân gần như luôn nằm ở quyền thư mục.

Bài viết này hướng dẫn copy toàn bộ quyền từ một folder cache đã hoạt động ổn định sang folder cache mới đúng cách – an toàn – chuẩn production.


1. Vì sao cần copy quyền thay vì set lại thủ công?

Giả sử bạn đã có folder cache đang chạy tốt:

/var/www/blog.cache_media

Folder này đã:

  • Cho phép www-data ghi file
  • Cron, PHP-FPM, CLI đều hoạt động ổn

Bạn tạo thêm folder mới để cache thumbnail:

/var/www/blog.cache_thumb

👉 Thay vì đoán quyền (chmod 777 bừa bãi), copy y nguyên quyền từ folder cũ là cách chuẩn và an toàn nhất.


2. Hai khái niệm bắt buộc phải hiểu

🔹 chown – Change Owner

  • Quy định ai là chủ sở hữu file / thư mục
  • Ví dụ: www-data:www-data

🔹 chmod – Change Mode

  • Quy định được làm gì: đọc / ghi / truy cập (rwx)
  • Ví dụ: 775

📌 Muốn ghi file → cần đúng owner + đúng permission


3. Copy quyền từ folder cũ sang folder mới (chuẩn nhất)

Trường hợp chuẩn: folder mới đã tồn tại

chown -R --reference=/var/www/blog.cache_media /var/www/blog.cache_thumb
chmod -R --reference=/var/www/blog.cache_media /var/www/blog.cache_thumb

👉 Lệnh trên sẽ:

  • Copy owner + group
  • Copy permission
  • Áp dụng cho toàn bộ file & thư mục con

4. Có cần dùng -R (đệ quy) không?

✅ NÊN dùng -R nếu:

  • Folder đã có file / subfolder
  • Cache sinh động (ảnh, thumb, resize)
  • Dùng chung cron + PHP-FPM

❌ Không bắt buộc nếu:

  • Folder hoàn toàn trống
  • Chưa có file nào được tạo

👉 Nhưng trong thực tế cache luôn sinh file, nên dùng -R là an toàn nhất.


5. Lệnh gộp – dùng nhanh trong thực tế

chown -R --reference=/var/www/blog.cache_media /var/www/blog.cache_thumb \
&& chmod -R --reference=/var/www/blog.cache_media /var/www/blog.cache_thumb

📌 Rất phù hợp khi:

  • Deploy server
  • Clone project
  • Tạo cache folder mới

6. Kiểm tra lại quyền sau khi copy

ls -ld /var/www/blog.cache_media
ls -ld /var/www/blog.cache_thumb

Ví dụ output đúng:

drwxrwxr-x  www-data www-data  blog.cache_media
drwxrwxr-x  www-data www-data  blog.cache_thumb

👉 Nếu giống nhau → OK tuyệt đối.


7. Thiết lập thêm để cache chạy ổn định lâu dài (khuyến nghị)

🔥 Set setgid để file mới kế thừa group

chmod g+s /var/www/blog.cache_thumb

Lợi ích:

  • File tạo bởi cron / PHP luôn cùng group
  • Tránh lỗi quyền về sau

8. Sai lầm thường gặp (nên tránh)

❌ Chỉ chmod 777 nhưng owner vẫn là root
❌ Chỉ chownpermission không cho ghi
❌ Chỉnh quyền folder cha nhưng quên file con
❌ Không dùng -R với cache đã có dữ liệu


9. Kết luận

  • chown → quyết định ai sở hữu
  • chmod → quyết định được làm gì
  • Copy quyền bằng --referencechuẩn, nhanh, không sai
  • Cache ảnh / thumb → nên dùng đệ quy (-R)

👉 Đây là cách an toàn nhất để tạo thêm cache folder mà không phát sinh lỗi Permission trong production.