Lệnh setfacl trong Linux: Mở rộng phân quyền chi tiết cho người dùng

Khi quản lý một hệ thống Linux, việc phân quyền truy cập file và thư mục là một trong những nhiệm vụ nền tảng và quan trọng nhất để đảm bảo an ninh và trật tự. Hẳn bạn đã rất quen thuộc với các lệnh như chmod, chown, hay chgrp. Đây là những công cụ phân quyền truyền thống, mạnh mẽ nhưng đôi khi lại thiếu đi sự linh hoạt cần thiết. Chẳng hạn, làm thế nào để cấp quyền cho một người dùng cụ thể mà không cần thêm họ vào một nhóm chung? Hoặc làm sao để gán quyền cho nhiều nhóm khác nhau trên cùng một tài nguyên? Những hạn chế này của cơ chế phân quyền cổ điển chính là lý do lệnh setfacl và Access Control Lists (ACL) ra đời, mang đến một giải pháp quản lý chi tiết và mạnh mẽ hơn rất nhiều.

Giới thiệu về lệnh setfacl trong Linux

Hệ thống phân quyền truyền thống trong Linux hoạt động dựa trên ba thực thể chính: người dùng sở hữu (owner), nhóm sở hữu (group), và những người khác (others). Mỗi thực thể này có thể được gán ba quyền cơ bản: đọc (read), ghi (write), và thực thi (execute). Mô hình này đơn giản, dễ hiểu và hoạt động hiệu quả trong nhiều trường hợp. Tuy nhiên, nó nhanh chóng bộc lộ những điểm yếu khi bạn đối mặt với các kịch bản phức tạp trong môi trường đa người dùng hoặc các dự án đòi hỏi sự cộng tác chi tiết. Ví dụ, bạn không thể dễ dàng cấp quyền ghi cho một người dùng A và chỉ cấp quyền đọc cho người dùng B trên cùng một file, nếu cả hai không thuộc cùng một nhóm.

Hình minh họa

Đây chính là lúc lệnh setfacl (Set File Access Control List) tỏa sáng. Nó không thay thế hệ thống phân quyền truyền thống mà mở rộng nó, cho phép bạn tạo ra các quy tắc truy cập cực kỳ chi tiết cho từng người dùng hoặc từng nhóm cụ thể trên bất kỳ file hay thư mục nào. Bạn có thể coi nó như một danh sách khách mời đặc biệt, vượt ra ngoài các quy tắc “chủ nhà”, “người trong gia đình” và “khách lạ” thông thường. Trong bài viết này, chúng ta sẽ cùng nhau khám phá sâu hơn về setfacl, từ việc so sánh nó với phương pháp truyền thống, hướng dẫn chi tiết cách sử dụng, các ứng dụng thực tế cho đến cách khắc phục những sự cố thường gặp. Hãy cùng tìm hiểu công cụ quyền năng này để quản lý hệ thống Linux của bạn một cách chuyên nghiệp và an toàn hơn.

Phân quyền truyền thống và phân quyền bằng setfacl

Để thực sự hiểu được sức mạnh của setfacl, điều quan trọng là phải nhận ra những giới hạn cố hữu của cơ chế phân quyền truyền thống trong Linux. Việc nắm vững sự khác biệt này sẽ giúp bạn biết khi nào nên sử dụng công cụ nào để đạt được hiệu quả quản lý tốt nhất.

Giới hạn của phân quyền truyền thống trong Linux

Cơ chế phân quyền cơ bản của Linux, thường được gọi là mô hình UGO (User, Group, Others), đã là nền tảng của hệ điều hành này từ những ngày đầu. Theo mô hình này, mỗi file và thư mục đều gắn liền với một người dùng sở hữu (owner/user) và một nhóm sở hữu (group). Mọi tài khoản còn lại trên hệ thống được xếp vào loại “những người khác” (others). Mỗi lớp trong ba lớp này có thể được gán một tập hợp các quyền: đọc (r), ghi (w), và thực thi (x). Cơ chế này hoạt động rất tốt cho các hệ thống đơn giản.

