Tại sao đầu ra từ `nhóm` khác với` nhóm người dùng 'nếu tôi hiện đang đăng nhập với tư cách người dùng?


21

Tôi không chắc chắn tại sao sau đây có đầu ra khác nhau. Tôi hiểu rằng các nhóm mà không chỉ định người dùng cung cấp cho tất cả các nhóm mà người dùng hiện đang đăng nhập là thành viên của.

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

Ngoài ra, "các nhóm của quy trình hiện tại" nghĩa là gì (từ trang man của nhóm)? Họ được thiết lập ở đâu?

LƯU Ý: Bản phân phối của tôi là Ubuntu.


@Jake Hãy thử đăng xuất và sau đó quay lại.

1
Tôi đang có vấn đề này ngược lại. 'nhóm myname' cung cấp cho tôi tất cả các nhóm tôi có trong tệp / etc / nhóm, nhưng chỉ thực hiện 'nhóm' chỉ hiển thị cho tôi nhóm chính của tôi. Và, thực sự, các lệnh yêu cầu tôi nằm trong một nhóm bổ sung nhất định không thành công do thiếu quyền. Chắc chắn tôi muốn biết những gì đã gây ra điều này.
Todd Walton

Câu trả lời:


11

Nó có thể là một trong những điều sau đây:

  • Nó có thể là một lỗi (mặc dù tôi nghi ngờ nó)
  • Bạn có thể cần phải đăng xuất và đăng nhập lại

Các nhóm được thiết lập trong /etc/group.


8

Giống như mọi quy trình đều có ID người dùng thực và hiệu quả hiện tại và ID nhóm thực và hiệu quả, nó cũng có một danh sách các nhóm bổ sung . Đây là những con số (không phải tên) tất cả được duy trì bởi kernel. Chúng được đặt theo quy trình đăng nhập (hoặc trình quản lý hiển thị) khi bạn đăng nhập, giống như ID người dùng của bạn. Chúng được kế thừa bởi các quy trình phụ, giống như ID người dùng của bạn.

Khi bạn chạy groupsmà không có đối số, cuối cùng nó sẽ gọi getgroups () để lấy danh sách nhóm bổ sung từ kernel. (Trên hệ thống Linux của tôi, / usr / bin / Groups là tập lệnh shell chạy "id -Gn", từ đó gọi ra getgroups ().)

Khi bạn chạy groups username, lệnh phải "đoán" các nhóm bổ sung sẽ là gì khi người dùng đó đăng nhập. Nó thường thực hiện điều này bằng cách đọc / etc / nhóm hoặc nói chuyện với NIS hoặc nói chuyện với nscd hoặc ... Chà, có một rất nhiều cách nó có thể làm việc

Những gì bạn đang quan sát tương tự như việc phát hiện ra rằng ID người dùng thực hiện tại của bạn và mục nhập của bạn trong / etc / passwd không nhất quán. Điều này có nghĩa là có một chút gì đó kỳ lạ về cấu hình hệ thống của bạn, nhưng thật khó để nói điều gì mà không cần điều tra thêm.


3

(Ghi chú: groupsLệnh, mặc dù vẫn hữu ích, nhưng hầu hết được thay thế bởi lệnh id .)

Một người dùng có một nhóm chính được xác định theo truyền thống trong tệp /etc/passwdtệp mà anh ta đăng nhập, nhưng ngày nay có thể có các nguồn khác. Anh ta cũng có thể là thành viên của các nhóm bổ sung, được gọi là nhóm thứ cấp hoặc nhóm bổ sung, theo truyền thống được chỉ định trong tệp /etc/groups, nhưng ngày nay cũng có thể đến từ hoặc được ngụ ý bởi các nguồn bổ sung (như NIS, LDAP, SAMBA, v.v.).

Các nhóm chính và bổ sung được xác định tại thời điểm đăng nhập và vẫn còn hiện hành . Tuy nhiên, người dùng có thể bất cứ lúc nào thay đổi nhóm chính hoạt động hiện tại của mình bằng cách sử dụng newgrplệnh.

Quá trình đăng nhập đặt các nhóm chính và bổ sung. Để sau này, nó thường gọi các nhóm initc hàm libc , nó biên dịch danh sách dữ liệu nhóm bổ sung và chuyển nó đến hàm setgroups , thiết lập nó trong bối cảnh của quá trình.

Các nguồn thông tin cho initgroupslà:

được Thư viện GNU C và một số ứng dụng khác sử dụng để xác định các nguồn để lấy thông tin dịch vụ tên trong một loạt các danh mục và theo thứ tự nào. Mỗi loại thông tin được xác định bởi một tên cơ sở dữ liệu.

Các groupslệnh show các nhóm như hiện nay áp dụng cho người sử dụng của bạn, và danh sách sẽ bắt đầu với các nhóm chính hiện tại tiếp theo là nhóm bổ sung từ thời điểm đăng nhập. Mọi thay đổi về nguồn dữ liệu từ sau thời gian đăng nhập sẽ không được phản ánh trong danh sách được hiển thị.

Các groups usernamelệnh được hỏi Linux để tính toán các nhóm cho người dùng đó, mà nó sẽ làm sử dụng chủ yếu các tập tin /etc/password/etc/groupssau đó là nguồn bổ sung. Điều này sẽ phản ánh tình hình hiện tại của các tệp hệ thống và có thể không bằng các nhóm hiện tại vẫn còn hiệu lực kể từ thời điểm đăng nhập.

Các groups usernamelệnh có thể đưa ra một kết quả khác nhau khi nó không sử dụng tất cả các nguồn mà quá trình đăng nhập sử dụng để tính toán các nhóm bổ sung của bạn, mà là những gì có vẻ như đã xảy ra trong trường hợp của bạn. Những nguồn này có thể không truy cập được từ thông tin đăng nhập của bạn hoặc có thể không được tư vấn bởi lệnh.

Sử dụng id usernamelệnh có thể cho kết quả tốt hơn, mặc dù cũng không được đảm bảo hoàn thành như quy trình đăng nhập. Các idlệnh gần đây hơn, và được dự định là chính xác hơn, người già groupslệnh.

Mặc dù groupslệnh cho kết quả chính xác và chính xác, bạn đã chứng minh rõ rằng groups usernamelệnh không thể phụ thuộc vào việc thực hiện tương tự.

Nếu không kiểm tra mã nguồn của groupslệnh, tôi đoán rằng việc triển khai groups usernamelệnh trong các phân tích phân phối Linux của bạn /etc/groups, trong trường hợp của bạn không có gì, nhưng không sử dụng /etc/nsswitch.conf, từ đó xuất hiện tất cả các nhóm bổ sung của bạn. Do đó, chỉ được liệt kê tên nhóm chính , jacob.

Để biết thêm thông tin xem:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.