Thực tiễn không phải là tạo một người dùng và nhóm cho mỗi ứng dụng, mà là cho mỗi dịch vụ. Đó là, các chương trình được thực thi bởi người dùng cục bộ không cần phải được cài đặt như một người dùng khác ngoài root. Đó là trình nền , các chương trình đang chạy trong nền và thực thi các yêu cầu đến qua mạng hoặc các phương tiện liên lạc khác, sẽ chạy như một người dùng chuyên dụng.
Trình nền chạy như một người dùng chuyên dụng để nếu nó hoạt động sai (do lỗi, có thể do kẻ tấn công gây ra) thì thiệt hại có thể bị hạn chế: chỉ các tệp dữ liệu của trình nền bị ảnh hưởng (trừ khi kẻ tấn công tìm được lỗ hổng cục bộ , có thể xảy ra). Ví dụ, daemon cơ sở dữ liệu mysqld
chạy như một người dùng và nhóm chuyên dụng mysql:mysql
và các tệp dữ liệu của cơ sở dữ liệu ( /var/lib/mysql/*
) thuộc về mysql:mysql
.
Lưu ý rằng daemon thực thi và các tệp cấu hình và dữ liệu tĩnh khác được sử dụng nhưng không được sửa đổi bởi daemon không được thuộc về người dùng chuyên dụng; chúng nên được sở hữu bởi root:root
, giống như hầu hết các tệp chương trình và cấu hình. Các mysqld
quá trình không có ghi đè kinh doanh /usr/sbin/mysqld
hay /etc/mysql/my.cnf
, vì vậy những tập tin này phải không thuộc về những mysql
người sử dụng hoặc có khả năng ghi bởi mysql
người dùng hoặc mysql
nhóm. Nếu một số tệp chỉ có thể đọc được bởi trình nền và quản trị viên, thì chúng phải được sở hữu bởi người dùng gốc và nhóm chuyên dụng và có chế độ 0640 ( rw-r-----
).
Một loại đặc biệt của các tệp thực thi không thể thuộc sở hữu của root:root
các chương trình là các chương trình được người dùng gọi ra nhưng cần phải chạy với các đặc quyền bổ sung. Các tệp thực thi này phải là root setuid nếu chúng cần chạy (ít nhất là một phần) với quyền root; thì tệp thực thi phải có chế độ 4755 ( rwsr-xr-x
). Nếu chương trình cần với các đặc quyền bổ sung nhưng không phải là root, thì chương trình nên được tạo ra setgid, để các đặc quyền bổ sung đi qua một nhóm chứ không phải thông qua người dùng. Việc thực thi sau đó có chế độ 2755 ( rwxr-sr-x
). Những lý do có hai mặt:
- Không thể cho phép thực thi chính nó, để nếu người dùng quản lý khai thác lỗ hổng, họ có thể sửa đổi các tệp dữ liệu được sử dụng bởi chương trình nhưng không tiêm ngựa trojan vào tệp thực thi để tấn công người dùng khác đang chạy chương trình .
- Tệp dữ liệu của tệp thực thi thuộc về nhóm. Một chương trình setuid sẽ phải chuyển đổi giữa người dùng thực (người dùng đã gọi chương trình) để tương tác với người dùng và với người dùng hiệu quả (người dùng mà chương trình đang chạy) để truy cập các tệp dữ liệu riêng tư của nó (lý do cho nó để có thêm đặc quyền). Một chương trình setgid có thể phân tách thêm dữ liệu theo người dùng chỉ có thể truy cập được vào nhóm (ví dụ: bằng cách lưu trữ các tệp do người dùng sở hữu trong một thư mục chỉ có thể truy cập vào root và nhóm của chương trình).