[devel] ConsoleKit и DM policy

Vladislav Zavjalov slazav на altlinux.org
Ср Дек 16 11:56:39 UTC 2009


On 12/16/09 14:19, Mykola S. Grechukh wrote:
> 16 декабря 2009 г. 11:14 пользователь Michael Shigorin<>  написал:
>> On Mon, Dec 14, 2009 at 03:57:08PM +0200, Igor Vlasenko wrote:
>>> Уважаемые коллеги, смотрел
>>> https://bugzilla.altlinux.org/show_bug.cgi?id=22447
>>> по поводу регистрирации сессий в Console Kit.
>>> Если сервисы начинают предоставляться в зависимости
>>> от Console Kit, то втихую этого нельзя делать.
>>
>> И кстати, не только dm -- на 5.1/branch пойманы проблемы
>> с флэшками в KDE3, запущенном при помощи startx.
>
> Именно поэтому в федорке вызовы ck-init засунуты прямо в скриты
> xinitrc. У нас  pam_ck_connector, но он не помогает для startx.

Хорошо бы, наверное, все сделать через pam_ck_connector...

Для startx есть /etc/pam.d/xserver, но он у нас отключен.

xorg-server/os/utils.c:

...
/*
  * CheckUserAuthorization: check if the user is allowed to start the
  * X server.  This usually means some sort of PAM checking, and it is
  * usually only done for setuid servers (uid != euid).
  */

#ifdef USE_PAM
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <pwd.h>
#endif /* USE_PAM */

void
CheckUserAuthorization(void)
{
#ifdef USE_PAM
     static struct pam_conv conv = {
         misc_conv,
         NULL
     };

     pam_handle_t *pamh = NULL;
     struct passwd *pw;
     int retval;

     if (getuid() != geteuid()) {
         pw = getpwuid(getuid());
         if (pw == NULL)
             FatalError("getpwuid() failed for uid %d\n", getuid());

         retval = pam_start("xserver", pw->pw_name, &conv, &pamh);
         if (retval != PAM_SUCCESS)
             FatalError("pam_start() failed.\n"
                         "\tMissing or mangled PAM config file or 
module?\n");

         retval = pam_authenticate(pamh, 0);
         if (retval != PAM_SUCCESS) {
             pam_end(pamh, retval);
             FatalError("PAM authentication failed, cannot start X 
server.\n"
                         "\tPerhaps you do not have console ownership?\n");
         }

         retval = pam_acct_mgmt(pamh, 0);
         if (retval != PAM_SUCCESS) {
             pam_end(pamh, retval);
             FatalError("PAM authentication failed, cannot start X 
server.\n"
                         "\tPerhaps you do not have console ownership?\n");
         }

         /* this is not a session, so do not do session management */
         pam_end(pamh, PAM_SUCCESS);
     }
#endif
}
...



Подробная информация о списке рассылки Devel