Nhà thông minh
Geek Playground
  • Welcome to my HomeLAB
    • Script: Thiết lập toàn bộ dịch vụ smarthome cơ bản
    • Script: Thiết lập các dịch vụ để làm media server
    • Script: Thiết lập dịch vụ theo dõi và tự động hoá
    • Docker Compose Template - Manual Setup
  • Kiến thức nền tảng - Cần biết trước khi bắt đầu
    • Bảng thống kê chi phí đầu tư thiết bị phục vụ SmartHome
    • Các phương án chơi nhà thông minh tính tới hiện tại
  • Cài đặt (Install)
    • Cài đặt HomeBridge - Đưa thiết bị lên HomeKit
    • Một HUB kết nối được toàn bộ thiết bị Zigbee của tất cả các hãng
    • Apple HomeKit - Cho thiết bị không hỗ trợ
      • Scrypted - Đưa camera lên Apple HomeKit
      • Đưa samsungTV lên Apple Home
      • Mở cửa cuốn bằng eWeLink (SonOFF) 4CH Pro
    • DIY thiết bị hỗ trợ Apple HomeKit
      • Cảm biến hiện diện bằng bất cứ thiết bị bluetooth nào (đồng hồ, xe hơi...)
      • Cảm biến hiện diện chia theo khu vực
      • Biến quạt thường thành quạt thông minh full chức năng
      • Hướng dẫn làm bộ điều khiển máy lạnh thông minh hoạt động trên Apple HomeKit và có tính năng phản hồ
  • Những dự án thú vị với HomeLAB
    • Hệ thống giải trí, xem phim tại nhà miễn phí
      • Tự động tìm kiếm phim ảnh và subtitle có trên internet
      • Tự động tải về phim yêu thích
      • Cài đặt Plex Media Server
    • Thiết lập hệ thống dashboard (theo dõi hiệu năng, tiền điện, cảm biến)
      • Hiển thị dữ liệu lên Grafana với Prometheus và InfluxDB
      • Tự động thu thập dữ liệu từ cảm biến thông qua NodeRED
      • Theo dõi sử dụng mạng
        • Sử dụng Window/MacOS/Linux
      • Theo dõi tiền điện
        • Thực tế sử dụng điện của một số thiết bị vận hành 24/7
    • Chia sẻ file trong mạng LAN, backup dữ liệu
      • Chia sẻ file trong mạng LAN - Hệ thống NAS nhà làm
      • Backup toàn bộ hệ điều hành trên Cloud, phòng trường hợp lỗi thẻ nhớ
    • Làm đẹp - trang trí không gian làm việc, giải trí
      • Cấu hình Ambilight LED cho TV, gia tăng trải nghiệm xem
      • Cài server chạy Ambilight
  • Pro Tips
    • Các lỗi thường gặp và cách xử lý
      • Sub directory not working
      • Adguard Home: Sửa lỗi fail to bind on port 53
    • Frequently used command
      • Thao tác với Caddy Proxy
      • Thao tác với ổ cứng
      • Thao tác với Docker
    • Pin thủ nhào vào đây
      • Biến sạc thường thành sạc nhanh PD
      • Tự làm bộ sạc nhiều cổng hỗ trợ PD siêu rẻ, có thể gắn lên xe máy & oto để sạc nhanh
      • Tận dụng pin cũ của điện thoại
    • Use memory card as RAM
    • Xử lý phân quyền trên linux
      • Tự động phân quyền trên linux
Powered by GitBook
On this page
  • Cách giải quyết: bindfs
  • Kiểm tra

Was this helpful?

Edit on GitHub
  1. Pro Tips
  2. Xử lý phân quyền trên linux

Tự động phân quyền trên linux

PreviousXử lý phân quyền trên linux

Last updated 7 months ago

Was this helpful?

Vấn đề nảy sinh khi Linux chỉ trao quyền sở hữu file hoặc thư mục cho một user duy nhất: www-data (user của Apache) hoặc username (user của developer).

Ví dụ: Mình đăng nhập vào hệ thống bằng username thuanbui, và tạo một file mới tên “NEW.php” trong thư mục /var/www/website.com/public. File mới này sẽ tự động được phân quyền sở hữu cho user thuanbui.

  • Mình có thể chỉnh sửa code thoải mái trên file này nhưng Web Server sẽ không thể chỉnh sửa trực tiếp file này được do không có quyền.

  • Nếu mình chuyển quyền quản lý file NEW.php cho user www-data, vấn đề bị đảo ngược: Web Server có thể chỉnh sửa file được nhưng user thuanbui không thể chỉnh sửa được file khi truy cập qua SFTP.

