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

  • Định Nghĩa.
  • Cú pháp.
    • Cú pháp:
    • Trong đó.
    • Giá trị trả về.
  • Chú ý.
  • Hàm liên quan
  • Thông tin thêm.

Nội dung chính

  • Định Nghĩa.
  • Trong đó.
  • Giá trị trả về.
  • Hàm liên quan
  • Thông tin thêm.
  • I. Phân quyền là như thế nào?
  • II. Thay đổi phân quyền cho file/folder
  • III. Thay chủ sở hữu file/folder
  • Lời kết

Định Nghĩa.

Hàm chmod() sẽ thay đổi quyền đối với các đối tượng người dùng của file được truyền vào.
Hàm tương thích trên PHP4, PHP5, PHP7.

Cú pháp.

Cú pháp:

chmod ( string $filename , int $mode ) : bool

Trong đó.

  • $filename là đường dẫn đến file.
  • $mode là quyền mới đối với các đối tượng người dùng.
    – Lưu ý rằng mode không tự động được coi là một octal value, vì vậy để đảm bảo hoạt động dự kiến, bạn cần phải có chế độ tiền tố với số không (0). Các chuỗi như “g + w” sẽ không hoạt động đúng.

    – Tham số chế độ bao gồm ba thành phần số octal chỉ định các hạn chế truy cập cho chủ sở hữu, nhóm người dùng mà chủ sở hữu đang ở và cho mọi người khác theo thứ tự này. Một thành phần có thể được tính bằng cách thêm các quyền cần thiết cho cơ sở người dùng file đó. Số 1 có nghĩa là bạn cấp quyền thực thi, số 2 có nghĩa là bạn tạo tệp có thể ghi, số 4 có nghĩa là bạn làm cho tệp có thể đọc được. Thêm các số này để xác định các quyền cần thiết. Bạn cũng có thể đọc thêm về các chế độ trên các hệ thống Unix với ‘man 1 chmod’ và ‘man 2 chmod’.

Giá trị trả về.

  • Trả về TRUE khi thành công hoặc FALSE khi thất bại.

Chú ý.

  • Người dùng hiện tại là người dùng mà PHP chạy. Nó có thể không giống với người dùng bạn sử dụng để truy cập shell hoặc FTP thông thường. Chế độ chỉ có thể được thay đổi bởi người dùng sở hữu tệp trên hầu hết các hệ thống.
  • Chức năng này sẽ không hoạt động trên các tệp từ xa vì tệp cần kiểm tra phải được truy cập thông qua hệ thống tệp của máy chủ.
  • Khi chế độ an toàn được bật, PHP sẽ kiểm tra xem các tệp hoặc thư mục bạn sắp vận hành có cùng UID (chủ sở hữu) như tập lệnh đang được thực thi hay không. Ngoài ra, bạn không thể đặt SUID, SGID và bit dính.

Hàm liên quan

  • chown() – Thay đổi chủ sở hữu tập tin
  • chgrp() – Thay đổi nhóm người dùng với tập tin
  • fileperms() – Nhận quyền truy cập của tệp.
  • stat() – Cung cấp thông tin về một tập tin

Thông tin thêm.

  • Khi sử dụng dấu ngoặc kép xung quanh tham số thứ hai vd chmod (tập tin, “0644”);
    PHP sẽ không quan tâm tới điều đó nhưng sẽ thực hiện chuyển đổi ngầm thành int trước khi chạy chmod. Thật không may, chuyển đổi ngầm định không tính đến chuỗi bát phân để bạn kết thúc với phiên bản số nguyên 644, là 1204 octal.
  • Một cách để thay đổi mode recursive  trong $ pathname thành $ filemode.

Các bạn có thể xem chi tiết hơn trên php.net.

Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm chmod() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé.
Cảm ơn các bạn đã ghé thăm codetutam.com

Đây là một khái niệm cực kỳ quan trọng mà mình sẽ cần giải thích cho bạn hiểu về thế giới Linux, bởi vì server của bạn có bảo mật hay không phụ thuộc một phần vào kỹ năng phân quyền.

Trong Linux, để phân quyền lại các tập tin và thư mục, chúng ta sẽ sử dụng lệnh chmod. Trong bài viết này, mình sẽ đề cập tới việc hướng dẫn sử dụng lệnh chmod cũng như cơ cấu phân quyền trong Linux.

