Hướng dẫn dùng chmod perms trong PHP

Trong hệ thống quản lý tập tin của máy tính, mỗi file và directory lại có một permission riêng để quy định ai được phép đọc, ghi, thay đổi và truy cập.

Nội dung chính

  • Permission Modes
  • Example Permission Modes
  • Permission Scheme cho WordPress
  • Shared Hosting với suexec
  • Sử dụng FTP Client
  • Sử dụng Command Line
  • About Chmod
  • Tăng cường bảo mật với File Permissions

Permission Modes

 7       5      5
user   group   world
r+w+x   r+x    r+x
4+2+1   4+0+1  4+0+1   = 755

Permission mode được tính bằng tổng các giá trị của user, file group và everyone.

  • Read 4 - Cho phép đọc file
  • Write 2 - Cho phép ghi/sửa file
  • eXecute 1 - Cho phép đọc/ghi/xoá/sửa/tạo folder
 7       4      4
user   group   world
r+w+x   r       r
4+2+1   4       4     = 744

Example Permission Modes

ModePermissionExplanation
0477 -r--rwxrwx Owner chỉ được đọc, group và others được full quyền
0677 -rw-rwxrwx Owner chỉ được đọc/ghi/sửa, group và others được full quyền
0444 -r--r--r-- Tất cả chỉ được đọc
0666 -rw-rw-rw- Tất cả được đọc/ghi/sửa
0400 -r-------- Owner được đọc, group và others không có quyền gì
0600 -rw------- Owner được đọc/ghi/sửa, group và others không có quyền gì
0470 -r--rwx--- Owner được đọc, group được full quyền còn others không có quyền gì
0407 -r-----rwx Owner được đọc, group không có quyền gì còn others có full quyền
0670 -rw-rwx--- Owner được đọc/ghi/sửa, group có full quyền, còn others không có quyền gì
0607 -rw----rwx Owner được đọc/ghi/sửa, group không có quyền gì, còn others có full quyền

Permission Scheme cho WordPress

Hướng dẫn dưới đây không bao hàm tất cả các trường hợp, mà chỉ cơ bản dành cho server đang chạy với thiết lập tiêu chuẩn (với những shared hosting sử dụng suexec, hãy xem ở bên dưới).

Bình thường thì tất cả các files nên có owner là tài khoản (ftp) của bạn trên web server của bạn, và có thể được ghi bởi account đó. Trên các shared hosts, các files không nên có owner là chính process webserver đó (www, apache hay nobody).

Bất kỳ file nào cần quyền ghi từ WordPress thì nên có owner hay group-owner bởi tài khoản được sử dụng bởi WordPress (có thể khác v ới tài khoản trên server). Ví dụ như bạn có thể có tài khoản để trao đổi file qua FTP với server của bạn, nhưng server thì lại chạy ở một tài khoản riêng rẽ như dhapache hay nobody chả hạn). Nếu WordPress đang chạy với FTP account, thì account đó cầ có quyền ghi (là owner của file, hoặc thuộc group có quyền ghi). Trong trường hợp thứ hai, permissions phải được set tự do hơn default (ví dụ 775 thay cho 755, hay 664 thay cho 644).

Permission cho file và folder của WordPress nên được thiết lập giống nhau cho hầu hết các users, tuỳ thuộc vào cách cài đặt của bạn và umask setting của môi trường hệ thống lúc cài đặt.

NOTE: Nếu một người có kinh nghiệm cài WordPress cho bạn, bạn có thể không cần phải quan tâm đến file permission nữa. Nếu bạn tự cài WordPress, bạn CẦN phải thiết lập file permission. Một số files và thư mục cần phải được set permission nghiêm ngặt hơn, ví dụ như wp-config.php, mặc định là 644 là rất nguy hiểm.

Về cơ bản, tất cả core WordPress files nên chỉ có account của bạn (hoặc httpd account) mới có quyền ghi. Tuy nhiên, nếu bạn khởi tạo mod_rewrite Permalinks hay .htaccess khác, bạn nên đảm bảo rằng WordPress có thể ghi vào /.htaccess của bạn.

Nếu bạn muốn sử dụng built-in theme editor, các files cần có quyền ghi cho group.

