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 ?