I. Phân quyền là như thế nào?

Trong Linux, khi nói đến phân quyền là chúng ta sẽ nghĩ ngay đến 3 quyền hạn cơ bản của một user/group nào đó trên một file/folder nào đó bao gồm:

  • r (read) – quyền đọc file/folder
  • w (write) – quyền ghi/sửa nội dung file/folder
  • x (execute) – quyền thực thi (truy cập) thư mục. Đối với thư mục thì bạn cần phải có quyền execute thì mới dùng lệnh cd để truy cập vào được

Ok, bây giờ bạn hãy thử tự làm các công việc sau (ở các bài trước mình hướng dẫn cả rồi):

  • Đăng nhập vào SSH với user là root
  • Tạo một user mới với tên bất kỳ, sau đó thiết lập mật khẩu cho nó
  • Thoát ra khỏi SSH, đăng nhập lại với user bạn vừa tạo
  • Ngay tại thư mục của user, hãy tạo nhanh một file trống rỗng với tên bất kỳ bằng lệnh touch tên-file
  • Ngay tại thư mục của user, hãy tạo một folder với tên bất kỳ
  • Gõ lệnh ls -l để xem các file vừa tạo kèm theo thông tin chi tiết của nó

Kết quả sẽ trả về như sau:

[bash]

touch testfile
mkdir testfolder
ls -l
total 4
-rw-rw-r– 1 van van 0 Sep 21 19:47 testfile
drwxrwxr-x 2 van van 4096 Sep 21 19:47 testfolder

[/bash]

Bạn hãy để ý giúp mình 2 dòng này nhé:

-rw-rw-r– 1 van van 0 Sep 21 19:47 testfile
drwxrwxr-x 2 van van 4096 Sep 21 19:47 testfolder

Mình xin giải thích bằng mô hình bên dưới như sau:

-rw-rw-r– 1 van van 0 Sep 21 19:47 testfile
drwxrwxr-x 2 van van 4096 Sep 21 19:47 testfolder
__________________________________________^– Ngày tháng tạo ra file và tên file
^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | \— Dung lượng của file/folder
| | | | | | \——– Tên group sở hữu
| | | | | \————— Tên user sở hữu
| | | | \———————- Số này khó giải thích, bỏ qua vì không quan trọng
| | | |
| \–\–\—————————– Các chỉ số phân quyền
\————————————- Loại file (chữ d nghĩa là thư mục)

Vấn đề quan trọng ở đây là chúng ta sẽ phân tích các chỉ số phân quyền trong cái đống bùi nhùi trên.

Đầu tiên là đoạn rw-rw-r--, ở đoạn này bạn có thể thấy nó có 1 số dấu gạch ngang (-). điều đó có nghĩa là chưa bật đủ quyền dành cho nó, mỗi quyền sẽ được mô tả bằng một dấu -. Cụ thể:

  • rw-: Đối tượng thứ nhất chính là quyền dành cho user sở hữu nó.
  • rw-: Đối tượng thứ hai chính là quyền dành cho CÁC user thuộc group đang sở hữu nó.
  • r--: Đối tượng thứ ba chính là quyền dành cho MỌI user không thuộc quyền sở hữu và không thuộc group sở hữu.

Vậy cái đoạn rw-rw-r-- nghĩa là “User van được phép đọc và sửa file, các user thuộc group van có thể đọc và sửa file, còn những người còn lại là chỉ được đọc file“.

Nhưng đó chỉ là 1 trong kiểu biểu diễn quyền của tập tin, còn 1 kiểu biểu diễn nữa đó là ở dạng số. Cụ thể:

  • Quyền r được biểu diễn bằng số 4.
  • Quyền w được biểu diễn bằng số 2.
  • Quyền x được biểu diễn bằng số 1.

Nếu một đối tượng mà có đủ 3 quyền này thì bạn cứ lấy cả 3 cộng lại là  4 + 2 + 1 = 7, vậy quyền số 7 nghĩa là nó được phép đọc, sửa và thực thi file. Ví dụ như đoạn rw-rw-r-- thì mình có một phép tính như sau:


r w – r w – r – –
4 2 0 4 2 0 4 0 0
| | | | | | | | |
\ 6 / \ 6 / \ 4 /

