Неинтерактивный login

Discussion in 'WASM.UNIX' started by gongfu, Aug 22, 2011.

  1. gongfu

    gongfu New Member

    Blog Posts:
    0
    Joined:
    Oct 1, 2010
    Messages:
    4
    Возможно ли сделать неинтерактивный login в систему через PAM. То есть по сути говоря ./test user pass, чтобы система говорила верный пасс или нет.
     
  2. blacktelecom

    blacktelecom New Member

    Blog Posts:
    0
    Joined:
    Nov 8, 2010
    Messages:
    235
    Да.

    Shadow.h
     
  3. gongfu

    gongfu New Member

    Blog Posts:
    0
    Joined:
    Oct 1, 2010
    Messages:
    4
    Нужно не имея привелегий суперпользователя. Это возможно?
     
  4. gongfu

    gongfu New Member

    Blog Posts:
    0
    Joined:
    Oct 1, 2010
    Messages:
    4
    Это код с kernel.org работает только для юсера из под которого запускается + пароль спрашивается в интерактивном режиме

    Code (Text):
    1. #include <security/pam_appl.h>
    2. #include <security/pam_misc.h>
    3. #include <stdio.h>
    4.  
    5. static struct pam_conv conv = {
    6.     misc_conv,
    7.     NULL
    8. };
    9.  
    10. int main(int argc, char *argv[])
    11. {
    12.     pam_handle_t *pamh=NULL;
    13.     int retval;
    14.     const char *user="nobody";
    15.  
    16.     if(argc == 2) {
    17.         user = argv[1];
    18.     }
    19.  
    20.     if(argc > 2) {
    21.         fprintf(stderr, "Usage: check_user [username]\n");
    22.         exit(1);
    23.     }
    24.  
    25.     retval = pam_start("check_user", user, &conv, &pamh);
    26.        
    27.     if (retval == PAM_SUCCESS)
    28.         retval = pam_authenticate(pamh, 0);    /* is user really user? */
    29.  
    30.     if (retval == PAM_SUCCESS)
    31.         retval = pam_acct_mgmt(pamh, 0);       /* permitted access? */
    32.  
    33.     /* This is where we have been authorized or not. */
    34.  
    35.     if (retval == PAM_SUCCESS) {
    36.         fprintf(stdout, "Authenticated\n");
    37.     } else {
    38.         fprintf(stdout, "Not Authenticated\n");
    39.     }
    40.  
    41.     if (pam_end(pamh,retval) != PAM_SUCCESS) {     /* close Linux-PAM */
    42.         pamh = NULL;
    43.         fprintf(stderr, "check_user: failed to release authenticator\n");
    44.         exit(1);
    45.     }
    46.  
    47.     return ( retval == PAM_SUCCESS ? 0:1 );       /* indicate success */
    48. }
    Можно ли написать для всех юсеров и без интерактива?
     
  5. gongfu

    gongfu New Member

    Blog Posts:
    0
    Joined:
    Oct 1, 2010
    Messages:
    4
    Я так понимаю при старте /bin/login запущен от рута и он даст залогиниться любому ( через PAM ), а уже залогиневшись, такое ( проверить валидность пароля произвольного юсера ) можно только через суидный /bin/su. Получается такое можно реализовать только через каналы общения с su ? Или есть иные пути решения? Есть у кого-нить наработки по взаимодействию с интерактивнымы каналами общения?
     
  6. r90

    r90 New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2005
    Messages:
    898
    gongfu
    Нет. Так или иначе придётся задействовать рутовские права. Если ruid процесса не 0, то есть процесс запущен не рутом, то этот процесс не может изменить свой euid, за исключением той ситуации, когда процесс suid'ный. Если же процесс suid'ный, то он может изменить euid на uid владельца файла. Рутовский суидный файл, таким образом, позволяет не-руту запустить процесс, который сменит euid на 0, после чего сможет использовать seteuid/setruid произвольным образом.

    Я где-то что-то слышал про linux без suid'а, но слышал лишь краем уха и не вникал как такое может быть. И я не уверен что донёсшиеся до меня отголоски я понял правильно.

    Если делать через su, то скорее всего втупую через пайпы не выйдет. Я вроде пробовал недавно из скрипта, и по-моему su отказался работать не на терминале. Это можно обойти, и в общем-то несложно. Псевдотерминалы должны помочь.
     
  7. act

    act New Member

    Blog Posts:
    0
    Joined:
    Jan 10, 2010
    Messages:
    8
    capabilities / caps
     
  8. r90

    r90 New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2005
    Messages:
    898
    act
    И что мне с этим делать? Перевод этих слов на русский мне ни о чём не говорит. Если их забить в гугл, то я думаю тоже не узнаю ничего нового по теме.