Tuy nhiên, sự đơn giản này lại chính là nguồn gốc của những hạn chế. Vấn đề lớn nhất phát sinh khi bạn cần một cấu trúc phân quyền phức tạp hơn. Hãy tưởng tượng bạn có một thư mục dự án /data/project_X. Thư mục này thuộc sở hữu của người dùng `project_lead` và nhóm `developers`. Nhóm `developers` có toàn quyền đọc/ghi/thực thi. Bây giờ, bạn cần cấp quyền chỉ đọc cho một người dùng từ phòng kế toán tên là `accountant_A` để họ kiểm tra dữ liệu, và cấp quyền đọc/ghi cho một chuyên gia tư vấn bên ngoài tên `consultant_B`. Với phương pháp truyền thống, bạn sẽ làm thế nào? Bạn không thể thêm cả hai người vào nhóm `developers` vì điều đó sẽ cấp cho họ quá nhiều quyền. Tạo một nhóm mới cho mỗi trường hợp đặc biệt? Cách này nhanh chóng trở nên cồng kềnh và khó quản lý.

Ưu điểm và vai trò của lệnh setfacl

Đây chính là nơi Access Control Lists (ACL) và lệnh setfacl phát huy vai trò. ACL là một lớp phân quyền bổ sung, cho phép bạn định nghĩa các quyền truy cập chi tiết cho những người dùng hoặc nhóm không phải là chủ sở hữu hoặc nhóm sở hữu chính của file/thư mục. Về cơ bản, nó cho phép bạn tạo ra các “ngoại lệ” hoặc các “quy tắc đặc biệt” một cách linh hoạt. Lệnh setfacl chính là công cụ để bạn quản lý danh sách ACL này.

Hình minh họa

Hãy quay lại ví dụ trên. Thay vì phải vật lộn với các nhóm, bạn có thể sử dụng setfacl để giải quyết vấn đề một cách gọn gàng:

  • Cấp quyền chỉ đọc cho `accountant_A`: setfacl -m u:accountant_A:r-x /data/project_X
  • Cấp quyền đọc/ghi cho `consultant_B`: setfacl -m u:consultant_B:rwx /data/project_X

Như bạn thấy, setfacl cho phép bạn chỉ định quyền trực tiếp cho từng người dùng (ký hiệu bằng `u:`) hoặc từng nhóm (ký hiệu bằng `g:`) một cách độc lập. Khi một file hoặc thư mục có sử dụng ACL, bạn sẽ thấy một dấu cộng `+` ở cuối chuỗi quyền khi dùng lệnh ls -l, đây là một dấu hiệu cho thấy có các quy tắc phân quyền mở rộng đang được áp dụng. So sánh trực tiếp, phân quyền truyền thống giống như việc bạn chỉ có ba chiếc chìa khóa: một cho chủ nhà, một cho cả gia đình, và một quy tắc chung cho khách. Trong khi đó, ACL giống như một hệ thống khóa điện tử nơi bạn có thể cấp thẻ truy cập với các quyền hạn khác nhau cho từng người cụ thể, và thu hồi chúng bất cứ lúc nào mà không ảnh hưởng đến người khác.

Cách sử dụng lệnh setfacl để cấp quyền truy cập chi tiết

Hiểu được lý thuyết là một chuyện, nhưng việc áp dụng vào thực tế mới thực sự quan trọng. Lệnh setfacl có cú pháp khá trực quan và dễ nhớ. Chúng ta sẽ cùng nhau đi qua các cú pháp cơ bản và xem xét các ví dụ cụ thể để bạn có thể tự tin sử dụng công cụ này.

Các cú pháp cơ bản của lệnh setfacl