Một vài plugins đòi quyền ghi vào `/wp-content/ folder, khi đó chúng sẽ thông báo cho bạn biết trong quá trình cài đặt. Một vài trường hợp đòi permission là 755 để hoạt động.

Shared Hosting với suexec

Những thiết lập bên trên không áp dụng cho hệ thống shared hosting sử dụng suexec rất phổ biến. Ở những hệ thống đó, php process sẽ chạy với quyền owner của các php files, thông qua một thiết lập đơn giản hơn và môi trường bảo mật hơn.

NOTE: suexec không nên sử dụng để thiết lập single-site server, nó chỉ bảo mật hơn với một vài trường hợp của shared hosting.

Permission chuẩn dành cho thiết lập suexec rất dễ hiểu:

  • Tất cả các files có owner là account của chính user, ko phải account sử dụng cho httpd process.
  • Không sử dụng Group ownership, trừ trường hợp cần group đặc biệt để kiểm tra permissions của web-server process.
  • Tất cả các thư mục có quyền 755 hoặc 750.
  • Tất cả các files có quyền 644 hoặc 640. Ngoại trừ wp-config.php nên là 440 hoặc 400.
  • Không thư mục nào có quyền 777, kể cả đường dẫn upload. Khi php process chạy dưới quyền là owner của file, nó có thể ghi file trong thư mục có quyền 755.

Các phương pháp phổ biến sử dụng bởi sysadminds cho thiết lập trên:

  • suPHP
  • mod_ruid2
  • mpm-itk
  • mod_fcgid
  • PHP-FPM

Sử dụng FTP Client

Các chương trình FTP client cho phép bạn thay đổi permissions cho files và directories trên remote host. Chức năng đó thường được ghi là chmod hoặc set permissions trên thanh menu.

Ví dụ như bạn muốn thay đổi permission cho file index.php

Hướng dẫn dùng chmod perms trong PHP

Click chuột phải vào index.php và chọn File Permissions. Popup dưới đây sẽ hiện ra.

Không cần quan tâm đến mấy cái checkboxes làm gì, chỉ việc điền số mong muốn vào ô Numeric value, ví dụ ở đây là 666, rồi click OK, bạn sẽ thấy permission của index.php đã được thay đổi.

Sử dụng Command Line

Nếu bạn sử dụng SSH để truy cập vào server, bạn có thể sử dụng chmod để thay đổi file permissions.

# chmod -v 746 DIR

Nếu việc thay đổi quyền của thư mục vẫn chưa giúp bạn có thể ghi vào đó, bạn có thể thử sử dụng option -R thay cho -v, để thay đổi toàn bộ thư mục và files bên trong folder đó.

About Chmod

chmod là command của unix, viết tắt của change mode.

Nếu bạn sử dụng Permalinks, bạn nên thay đổi permissions cho htaccess để chắc chắn rằng WordPress có thể thực hiện update nó khi bạn tạo new page, redirect v.vv..

  1. Vào directory chính của WordPress
  2. chmod -v 666 .htaccess

Tăng cường bảo mật với File Permissions

Ví dụ dưới đây sử dụng custom compiled php-cgi binary và custom php.ini đặt ở thư mục cgi-bin để chạy php scripts. Để ngăn truy cập trực tiếp từ web browser đến các chương trình biên dịch và php.ini, chúng đc bảo vệ với .htaccess.

Default Permissions (umask 022)

644 -rw-r--r--  /home/user/wp-config.php
644 -rw-r--r--  /home/user/cgi-bin/.htaccess
644 -rw-r--r--  /home/user/cgi-bin/php.ini
755 -rwxr-xr-x  /home/user/cgi-bin/php.cgi
755 -rwxr-xr-x  /home/user/cgi-bin/php5.cgi

Thiết lập quyền bảo mật hơn

600 -rw-------  /home/user/wp-config.php
604 -rw----r--  /home/user/cgi-bin/.htaccess
600 -rw-------  /home/user/cgi-bin/php.ini
711 -rwx--x--x  /home/user/cgi-bin/php.cgi
100 ---x------  /home/user/cgi-bin/php5.cgi

.htaccess (644->604)

Sự thay đổi xoá đi quyền đọc của group owner.

php.ini (644->600)

Trước đây tất cả groups và users có quyền vào server sẽ có thể access vào php.ini. Tuy nhiên, vì php.ini chỉ cần sử dụng bởi php.cgi, nên chỉ cần php.cgi process có quyền truy cập là đủ. php.cgi chạy với cùng user làm owner của file, thế nên chỉ cần user đó có quyền access vào file.

php.cgi (755->711)

Đây là compiled php-cgi binary được sử dụng thay thế cho mod_php.

php5.cgi (755->100) Vì có mỗi user account làm owner của process chạy php cgi, nên chúng ta disabled toàn bộ quyền, ngoài trừ quyền execute.


Source: Changing File Permissions