Những người dùng này được tạo ra khi nào?
Trong trường hợp của những cái mà bạn đề cập, chúng được tạo khi cài đặt hệ thống. Những tài khoản người dùng này là thông thường, một số có niên đại hàng thập kỷ. Họ cũng được tiêu chuẩn hóa. Cơ sở tiêu chuẩn Linux chia chúng thành:
- các yêu cầu người dùng chuẩn chiếm,
root
, bin
, và daemon
; và
- các tùy chọn người dùng chuẩn chiếm
adm
, lp
, sync
, shutdown
, halt
, mail
, news
, uucp
, operator
, man
, vànobody
Tài khoản người dùng khác được đề cập ở đây - pulse
, avahi
, colord
, và Debian-exim
(để chọn một từ tập tin mật khẩu py4on của) - đưa chúng ta đến câu hỏi tiếp theo của bạn.
Làm thế nào những điều này liên quan đến các chương trình mới đang được cài đặt?
Các tài khoản người dùng không chuẩn được tạo và hủy bởi "tập lệnh bảo trì" cho các gói khác nhau, vì các gói đó được cài đặt và thanh lọc. Tài khoản người dùng sẽ được tạo bởi postinst
tập lệnh được gọi là duy trì của gói , chạy getent
để xem tài khoản người dùng đã tồn tại chưa và useradd
liệu nó có tồn tại không. Về lý thuyết, nó sẽ bị xóa bởi cái gọi là postrm
tập lệnh duy trì, đang chạy userdel
.
Trong thực tế, tài khoản người dùng cho các gói không bị xóa. Fedora wiki (qv) giải thích rằng điều này sẽ đầy khó khăn. Xem lỗi Debian # 646175 để biết ví dụ về hoạt động hợp lý này, trong đó quyết định đơn giản là không xóa rabbitmq
tài khoản người dùng khi gói bị xóa, để giải quyết vấn đề với một dmon tiếp tục chạy dưới tài khoản của tài khoản đó.
Làm thế nào những chương trình này bắt đầu với các UID khác nhau?
Trong Unix và Linux, một quy trình chạy dưới sự hỗ trợ của siêu người dùng có thể thay đổi tài khoản người dùng của nó thành một thứ khác và tiếp tục chạy cùng một chương trình, nhưng không được phép ngược lại. (Người ta phải sử dụng cơ chế set-UID.)
Hệ thống quản lý dmon chạy như siêu người dùng. Dữ liệu cấu hình của nó xác định rằng các dons cụ thể chạy dưới sự hỗ trợ của các tài khoản người dùng cụ thể:
- Với Hệ thống 5
rc
, tập lệnh /etc/init.d
sử dụng một công cụ trợ giúp như start-stop-daemon
và --chuid
tùy chọn của nó .
- Với một người quản lý dịch vụ daemontools gia đình, các
run
cuộc gọi kịch bản setuidgid
, s6-setuidgid
, chpst
, hoặc runuid
với tên tài khoản người dùng. Có những ví dụ về điều này trong /unix//a/179798/5132 đã thiết lập nagios
tài khoản người dùng.
- Với sự khởi đầu có một khổ
setuid
thơ trong một tệp công việc, chỉ định tài khoản người dùng. Điều này không đặc biệt tốt, và đôi khi người ta muốn những gì được mô tả tại /superuser//a/723333/38062 .
- Với systemd có một
User=
cài đặt trong tệp đơn vị dịch vụ, chỉ định tài khoản người dùng.
Khi hệ thống quản lý dmon sinh ra một quy trình để trở thành dmon, các cơ chế này sẽ bỏ các đặc quyền siêu người dùng để quá trình dmon tiếp tục chạy dưới sự bảo trợ của tài khoản người dùng không được ưu tiên.
Có một lời giải thích khá dài tại sao việc quản lý tốt được thực hiện theo cách này. Nhưng bạn đã không hỏi tại sao; chỉ khi nào, như thế nào, và từ đâu. Một précis rất ngắn, do đó:
Các hệ điều hành Unix và Linux cách ly các quy trình chạy dưới sự hỗ trợ của các tài khoản người dùng khác nhau. Trong lịch sử, nếu một người có thể chiếm lấy một con cá mập chạy như siêu người dùng, người ta có thể làm bất cứ điều gì mình thích. Mặt khác, một tài khoản chạy dưới tài khoản không có đặc quyền, mặt khác, chỉ có thể truy cập các tệp, thư mục, thiết bị và các quy trình mà tài khoản không có đặc quyền đó có thể. Do đó, một hệ thống các chương trình dmon không đáng tin cậy đều chạy dưới sự hỗ trợ của các tài khoản người dùng khác nhau và không thể truy cập / kiểm soát các tệp / thư mục / quy trình / thiết bị (nội bộ, đáng tin cậy) của nhau, do đó khó bị bẻ khóa hơn.
đọc thêm