Tất nhiên, câu đố cơ bản ở đây là kiểm tra quyền hệ thống tập tin dựa trên sự kết hợp giữa (UID hiệu quả và) GID hiệu quả và GID bổ sung. Vì vậy, từ quan điểm kiểm tra quyền truy cập tệp, GID hiệu quả tương đương với GID bổ sung, dẫn đến câu hỏi của OP. (Truyền qua: nếu chúng ta đang nói về Linux, thì thực tế đó là UID / GID của hệ thống tệp được sử dụng trong kiểm tra quyền hệ thống tệp, thay vì UID và GID hiệu quả, nhưng các ID trước hầu như luôn có cùng giá trị như ID sau. )
Vì vậy, phải có một số trường hợp trong đó các GID thực / hiệu quả / được lưu không tương đương với các GID bổ sung. (Tôi nhóm các GID thực / hiệu quả / được lưu lại với nhau, bởi vì các quy tắc cấp phép * gid () thông thường nói rằng một quy trình không có đặc quyền có thể thay đổi bất kỳ một trong các GID đó thành cùng một giá trị như một trong hai quy tắc khác.)
Và thực sự, có một vài trường hợp như vậy. truy cập (2) thực hiện kiểm tra dựa trên ID người dùng và ID nhóm thực của quy trình . Nếu người dùng không có đặc quyền có thể thay đổi ID nhóm thực thành giống như một trong những GID bổ sung không phải là GID được lưu hoặc có hiệu lực, thì hành vi truy cập (2) có thể bị thao túng.
Có những trường hợp khác như vậy. Xem ví dụ về trang man mkdir (2) của Linux . Tùy thuộc vào việc bit chế độ set-GID có được đặt trên thư mục mẹ hay không, một tệp mới được tạo trong thư mục sẽ sở hữu nhóm của nó từ GID hiệu quả của quá trình tạo. Một lần nữa, nếu một quy trình không có đặc quyền có thể thay đổi GID hiệu quả của nó giống như một trong các GID bổ sung của nó, thì nó có thể thao túng quyền sở hữu nhóm của các tệp mới theo những cách không mong muốn. Nhận xét tương tự áp dụng cho mknod (2) và System V IPC gọi semget (2), shmget (2) và Spyget (2).
Ngoài ra còn có một số trường hợp dành riêng cho Linux trong đó các GID thực tế / hiệu quả / được lưu không tương đương với các GID bổ sung. Xem process_vm_readv (2) và prlimit (2), ví dụ.
/usr/bin/env
với sự cho phép của setgid).