Phân quyền File & Directory cho Laravel

Phân quyền File & Directory cho Laravel
Bảo mật hay việc thiết lập quyền trong ứng dụng là hết sức quan trọng. Nếu không được thiết lập quyền cho các file và thư mục một cách chính xác, ứng dụng Laravel của bạn cũng sẽ dễ dàng bị hack và gặp những sự cố trong quá trình hoạt động.

1. Vấn đề

Tìm hiểu thêm về quyền trong linux
  • Lấy 1 ví dụ đơn giản, nếu bạn cấp cho bất kỳ thư nào của mình quyền 777, bạn đang cho phép BẤT CỨ AI đọc, ghi và thực thi bất kỳ tệp nào trong thư mục đó. Điều này có nghĩa là bạn đã cho phép BẤT CỨ AI (bất kỳ tin tặc hoặc kẻ phá hoại nào trên toàn thế giới) được phép tải lên BẤT KỲ file, vi-rút hoặc bất kỳ tệp nào khác và sau đó thực thi tệp đó ...

2. Giải pháp

Về cơ bản có hai cách để thiết lập chủ sở hữu và quyền hạn cho các file và thư mục cho ứng dụng laravel của bạn. Bạn tự cho mình quyền sở hữu hoặc bạn đặt webserver làm chủ sở hữu cho tất cả các tệp.

Webserver với tư cách là chủ sở hữu

‌‌Giả sử rằng nginx (hoặc www-data trên ubuntu) là webserver user của bạn ( máy chủ web ). Mình đang dùng trên ubuntu nên cú pháp:

sudo chown -R www-data:www-data /path/to/your/laravel-app

Nếu sử dụng cách này, webserver ( www-data user và www-data group ) sẽ là chủ sở hữu của mọi file và thư mục trong ứng dụng. Khi đó, bạn sẽ gặp vấn đề nếu upload file lên server thông qua các trình FTP or SSH, và đăng nhập với tư cách của bạn chứ không phải webserver của bạn.

Để giải quyết vấn đề này, hãy thêm bạn vào group của webserver:

sudo usermod -a -G www-data myusername

Sau đó, phương pháp xử lý là cấp quyền cho folder thành 755 và file thành 644:

sudo find /path/to/your/laravel-app -type d -exec chmod 755 {} \;
sudo find /path/to/your/laravel-app -type f -exec chmod 644 {} \;

Cuối cùng, cần cho phép webserver được phép đọc và ghi các thư mục cần thiết:

cd /path/to/your/laravel-app
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

Bạn chính là chủ sở hữu:

Nên sử dụng phương pháp này hơn vì vừa đảm bảo tính bảo mật cao, đồng thời cũng có thể dễ dàng làm việc và chỉnh sửa. Vì vậy, hãy truy cập thư mục gốc laravel của bạn:

cd /var/www/html/laravel

Chuyển quyền sở hữu bằng câu lệnh:

sudo chown -R myusername:www-data.

Sau đó, tôi chỉ cần cấp quyền cho bạn thân và người dùng webserver

sudo find . -type f -exec chmod 664 {} \;
sudo find . -type d -exec chmod 775 {} \;

Tương tự cách trên, sau đó bạn cũng cần cho phép webserver có quyền đọc và ghi dữ liệu vào các thư mục quan trọng:

sudo chgrp -R nginx storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

Kết luận

Nâng cao khả năng bảo mật của ứng dụng laravel chỉ với những bước đơn giản trên. Nó không khó phải không ?

Tài liệu tham khảo