Bạn có thể tuỳ chỉnh phân quyền riêng cho mỗi file và thư mục nhất định tuỳ vào mục đích. Tuy nhiên, về lâu dài, sẽ rất khó quản lý việc phân quyền và rất dễ gây lỗi với trang web/ ứng dụng web của bạn.

Cách giải quyết: bindfs

Sau nhiều ngày tìm kiếm giải phát trên Google và mò thử nhiều cách khác nhau, cuối cùng mình đã tìm được phương pháp tốt nhất để giải quyết vấn đề: sử dụng bindfs. Bài viết gốc các bạn có thể xem ở đây:

Khu dùng bindfs, thư mục gốc của ứng dụng web được giả lập làm một thư mục con trong thư mục home của bạn (/home/username). Do đó, bạn có toàn quyền chỉnh sửa, tạo mới và xoá file, trong khi thực sự nó vẫn thuộc quyền sở hữu của web server (www-data).

Giải thích e rằng hơi khó hiểu. Đi vào chi tiết luôn cho trực quan nhé. Không cần hiểu sâu lắm, chỉ cần giải quyết được vấn đề là được rồi.

Cài đặt

Cách này chỉ áp dụng cho Ubuntu/Debian.

Trong hướng dẫn dưới đây, username của mình sử dụng là thuanbui, thư mục web nằm ở /var/www/thuanbui.me

# Cài Đặt bindfs (chỉ làm 1 lần duy nhất)
thuanbui@opodis $ sudo apt-get update  
thuanbui@opodis $ sudo apt-get -y install bindfs

# Tạo thư mục giả lập
thuanbui@opodis $ sudo mkdir -p /home/leolion/www/thuanbui.me  
thuanbui@opodis $ sudo chown -Rf thuanbui:thuanbui /home/thuanbui/www/thuanbui.me  Code language: Bash (bash)

Sau đó, chỉnh sửa file nano /etc/fstab và thêm dòng này vào cuối file. Nhớ đổi lại đường dẫn và tên username thuanbui sang thông tin của bạn

bindfs#/var/www/thuanbui.me /home/thuanbui/www/thuanbui.me fuse force-user=thuanbui,force-group=thuanbui,create-for-user=www-data,create-for-group=www-data,create-with-perms=0770,chgrp-ignore,chown-ignore,chmod-ignore 0 0  

Lưu file và làm tiếp bước giả lập hệ thống file

thuanbui@opodis $ mount /home/thuanbui/www/thuanbui.meCode language: CSS (css)

Kiểm tra

Kiểm tra xem hệ thống có hoạt động như mong muốn không.

Tạo file mới trong thư mục /home

thuanbui@opodis:~/www/thuanbui.me$ su thuanbui
Password: 
thuanbui@opodis:~/www/thuanbui.me$ cd /home/thuanbui/www/thuanbui.me
thuanbui@opodis:~/www/thuanbui.me$ touch hello.txtCode language: JavaScript (javascript)

Kiểm tra phân quyền file mới tạo trong thư mục giả lập /home/thuanbui

thuanbui@opodis:~/www/thuanbui.me$ ls -l hello.txt
-rwxrwx--- 1 thuanbui thuanbui 0 Jan  5 05:42 hello.txtCode language: YAML (yaml)

Kiểm tra phân quyền file mới tạo trong thư mục của ứng dụng web /var/www/thuanbui.me

thuanbui@opodis:~/www/thuanbui.me$ cd /var/www/thuanbui.me
thuanbui@opodis:/var/www$ ls -l hello.txt
-rwxrwx--- 1 www-data www-data 0 Jan  5 05:42 hello.txt
thuanbui@opodis:/var/www$ Code language: JavaScript (javascript)

File hello.txt được tạo bằng tài khoản thuanbui, nhưng nó đã được tự động phân quyền sở hữu cho www-data .

Hoạt động ngon lành rồi!

Từ giờ bạn có thể thoải mái tạo và chỉnh sửa file mới trong thư mục giả lập, tất cả sẽ được tự động phân quyền sở hữu cho www-data, user của web server. Không sợ bị dính lỗi phân quyền khi truy cập ứng dụng web nữa.

Netgusto