2013-04-23 3 views
7

У меня есть параметры (особенно userid и groupid) файла, который читается командой stat, и я работаю в сети, где пользователи и группы указаны на сервере ldap.Как получить имя группы, когда у меня есть groupid

У меня есть имя пользователя из результата команды getent passwd userid.

Теперь моя идея состояла в том, чтобы получить имя группы с getent group groupid, но это не сработает.

Может ли кто-нибудь сказать мне, где у меня есть моя ошибка или как я получаю имя группы?

Спасибо!

+0

Работы для меня на SLES 11.2. – jwilleke

ответ

1

Оставляя в стороне, что вы поставляете неправильный идентификатор группы, этот может быть ошибкой в ​​настройке LDAP, которая проявляется в обратном групповом разрешении, а не . Это подкрепляется тем фактом, что это работает на простой «файловой» настройке .

getent (1) гласит:

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. 

Это может означать, что getgrgid (3) терпит неудачу на вашей установке.

Чтобы проверить это скомпилировать эту программу (getgrgid_test.c) с "сделать 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; 
} 

Затем запустите его с GID, как это:

getgrgid_test GID 

Если не производит отчет о имени группы для ваших системных администраторов.

В противном случае, если это действительно работает, но «getent group GID» этого не делает, это ошибка в «getent».

+0

Это ** точно **, что getent – Petesh

+0

Petesh, да, тестовая программа там, чтобы обойти (очень небольшую) возможность ошибки в getent и помочь забить проблему дома с помощью системных администраторов. – spbnick

0

Вы, вероятно, вопрос о конфигурации, где либо вы не получили такую ​​строку:

group: files ldap 

в вашем /etc/nsswitch.conf.

или информация о вашей группе на сервере ldap находится в форме, которая не имеет номеров идентификаторов групп, например. типа groupOfNames, groupOfUniqueNames вместо того, чтобы быть типа posixGroup.

Только posixGroup имеет соответствующие атрибуты, которые позволяют использовать его как допустимую группу в linux/unix (то есть номер идентификатора группы, который необходим для соответствия). В этой ситуации сервер ldap не возвращает действительные группы.

У вас есть может иметь идеально функционирующую конфигурацию ldap без каких-либо или всех удаленных групп, присутствующих на выходе от getent group.

Смежные вопросы