newgrp и группы, назначенные через pam_group.so

По соображениям удобства я предпочитаю назначать специальные группы, такие как floppy, audio, plugdev, video и т. Д. С помощью механизма /etc/security/group.conf (pam_group.so) вместо добавления всех пользователей в эти группы на сервере каталогов.

Это отлично подходит для доступа к устройству, но оно вызывает проблемы, когда внешние программы пытаются проверить членство пользователя в определенной группе с помощью getgrent.

Теперь я попробовал newgrp для одной из этих групп и понял, что это невозможно (система – сжатие Debian). Является ли это ошибкой в ​​newgrp или просто проблемой конфигурации на моем сайте?

Что новогогрп делает на стороне API Unix? Похоже, setgid – это системный вызов root-only. Я бы подумал, что это будет разрешено, если конкретный пользователь является членом целевой группы setgit.

Я фактически наткнулся на проблему, потому что mount.davfs продолжает говорить мне, что я не являюсь членом группы davfs2, что, конечно же, но это также группа, назначенная pam_group.so.

2 Solutions collect form web for “newgrp и группы, назначенные через pam_group.so”

newgrp дает вам доступ к группе, к которой у вас уже есть доступ. Звучит бесполезно? В принципе, да. Это в основном остатки от дней, когда процесс не может быть членом нескольких групп. Вы также можете получить доступ к группе, защищенной паролем, но это чрезвычайно необычно.

С точки зрения ядра каждый процесс находится в одной или нескольких группах. setgid может использоваться только при запуске как root или в программах setgid (для обмена между реальными (run-by) и эффективными (run-as) группами). Ядро не знает о пользовательских и групповых базах данных.

Базы данных пользователей и групп ( /etc/passwd , /etc/group , /etc/security/group.conf , LDAP, …) управляются login , su и другими программами, которые управляют входами и повышением привилегий, часто через PAM. Когда вы входите в систему, вы получаете назначение для групп, перечисленных в /etc/passwd , /etc/group и других файлах через pam_groups ; процесс выглядит следующим образом:

 gid_t groups[…] = /*extra GIDs computed from /etc/group and so on*/; setgroups(sizeof(groups)/sizeof(gid_t), groups); setgid(gid); /*main GID read from /etc/passwd*/ setuid(uid); execve(shell, "-sh"); /*shell read from /etc/passwd*/ 

На словах: отказ от прав root (т.е. переход к целевому пользователю) выполняется после всех других полномочий управления привилегиями непосредственно перед вызовом оболочки пользователя. После того, как процесс перестает выполняться с правами root, он не сможет получить дополнительные группы.

Если вы только что добавили пользователя в группу, это вступит в силу при следующем входе пользователя в систему. Если вы запустите другой сеанс, войдя в другой терминал или через ssh, процессы в этом сеансе будут иметь группы, которые ваш пользователь был в то время, когда вы вошли в систему. Вы можете использовать groups или команду id чтобы узнать, в каких группах вы (что означает конкретный процесс, с которым вы начали groups ).

Итак, я ответил на ваши конкретные вопросы ( newgrp делает свою работу, а это не то, что вы думали). Я мог или не мог решить вашу проблему. Это необычно для приложений, которые не регистрируют вас, чтобы искать базы данных пользователей и групп; обычно разрешения на доступ будут решаться путем проверки того, является ли запрашивающий процесс членом соответствующей группы. Если у вас есть проблемы с конкретным приложением, сообщите нам, какой.

Причина, по которой newgrp не может изменить группы в ваших случаях, заключается в том, что она использует getgrent для определения того, являетесь ли вы членом запрашиваемой группы; см. функцию find_matching_group в исходном файле newgrp.c .

Почему newgrp необходимо выполнить эту проверку? Поскольку набор групп, к которым принадлежит процесс (так называемый «групповой вектор»), представляет собой произвольный список: ядро ​​не знает о /etc/group или любой другой базе данных группы, а setgroups могут принимать произвольный список групп. Поэтому решение о том, какие группы должны быть в групповом векторе процесса, является вопросом политики : политика, реализуемая [newgrp] и большинством других инструментов пользовательского пространства, – это считывание группового вектора через getgrent . ( Ответ Гилла дает подробности об этом.)

С другой стороны, pam_group реализует другую политику: она может дополнять вектор группы группами, в которых пользователь не является частью (согласно /etc/group или LDAP).

Итак, в конце концов существует две разные политики, и mount.davfs2 жалуется, потому что предполагает, что действует только первый. Вероятно, вы можете сообщить об этом как об ошибке в mount.davfs2 или просто добавить всех пользователей DAV в соответствующую группу в LDAP или /etc/group или вместо этого использовать файловую систему DAV на базе FUSE .

  • Изменение разрешений
  • Я добавил пользователя в группу, но групповые разрешения на файлы по-прежнему не влияют
  • ACL и простые старые разрешения
  • Разрешения tar / ntfs / linux
  • Невозможно создать файл * .o на разделе
  • Каковы варианты использования файлов только для записи и записи-выполнения?
  • RSync - Permission denied (13) при выполнении rsync в качестве корня
  • Linux - Windows 8 - Samba - Может видеть каталог и содержимое, но не создавать
  • Правильное понимание прав для cp
  • usermod -a -G пользователь группы не работает
  • Как разрешить доступ пользователей к определенному файлу в ограниченном каталоге?
  • Linux и Unix - лучшая ОС в мире.