Vậy kết luận rằng, đoạn rw-rw-r-- sẽ được biểu diễn bằng số là 664. Đây là quyền mặc định dành cho file.

Tương tự, đoạn rwxrwxr-x nghĩa là ở dòng thứ 2 sẽ được biểu diễn bằng số là 775. Đây là quyền mặc định dành cho folder.

Bây giờ bạn có thể thử bằng cách tạo một user mới khác nữa, sau đó đăng nhập bằng user này vào thư mục của user mà bạn đã tạo ở trên để xem nó báo lỗi không đủ quyền khi truy cập. Kế tiếp thực hành cách đưa user mới vào group của user sở hữu rồi vào thử lại. Đây chính là lúc bạn ôn lại các kiến thức bài trước.

II. Thay đổi phân quyền cho file/folder

Bạn chắc chắn đã hiểu được hệ thống phân quyền trên Linux chưa? Nếu rồi, thì bạn sẽ cần hiểu luôn cách đổi phân quyền cho các file và folder là như thế nào.

Để phân lại quyền cho cả file/folder trên Linux thì bạn sẽ sử dụng lệnh tên là chmod. Cấu trúc sử dụng lệnh này là:

[bash]chmod [tùy chọn] [biểu diễn phân quyền] [tên file hoặc thư mục][/bash]

Trong đó, mục [tùy chọn] là không bắt buộc, bao gồm các tùy chọn sau:

  • -v: hiển thị báo cáo sau khi chạy lệnh. Nếu bạn chmod nhiều file/folder cùng lúc thì cứ mỗi lần nó đổi quyền của 1 file/folder xong là sẽ hiện báo cáo.
  • -c: giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
  • -f: Hiểu ngắn gọn là kiểu “kệ mẹ nó”, nếu có lỗi xảy ra nó cũng không thông báo.
  • -R: nếu bạn CHMOD một folder thì kèm theo -R nghĩa là áp dụng luôn vào các file/folder nằm bên trong nó.
  • --help: hiển thị thông báo trợ giúp.

Ở phần [biểu diễn phân quyền], ban có thể biểu diễn bằng 3 kiểu:

  • kiểu ký tự: giống như ở trên (rw-rw-x–).
  • kiểu ugo: kiểu này sẽ phân quyền cho từng đối tượng phân quyền.
  • kiểu số: cũng giống như ở trên (644).

Ví dụ:

  • chmod 775 testfile
  • chmod 400 testfolder
  • chmod u+s testfolder (cho phép mọi thành viên không thuộc người sở hữu và không thuộc group sở hữu có thể execute folder)

Một vài ví dụ thêm về kiểu ugo:

  • o+rws: cho phép user sở hữu có full quyền
  • g+rw: cho phép group sở hữu có quyền đọc và ghi
  • u+w: cho phép các user còn lại có quyền đọc
  • a+rws: cho phép toàn bộ user có full quyền (777)

III. Thay chủ sở hữu file/folder

Mặc định các file và folder sẽ được sở hữu bởi user/group tạo ra nó. Chẳng hạn như mình dùng user là thach2 để tạo một folder thì các user khác ngoại trừ user root sẽ không thể tạo file hoặc thay đổi nội dung của file trong thư mục này, vì nó thuộc sở hữu của thach2.

Do vậy, để đổi chủ sở hữu một thư mục cho user/group nào đó thì bạn sẽ sử dụng lệnh chown như sau:

[bash]chown -R [tên user]:[tên group] [file/folder][/bash]

Ví dụ:

[bash]chown -R thach2:thach2 /home/thach2[/bash]

Lời kết

Bài này có vẻ chữ hơi nhiều nhưng điều đó không có nghĩa là quá khó để hiểu, bù lại nó rất dễ hiểu nếu bạn chịu khó đọc kỹ và làm theo. Ở bài sau, mình sẽ hướng dẫn bạn từng bước cách cài đặt một LAMP Webserver (Linux + Apache + MySQL + PHP) để có thể chạy được một website WordPress cơ bản trên VPS.

Thạch Phạm

Bé Thạch 18 tuổi, hiện công tác tại AZDIGI với vị trí giữ xe và viết thuê tại ThachPham.Com. Sở thích nghiên cứu về website, DevOps, SysAdmin và xăm mình nữa. Phương châm sống của bé là "No Pain, No Gain".

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.