Nếu bạn thường xuyên triển khai web hoặc chuyển WordPress sang VPS bạn sẽ gặp các lỗi phân quyên như:
- Không upload được file hình ảnh.
- Lỗi trắng trang, trang web không thể tải được.
- Lỗi HTML khi Upload.
- Yêu cầu tài khoản FTP khi cài, xóa plugin.
Đây là những lỗi về chown thư mục và chmod file bạn sẽ thường xuyên gặp nếu wordpress không được cấu hình phân quyền đúng. Khi cài wordpress trên VPS, để website hoạt động tốt bạn cần phân quyền 755 cho các folder và 644 cho file.
Nhưng trước khi đi vào sửa lỗi này các bạn cần tìm hiều những kiến thức cơ bản về cách chmod và chown trên linux đã.
1. Hướng dẫn chmod và chown trên linux.
Trong hệ thống mã nguồn mở linux file/folder luôn bị giới hạn bởi quyền và chủ sở hữu, đó là hai yếu tố không thể tách rời.
Quyền (permission) trên linux.
- Quyền đọc
r
được quy định bằng sô4
- Quyền ghi
w
được quy định bằng số2
- Quyền thực thi
x
được quy định bằng số1
Muốn phân quyền cho hệ điều hành linux ta phải dùng chmod.
Đối tượng sở hữu (owner) trên linux
Một folder hay file bất ký trong hệ thống linux sẽ chịu quản lý của 4 đối tượng gọi tắt là ugoa
- Đối tượng
u
hay còn gọi là user tạo ra file/folder. Bạn login bằng user nào thì file/folder tạo ra sẽ thuộc quản lý của user đó. - Đối tượng
g
được gọi là group dùng để nhóm và quản lý nhiều đối tượng u. Vì trên linux đâu phải chỉ có mỗi user root duy nhất đâu. - Đối tượng
o
là các đối tượng khác không thuộc u, g - Đối tượng
a
dùng để chỉ tất tần tật các user tồn tại trên máy chủ, thường ít được dùng.
Để thay đổi chủ sở hưu bạn dùng lệnh chown.
Muốn rõ hơn về Chmod/Chown bạn cùng tìm hiểu ví dụ bên dưới:
Khi dùng ls -la
trên linux bạn sẽ show được các quyền và chủ sở hữu này, nó được thể bằng 10 dấu gạch ngang “-
“.
Các bạn sẽ thấy dấu gạch đầu tiên quy định đây là folder hay file: -
là file, còn d
là folder.
9 dấu gạch ngang còn lại chỉ định quyền, từ trái qua phải mỗi đối tượng u,g,o chịu tác động của ba quyền r,w,x tương ứng. Các quyền này còn được thể hiện dưới dạng tổng các số rwx = 7, rw- = 6, r-x = 5 … Cách viết quyền dưới dạng số còn được gọi là Octal Mode
Như vậy:
- Quyền 755 trên folder tương ứng với
drwxr-xr-x
có nghĩa là user sở hữu folder có full quyền, group sở hữu folder có quyền đọc và thực thi, other cũng có quyền đọc và thực thi. - Quyền 644 trên file tương ứng với
-rw-r--r--
có nghĩa là user sở hữu file này có quyền đọc và ghi, group sở hữu có quyền đọc, other cũng có quyền đọc mà thôi.
Đến đây các bạn đã hiểu cơ bản chmod/chown chúng ta tiếp tục tìm hiểu cấu trúc lệnh.
Lệnh chown
Cú pháp:
chown option user:group file/folder
Khi thay chủ sở hữu cho folder ta có thể dùng thêm option -R
để thay sở hữu cho cả file/folder con.
Lệnh chmod
Cú pháp:
chmod option permission file/folder
Cũng như chown muốn phân quyền cho các file/folder con bạn thêm option -R
.
Trên thực tế có người lại thích dùng chmod với ugoa
Cú pháp:
chmod option owner(+,-)(r,w,x) file/folder
option
: chủ yếu vẫn dùng với -Rowner
: tương ứng với u,g,o,a+,-
: tương ứng với gán quyền hoặc rút quyềnr,w,x
: khỏi nói lại nữa nhé.
Xong phần lý thuyết về chmod & chown trên linux, giờ chúng ta sẽ thực hành cụ thể với website wordpress của chính mình.
2. Phân quyên trên WordPress
Như đã nói để website hoạt động được tốt chúng ta cần đảm bảo hai yếu tố
- Website wordpress phải thuộc quyền sở hữu của webserver mà cụ thể là user:group apache2:apache2, nginx:nginx, www-data, nobody:nobody với những hệ điều hành khác nhau chạy Webserver LAMP hay LEMP chúng ta sẽ có những tài khoản khác nhau, thông thường là 4 tài khoản được liệt kê bên trên.
- Và source wordpress phải được gán quyền 755 cho folder và 644 cho file.
Xác định tài khoản quản trị Webserver.
Trước tiên chúng ta cần phải biết được Webserver đang được quản trị bởi user, group nào, chạy cho mình lệnh:
ps aux | grep nginx
Ví dụ mình cài Webserver nginx trên CentOS các bạn sẽ thấy như hinh bên dưới.
Thế là xác định xong u,g của webserver đều có tên là nginx.
Thay chủ sở hữu
Khi đã xác định được tài khoản nginx đang dùng để vận hành webserver bạn chỉ cần sử dụng lệnh chown cho file/folder để đổi quyền sở hữu như sau.
chown -R nginx:nginx /home/domain/public_html/
Trong đó /home/domain/public_html
là folder chứa source của website.
Phân quyền cho folder
Do source code của website có đến cả chục nghìn folder chúng ta không thể ngồi list đường dẫn riêng để phân quyền cho từng cái được. Trong hướng dẫn này mình sẽ kết hợp việc lọc các folder và chmod trong một lệnh duy nhất cho ngắn gọn.
Xem lệnh bên dưới:
find /home/domain/public_html -type d -print0 | xargs -0 chmod 755
find
: lệnh thực hiện tìm kiếm trong thư mục /home/domain/public_html-type d
: chỉ tìm thư mục và hiển thị đường dẫn tuyệt đối của thư mục, mỗi đường dẫn sẽ nằm trên một dòng.-print0
: loại bỏ ký tự xuống dòng, toàn bộ dường dẫn của thư mục sẽ được xếp thành 1 chuỗi dài nằm gọn trên 1 dòng duy nhất.|
lấy kết quả của lệnh bên trái làm đầu vào cho lệnh bên phải.xargs -0
: thực hiện chèn khoảng trắng vào giữa các đường dẫn.chmod 755
: cuối cùng là thực hiện phân quyền 755 cho chuỗi đường dẫn thư mục nhận được.
Để hiểu rõ hơn cú pháp bạn thử chạy từng đoạn lệnh trên SSH cho mình, ví dụ chạy lệnh find /home/domain/public_html
trước tiếp theo thêm tùy chọn -type d
, cứ thế bạn theo dõi kết quả xuất ra màn hình, nó cũng dễ hiểu thôi.
Phân quyền cho file
Cũng tương tự như với folder muốn chmod cho file chỉ cần thay -type d
bằng -type f
thôi, bạn chạy lệnh sau cho mình.
find /home/domain/public_html -type f -print0 | xargs -0 chmod 644
Tổng kết được rồi, chown và chmod cho wordpress cũng chỉ có vậy thôi bạn vào lại wordpress thử upload file xem sao.
Hẹn các bạn ở bài tới.
a ơi.e làm như a nhưng e k hiểu cái này ạ
Là e root trong file config trỏ /home/datlm.com/public_html
e cx phan quyền thư mục nhưu v.xong n vẫn lỗi ạ
[root@cuonglm ~]# curl -i datlm.com
HTTP/1.1 403 Forbidden
Server: nginx/1.14.0
Date: Fri, 12 Oct 2018 04:22:51 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
403 Forbidden
403 Forbidden
nginx/1.14.0
Bạn chạy lệnh
ls -la
xem permitsion trên public_html đã đúng chưaBạn chạy lệnh
ls -la
xem permition trên public_html đã đúng chưaBạn chạy lệnh
ls -la
xem permission trên public_html đã đúng chưaThanks bác nhiều nhé, lọ mọ cả ngày ko sửa được. Ai dè chó ngáp phải rùi (ngáp trúng bác ^^).