Về cơ bản, bạn sẽ làm việc với một vài tùy chọn chính của setfacl. Nắm vững những tùy chọn này là bạn đã có thể xử lý hầu hết các tác vụ phân quyền nâng cao.

  • Thêm hoặc sửa đổi quyền (-m hoặc --modify): Đây là tùy chọn bạn sẽ sử dụng thường xuyên nhất. Nó cho phép bạn thêm một quy tắc ACL mới hoặc chỉnh sửa một quy tắc đã tồn tại. Cú pháp chung là: setfacl -m [quy_tắc] [tên_file/thư_mục]. Trong đó, `quy_tắc` có dạng `u:tên_người_dùng:quyền` hoặc `g:tên_nhóm:quyền`. Ví dụ: setfacl -m u:bduc:rw file.txt sẽ cấp quyền đọc (r) và ghi (w) cho người dùng `bduc` trên file Linux `file.txt`.

  • Xóa một quyền cụ thể (-x hoặc --remove): Khi bạn muốn gỡ bỏ một quy tắc ACL đã thiết lập, tùy chọn -x là thứ bạn cần. Cú pháp của nó tương tự như -m, nhưng bạn không cần chỉ định phần quyền. Ví dụ: setfacl -x u:bduc file.txt sẽ xóa mọi quy tắc ACL liên quan đến người dùng `bduc` trên file Linux `file.txt`.

  • Xóa toàn bộ quyền ACL (-b hoặc --remove-all): Tùy chọn này sẽ xóa sạch tất cả các mục ACL mở rộng, đưa file hoặc thư mục trở về trạng thái phân quyền truyền thống UGO. Đây là một cách nhanh chóng để “reset” lại quyền. Cú pháp: setfacl -b [tên_file/thư_mục].

  • Xem quyền chi tiết (sử dụng lệnh getfacl): Mặc dù không phải là một tùy chọn của setfacl, lệnh getfacl là người bạn đồng hành không thể thiếu. Nó cho phép bạn xem chi tiết danh sách ACL đang được áp dụng trên một file hoặc thư mục, bao gồm cả quyền truyền thống và quyền mở rộng. Cú pháp đơn giản: getfacl [tên_file/thư_mục]. Tham khảo thêm về Bash là gì để sử dụng dòng lệnh hiệu quả trên Linux.

Ví dụ thực tế gán, xóa, xem quyền với setfacl

Bây giờ, hãy cùng áp dụng các cú pháp trên vào một kịch bản thực tế. Giả sử chúng ta có một thư mục tên là /home/shared_project và một file bên trong nó là report.docx.

1. Cấp quyền đọc và ghi cho một người dùng cụ thể:

Giả sử bạn muốn cấp cho người dùng manhduc quyền đọc và ghi trên file report.docx để anh ấy có thể chỉnh sửa báo cáo. Bạn sẽ chạy lệnh:

setfacl -m u:manhduc:rw- /home/shared_project/report.docx

Hình minh họa

2. Cấp quyền đọc và thực thi cho một nhóm:

Tiếp theo, bạn muốn cả nhóm quality_assurance có thể đọc và truy cập vào thư mục shared_project để kiểm tra. Lệnh sẽ là:

setfacl -m g:quality_assurance:r-x /home/shared_project

3. Kiểm tra lại phân quyền bằng getfacl:

Để chắc chắn rằng các quyền đã được áp dụng đúng, hãy sử dụng getfacl trên cả file và thư mục:

getfacl /home/shared_project/report.docx

Kết quả trả về sẽ trông giống như thế này, hiển thị rõ ràng các mục ACL bạn vừa thêm:

# file: /home/shared_project/report.docx
# owner: project_owner
# group: developers
user::rw-
user:manhduc:rw-    # Quy tắc ACL bạn vừa thêm
group::r--
mask::rw-
other::r--

4. Xóa quyền của nhóm trên thư mục:

Sau khi nhóm quality_assurance hoàn thành công việc, bạn muốn thu hồi quyền của họ để đảm bảo an toàn. Bạn sẽ sử dụng tùy chọn -x:

setfacl -x g:quality_assurance /home/shared_project

Bằng cách thực hành với các ví dụ đơn giản này, bạn sẽ nhanh chóng làm quen và có thể áp dụng setfacl vào các tình huống phức tạp hơn trong công việc quản trị hệ thống hàng ngày của mình.

Ứng dụng và lợi ích của lệnh setfacl trong quản lý hệ thống Linux

Việc nắm vững cách sử dụng setfacl không chỉ là một kỹ năng kỹ thuật mà còn mở ra nhiều khả năng tối ưu hóa quy trình làm việc và tăng cường bảo mật hệ thống. Công cụ này đặc biệt hữu ích trong các môi trường máy chủ hiện đại, nơi sự cộng tác và kiểm soát truy cập chi tiết là yếu tố sống còn.

Hình minh họa

