user2
cần phải đăng xuất và đăng nhập lại. Quyền của nhóm hoạt động theo cách này:
- Khi bạn đăng nhập, các quy trình của bạn sẽ có thành viên nhóm trong nhóm chính của bạn được đề cập
/etc/passwd
, cộng với tất cả các nhóm mà người dùng của bạn được đề cập đến /etc/group
. (Chính xác hơn, các pw_gid
lĩnh vực trong getpw(your_uid)
, cộng với tất cả các nhóm trong đó người sử dụng của bạn là một thành viên rõ ràng . Ngoài /etc/passwd
và /etc/group
, thông tin có thể đến từ các loại cơ sở dữ liệu người dùng như NIS hoặc LDAP.) Các nhóm chính trở thành của quá trình ID nhóm hiệu quả và các nhóm khác trở thành ID nhóm bổ sung của nó .
- Khi một quy trình thực hiện một thao tác yêu cầu thành viên trong một nhóm nhất định, chẳng hạn như truy cập tệp , nhóm đó phải là ID nhóm hiệu quả hoặc một trong các ID nhóm bổ sung của quy trình.
Như bạn có thể thấy, thay đổi thành viên nhóm của người dùng chỉ có hiệu lực khi người dùng đăng nhập. Đối với các quy trình đang chạy, đã quá muộn. Vì vậy, người dùng cần phải đăng xuất và đăng nhập lại. Nếu quá nhiều rắc rối, người dùng có thể đăng nhập vào một phiên riêng (ví dụ: trên một bảng điều khiển khác hoặc với ssh localhost
).
Trong giới hạn, một quy trình chỉ có thể mất đặc quyền (ID người dùng, ID nhóm, khả năng). Hạt nhân bắt đầu init
quá trình (quá trình đầu tiên sau khi khởi động) chạy với quyền root và mọi quá trình cuối cùng được truyền xuống từ quá trình đó¹. Các login
quá trình (hay sshd
, hoặc một phần của quản lý máy tính để bàn của bạn mà các bản ghi bạn trong) vẫn chạy như root. Một phần công việc của nó là bỏ các đặc quyền gốc và chuyển sang người dùng và các nhóm thích hợp.
Có một ngoại lệ duy nhất: thực hiện chương trình setuid hoặc setgid . Chương trình đó nhận được các quyền bổ sung: nó có thể chọn hành động theo các tập hợp con khác nhau của tư cách thành viên của quy trình mẹ cộng với tư cách thành viên bổ sung trong người dùng hoặc nhóm sở hữu tập tin thực thi setxid. Cụ thể, một chương trình root setuid có quyền root, do đó có thể làm mọi thứ²; đây là cách các chương trình thích su
và sudo
có thể thực hiện công việc của họ.
¹
thỉnh thoảng có những thủ tục đó không bắt nguồn từ init (initrd, udev) nhưng nguyên tắc là như nhau: bắt đầu như là người chủ và đặc quyền mất theo thời gian.
²
Chặn các khung bảo mật đa cấp như SELinux.