2013-04-23 18 views
7

Tôi có các tham số (đặc biệt là userid và groupid) của tệp được đọc bằng lệnh stat và tôi làm việc trong mạng nơi người dùng và nhóm được chỉ định trên máy chủ ldap.Cách nhận tên nhóm khi tôi có groupid

Tôi đã có tên người dùng ngoài kết quả của lệnh getent passwd userid.

Bây giờ ý tưởng của tôi là lấy tên nhóm bằng getent group groupid, nhưng điều này không hiệu quả.

Bất cứ ai có thể cho tôi biết nơi tôi có sai lầm hoặc cách tôi nhận tên nhóm?

Cảm ơn!

+0

Làm việc cho tôi trên SLES 11.2. – jwilleke

Trả lời

1

Bỏ qua khả năng bạn đang cung cấp ID nhóm sai, này có thể là lỗi trong thiết lập LDAP, hiển thị ở độ phân giải nhóm ngược lại không hoạt động. Điều này được củng cố bởi thực tế là nó hoạt động trên một tập tin "đơn giản" .

Các getent (1) khẳng định:

group  When no key is provided, use setgrent(3), getgrent(3), and 
      endgrent(3) to enumerate the group database. When one or 
      more key arguments are provided, pass each numeric key to 
      getgrgid(3) and each nonnumeric key to getgrnam(3) and 
      display the result. 

Điều này có nghĩa rằng getgrgid (3) không thành công trên thiết lập của bạn.

Để kiểm tra điều này biên dịch chương trình này (getgrgid_test.c) với "làm getgrgid_test":

#include <stdio.h> 
#include <sys/types.h> 
#include <grp.h> 

int 
main(int argc, char **argv) 
{ 
    int gid; 
    struct group *g; 

    if (argc != 2) { 
     fprintf(stderr, "Invalid number of positional arguments\n"); 
     fprintf(stderr, "Usage getgrid_test GID\n"); 
     return 1; 
    } 
    gid = atoi(argv[1]); 
    g = getgrgid(gid); 
    if (g == NULL) { 
     fprintf(stderr, "gid %d not found\n", gid); 
     return 1; 
    } 
    printf("%s\n", g->gr_name); 
    return 0; 
} 

Sau đó chạy nó với gid của bạn như thế này:

getgrgid_test GID 

Nếu nó không sản xuất báo cáo tên nhóm cho quản trị viên hệ thống của bạn.

Nếu không, nếu nó hoạt động, nhưng "nhóm getent GID" thì không, đó là lỗi trong số "getent".

+0

Đây là ** chính xác ** những gì getent hiện – Petesh

+0

Petesh, có, chương trình thử nghiệm là có để bỏ qua (rất nhẹ) khả năng của một lỗi trong getent và giúp búa nhà vấn đề với sysadmins. – spbnick

0

Bạn có thể có một vấn đề cấu hình nơi một trong hai bạn đã không có một dòng như:

group: files ldap 

trong /etc/nsswitch.conf của bạn.

hoặc thông tin nhóm của bạn trên máy chủ ldap ở dạng không có số id nhóm, ví dụ: của loại groupOfNames, groupOfUniqueNames thay vì thuộc loại posixGroup.

Chỉ posixGroup có thuộc tính thích hợp cho phép nó sử dụng như một nhóm hợp lệ trong linux/unix (nghĩa là số id nhóm cần để khớp). Trong trường hợp đó, máy chủ ldap không trả về các nhóm hợp lệ.

Bạn có thể có cấu hình ldap hoạt động hoàn hảo mà không có bất kỳ hoặc tất cả các nhóm từ xa có mặt ở đầu ra từ getent group.

Các vấn đề liên quan