Một trong những ứng dụng rõ ràng nhất của setfacl là trong việc quản lý phân quyền trong môi trường đa người dùng. Hãy xem xét một máy chủ web hosting chia sẻ, nơi nhiều khách hàng cùng chạy website trên một máy chủ vật lý. Sử dụng phân quyền truyền thống sẽ rất khó để cô lập dữ liệu giữa các người dùng mà vẫn cho phép máy chủ web (ví dụ: người dùng www-data của Apache) truy cập vào các file cần thiết. Với ACL, bạn có thể dễ dàng cấp quyền cho người dùng `www-data` đọc các thư mục web của từng khách hàng mà không cần phải thay đổi quyền sở hữu hay thêm người dùng này vào các nhóm không liên quan, giúp duy trì sự tách biệt và an toàn.

Lợi ích tiếp theo là tăng cường bảo mật và kiểm soát truy cập chi tiết. Thay vì cấp quyền rộng rãi cho cả một nhóm, bạn có thể cấp quyền cụ thể cho từng cá nhân dựa trên nguyên tắc “đặc quyền tối thiểu” (Principle of Least Privilege). Điều này có nghĩa là mỗi người dùng chỉ có chính xác những quyền mà họ cần để thực hiện công việc của mình, không hơn không kém. Ví dụ, một nhân viên thực tập có thể chỉ được cấp quyền đọc (read-only) vào một thư mục dự án, trong khi các thành viên chính của nhóm có đầy đủ quyền đọc/ghi. Điều này giảm thiểu đáng kể rủi ro do vô tình xóa hoặc sửa đổi dữ liệu quan trọng.

Trong môi trường làm việc nhóm và các dự án chung, setfacl là một công cụ vô giá. Nó cho phép các quản trị viên hệ thống thiết lập các cấu trúc thư mục phức tạp, nơi nhiều nhóm khác nhau (ví dụ: developers, testers, designers) có thể cùng làm việc trên một cây thư mục chung nhưng với các mức độ truy cập khác nhau. Bạn có thể cấp quyền ghi cho nhóm developers vào thư mục mã nguồn, trong khi nhóm testers chỉ có quyền thực thi các file đã được biên dịch. Sự linh hoạt này thúc đẩy sự hợp tác hiệu quả mà không làm ảnh hưởng đến tính toàn vẹn của dự án.

Cuối cùng, việc sử dụng ACL giúp giảm thiểu lỗi phân quyền so với các phương pháp thủ công truyền thống. Việc quản lý hàng chục nhóm khác nhau cho các trường hợp đặc biệt rất dễ gây nhầm lẫn và sai sót. Với `setfacl`, bạn có một cái nhìn rõ ràng, tập trung vào từng file hoặc thư mục, và có thể kiểm tra mọi thứ một cách minh bạch bằng lệnh getfacl. Điều này làm cho việc kiểm tra (audit) và gỡ lỗi các vấn đề về quyền truy cập trở nên đơn giản và nhanh chóng hơn rất nhiều, tiết kiệm thời gian và công sức cho người quản trị.

Các vấn đề thường gặp và cách khắc phục

Mặc dù setfacl là một công cụ mạnh mẽ, nhưng trong quá trình sử dụng, bạn có thể gặp phải một số tình huống mà nó không hoạt động như mong đợi. Hiểu rõ nguyên nhân và cách khắc phục các vấn đề phổ biến này sẽ giúp bạn tránh được những rắc rối không đáng có.

Không thể gán quyền ACL do hệ thống file không hỗ trợ

Đây là vấn đề phổ biến nhất, đặc biệt là trên các hệ thống cũ hoặc các bản phân phối Linux được cấu hình tối giản. Access Control Lists không phải là một tính năng được bật mặc định trên tất cả các loại hệ thống file (filesystem). Các filesystem hiện đại như ext4, XFS, và Btrfs đều hỗ trợ ACL, nhưng nó cần được kích hoạt tại thời điểm mount.

  • Cách kiểm tra filesystem có hỗ trợ ACL hay không: Bạn có thể kiểm tra các tùy chọn mount mặc định của một phân vùng. Ví dụ, để kiểm tra phân vùng /dev/sda1, bạn có thể dùng lệnh:
    sudo tune2fs -l /dev/sda1 | grep "Default mount options"
    Nếu trong kết quả trả về có chuỗi acl, điều đó có nghĩa là tính năng này đã được bật.

  • Giải pháp: Nếu ACL chưa được bật, bạn cần phải mount lại phân vùng với tùy chọn acl. Cách tốt nhất là chỉnh sửa file /etc/fstab để thay đổi này được áp dụng vĩnh viễn mỗi khi hệ thống khởi động. Bạn chỉ cần tìm đến dòng tương ứng với phân vùng của mình và thêm acl vào cột tùy chọn (cột thứ tư).
    Ví dụ, một dòng trong /etc/fstab có thể thay đổi từ:
    UUID=... / ext4 errors=remount-ro 0 1
    thành:
    UUID=... / ext4 defaults,acl 0 1
    Sau khi lưu file, bạn có thể mount lại phân vùng ngay lập tức bằng lệnh: sudo mount -o remount / (thay / bằng điểm mount của bạn).

Hình minh họa

Quyền ACL không hoạt động như mong đợi

Đôi khi, bạn đã gán quyền ACL thành công, nhưng người dùng vẫn không thể truy cập file như bạn đã định. Vấn đề này thường xuất phát từ sự tương tác phức tạp giữa quyền ACL và quyền truyền thống, đặc biệt là khái niệm “mask”.

  • Kiểm tra ưu tiên phân quyền và “mask”: Khi một người dùng truy cập vào một file có ACL, hệ thống sẽ kiểm tra quyền của họ theo thứ tự ưu tiên. Quan trọng nhất, quyền truy cập cuối cùng (effective rights) của một người dùng hoặc nhóm trong ACL sẽ là phép giao giữa quyền bạn đã gán và một giá trị gọi là “mask”. Mask định nghĩa mức quyền tối đa có thể được cấp thông qua ACL. Nếu bạn gán quyền đọc/ghi/thực thi (rwx) cho người dùng `bduc`, nhưng mask chỉ là đọc/thực thi (r-x), thì quyền thực tế của `bduc` chỉ là r-x. Bạn có thể thấy cả quyền được gán và quyền hiệu quả khi chạy lệnh getfacl.

  • Cách reset quyền ACL và xử lý xung đột: Nếu bạn cảm thấy các quy tắc ACL trở nên quá phức tạp và gây xung đột, cách tốt nhất là xóa bỏ toàn bộ chúng và làm lại từ đầu. Sử dụng lệnh setfacl -b [tên_file] để xóa tất cả các mục ACL mở rộng. Sau đó, bạn có thể cẩn thận thiết lập lại từng quyền một, và luôn dùng getfacl sau mỗi bước để kiểm tra kết quả. Nếu mask đang giới hạn quyền của bạn, bạn có thể thay đổi nó bằng lệnh setfacl -m m:rwx [tên_file] để cho phép tất cả các quyền.

Hình minh họa

Hiểu rõ hai vấn đề này sẽ giúp bạn xử lý đến 90% các sự cố liên quan đến setfacl, đảm bảo hệ thống phân quyền của bạn luôn hoạt động chính xác và đáng tin cậy.

Các lưu ý và mẹo khi sử dụng lệnh setfacl

Để sử dụng setfacl một cách hiệu quả và an toàn nhất, việc tuân thủ một vài nguyên tắc và mẹo nhỏ có thể tạo ra sự khác biệt lớn. Những lưu ý này không chỉ giúp bạn tránh được các lỗi tiềm ẩn mà còn giúp hệ thống của bạn được tổ chức tốt hơn và dễ dàng quản lý hơn trong dài hạn.

Hình minh họa

Luôn kiểm tra quyền hiện tại trước khi thay đổi. Đây là quy tắc vàng. Trước khi thực hiện bất kỳ thay đổi nào với setfacl, hãy luôn chạy lệnh getfacl [tên_file/thư_mục] trước. Việc này giúp bạn có một cái nhìn tổng quan về cấu trúc quyền hiện tại, tránh việc ghi đè hoặc tạo ra các quy tắc mâu thuẫn một cách vô tình. Nó giống như việc xem bản đồ trước khi bắt đầu một hành trình vậy.

Ưu tiên tạo bản sao lưu trước khi chỉnh sửa ACL trên các dữ liệu quan trọng. Mặc dù setfacl là một công cụ an toàn, nhưng khi bạn thực hiện các thay đổi đệ quy (sử dụng tùy chọn -R) trên một cây thư mục lớn và phức tạp, sai lầm vẫn có thể xảy ra. Một lệnh gõ nhầm có thể khóa quyền truy cập của chính bạn hoặc mở ra một lỗ hổng bảo mật. Do đó, với các thư mục hệ thống hoặc dữ liệu kinh doanh quan trọng, việc tạo một bản sao lưu (backup) của danh sách ACL là một ý tưởng không tồi. Bạn có thể làm điều này bằng cách: getfacl -R /path/to/directory > acl_backup.txt. Sau này, nếu có sự cố, bạn có thể khôi phục lại bằng lệnh: setfacl --restore=acl_backup.txt.

Tránh phân quyền quá rộng gây rủi ro bảo mật. Sức mạnh của ACL nằm ở sự chi tiết, vì vậy hãy tận dụng nó. Thay vì cấp quyền rwx một cách bừa bãi, hãy tự hỏi người dùng hoặc nhóm đó thực sự cần quyền gì. Họ chỉ cần đọc file? Hãy cấp r--. Họ cần duyệt thư mục? Hãy cấp r-x. Tuân thủ nguyên tắc đặc quyền tối thiểu (Principle of Least Privilege) sẽ giúp giảm thiểu bề mặt tấn công và hạn chế thiệt hại nếu một tài khoản người dùng bị xâm phạm.

Hình minh họa

Sử dụng getfacl thường xuyên để theo dõi và kiểm tra quyền. Đừng chỉ thiết lập ACL rồi quên nó đi. Trong một hệ thống năng động, yêu cầu truy cập có thể thay đổi. Hãy tạo thói quen định kỳ kiểm tra lại các quyền trên các thư mục quan trọng. Việc này giúp bạn phát hiện sớm các quyền không còn cần thiết hoặc các cấu hình sai sót có thể phát sinh theo thời gian. getfacl là công cụ kiểm tra của bạn, hãy sử dụng nó thường xuyên để đảm bảo mọi thứ vẫn đang hoạt động đúng như ý muốn.

Bằng cách ghi nhớ những lưu ý này, bạn không chỉ sử dụng setfacl như một người quản trị hệ thống mà còn như một kiến trúc sư bảo mật, xây dựng một hệ thống phân quyền vững chắc, linh hoạt và an toàn.

Kết luận

Qua những phân tích chi tiết, chúng ta có thể thấy rằng lệnh setfacl không chỉ là một công cụ dòng lệnh đơn thuần, mà là một sự nâng cấp quan trọng cho cơ chế quản lý phân quyền trong Linux. Nó giải quyết triệt để những hạn chế của mô hình UGO truyền thống, mang lại sự linh hoạt và khả năng kiểm soát chi tiết mà các hệ thống hiện đại yêu cầu. Từ việc quản lý các máy chủ web đa người dùng, bảo vệ dữ liệu trong các dự án cộng tác, cho đến việc siết chặt an ninh hệ thống, vai trò của setfacl và Access Control Lists là không thể phủ nhận.

Hình minh họa

Việc làm chủ setfacl có thể ban đầu hơi phức tạp, nhưng những lợi ích mà nó mang lại hoàn toàn xứng đáng với nỗ lực bỏ ra. Nó giúp người quản trị hệ thống xây dựng các cấu trúc quyền logic, minh bạch và dễ bảo trì hơn, giảm thiểu rủi ro sai sót và tăng cường đáng kể lớp phòng thủ bảo mật. Thay vì phải tạo ra vô số nhóm người dùng chỉ để giải quyết các trường hợp đặc biệt, bạn có thể áp dụng các quy tắc trực tiếp, gọn gàng và hiệu quả.

Vì vậy, tôi khuyến khích bạn hãy bắt đầu thực hành và áp dụng setfacl vào công việc quản lý hệ thống của mình, bắt đầu từ một môi trường thử nghiệm an toàn. Hãy thử tạo ra các kịch bản phân quyền phức tạp và giải quyết chúng bằng ACL. Càng sử dụng nhiều, bạn sẽ càng nhận ra sức mạnh và sự tiện lợi của nó. Để tối ưu hóa bảo mật và quản trị hệ thống một cách chuyên nghiệp, việc tìm hiểu sâu hơn về ACL, các tùy chọn nâng cao và các công cụ quản trị liên quan là một bước đi cần thiết trên hành trình trở thành một chuyên gia Linux.

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