Bug 19909

Summary: include pam_winbind in system-auth control facility
Product: Sisyphus Reporter: Mike Lykov <combr>
Component: samba-commonAssignee: Evgeny Sinelnikov <sin>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: sin
Version: unstable   
Hardware: all   
OS: Linux   

Description Mike Lykov 2009-05-04 14:23:31 MSD
в общем, идея такая:
есть домен на samba-3.0.33.
как backend используется winbind -> ldap.
я завожу пользователя через net user add, почти все прекрасно кроме того, что по умолчанию ему прописывается
(pdbedit -L -v)
Home Directory:       \\domain\user 
(getent passwd)
user:*:10003:10000:user:/home/domain/user:/bin/false
в соответствии с умолчательным 
smb.conf
template homedir = /home/%D/%U

но проблема в том, что эта директория не создается при этом (/home/domain создана с правами root:domadmins 775)
И пользователь в принципе видит свой каталог, определенный по умолчанию в [Homes], но воспользоваться не может - ему отвечается "у вас нет прав или каталога не существует".

но есть уже почти готовое решение: /etc/pam.d/system-auth-winbind
которое использует pam_winbind и pam_mkhomedir

не так давно был введен control system-auth, который сейчас легко можно переключать между local и ldap.

возникает естественное предложение - интегрировать system-auth-winbind в этот control, для этого нужно только дописать system-auth-use_first_pass-winbind и, соотв, интегрировать его как-нужно.

надеюсь, это получится как раз как описано в smb.conf комментарии:

# template homedir determines the home directory for winbind users, with
# %D expanding to their domain name and %U expanding to their username.
# Make sure that PAM-entry for application which uses pam_winbind is able
# to auto-create those directories using something like pam_mkhomedir. Also, make sure
# that domain (%D) directory do exist in advance as pam_mkhomedir does not create it

(/home/%D можно создавать тоже заранее в скрипте, а то слишком неочевидно, что надо заранее создавать это вручную ;)
Comment 1 Alexander Bokovoy 2009-05-05 16:56:43 MSD
Патч приветствуется.
Comment 2 Mike Lykov 2010-08-28 18:05:57 MSD
нынешним собирателям самбы:
еще немного инфы раскопал человек по ссылкам 
http://permalink.gmane.org/gmane.linux.altlinux.community/118661
Что бы авторизация шла через winbind необходимо привести /etc/pam.d/gdm к виду:
#%PAM-1.0
#auth     required    pam_env.so
#auth     include    system-auth
#auth     required    pam_nologin.so
#account  include    system-auth
#password include    system-auth
#session  include    system-auth
#session  optional     pam_console.so
auth     include        system-auth-winbind
auth     required       pam_nologin.so
account  include        system-auth-winbind
password include        system-auth-winbind
session  include        system-auth-winbind
session  optional       pam_console.so

А /etc/pam.d/system-auth-winbind к виду:

#%PAM-1.0
auth        required    pam_securetty.so
auth        required    pam_nologin.so
#auth        sufficient    pam_winbind.so
auth        sufficient    pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login
auth        include        system-auth-use_first_pass
account        sufficient    pam_winbind.so
account        include        system-auth
password    sufficient    pam_winbind.so
password    include        system-auth-use_first_pass
# We use pam_mkhomedir to create home dirs for incoming domain users
# Note used umask, it will result in rwxr-x--x access rights
#session        required    pam_mkhomedir.so skel=/etc/skel/ umask=0026
session        required    pam_mkhomedir.so skel=/etc/skel/ umask=0077
session        include        system-auth

и http://permalink.gmane.org/gmane.linux.altlinux.community/118681


По мимо конфигурации PAM нужно было добавить несколько опций в самбу:

# Диапазоны идентификаторов для виртуальных пользователей и групп. idmap uid = 10000 - 40000 idmap gid = 10000 - 40000
winbind enum groups = yes winbind enum users = yes
# Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп # будут использоваться с доменом, т.е. вместо username - DOMAIN\username. winbind use default domain = yes
# Если вы хотите разрещить использовать командную строку для пользователей домена, то # добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false template shell = /bin/bash
# Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку winbind refresh tickets = yes
Перезагрузился и все заработало.

------------------
сам еще не пробовал..
Comment 3 Vitaly Kuznetsov 2010-08-28 22:39:53 MSD
Мне негде протестировать подобную конфигурацию, протестированные патчи категорически приветствуются.
Comment 4 Mike Lykov 2011-05-27 14:50:24 MSK
протестировал конфигурацию такую..

system-auth-winbind
------------
#%PAM-1.0                                                                                                      
auth            sufficient      pam_tcb.so shadow fork prefix=$2a$ count=8 nullok                              
auth            required        pam_winbind.so use_first_pass                                                  
account         sufficient      pam_tcb.so shadow fork                                                         
account         required        pam_winbind.so use_first_pass                                                  
password        sufficient      pam_winbind.so                                                                 
password        required        pam_passwdqc.so config=/etc/passwdqc.conf                                      
password        sufficient      pam_tcb.so use_authtok shadow fork prefix=$2a$ count=8 nullok write_to=tcb     
session         sufficient      pam_tcb.so                                                                     
session         required        pam_winbind.so                                                                 
session         required      pam_mktemp.so                                                                  
session         required        pam_limits.so                                                                  
                                        
# We use pam_mkhomedir to create home dirs for incoming domain users                                           
session        required    pam_mkhomedir.so skel=/etc/skel/ umask=0077 
-----------------------

system-auth-winbind-use_first_pass

------------
#%PAM-1.0                                                                                                      
auth            required        pam_winbind.so use_first_pass                                                  
password        required        pam_winbind.so use_authtok
--------------

ссылки system-auth и system-auth-use_first_pass указывают на них.
работает - login, kdm, kscreensaver, ssh, su, sudo
доменные пользователи работают наравне с локальными (сначала проверяется локальный).
например (lykov_m доменный пользователь)
--------------
May 27 13:42:21 combr kdm: :0[5621]: pam_tcb(kde4:auth): Credentials for user lykov_m unknown                  
May 27 13:42:21 combr kdm: :0[5585]: pam_tcb(kde4:auth): Authentication failed for UNKNOWN USER from (uid=0)   
May 27 13:42:21 combr kdm: :0[5585]: pam_winbind(kde4:auth): getting password (0x00000010)                     
May 27 13:42:21 combr kdm: :0[5585]: pam_winbind(kde4:auth): pam_get_item returned a password                  
May 27 13:42:21 combr kdm: :0[5585]: pam_winbind(kde4:auth): user 'lykov_m' granted access                     
May 27 13:42:25 combr kdm: :0[5585]: pam_winbind(kde4:account): user 'lykov_m' granted access                  
May 27 13:42:25 combr kdm: :0[5585]: pam_tcb(kde4:session): Session opened for lykov_m by (uid=0) 
-------------
важно, чтобы в smb.conf было указано  template shell = /bin/bash
потому что из ldap поле loginShell не берется, хотя и ищется в числе прочих.

вопрос с группами не проработан, в этом варианте доменная группа одна по умолчанию: 
$ id
uid=10058(lykov_m) gid=10006(domain users) группы=10006(domain users),10(wheel)

домашний каталог создается на ходу вместе с вышестоящей папкой (по имени домена)
при логине в kdm создаются и остальные папки по xdg (документы и др.)

все это на p6 с samba-common-3.5.8-alt3 (сервер samba-3.0.33 на server4.0)
естественно что winbind дожен быть настроен заранее
$ wbinfo -a lykov_m%passw
plaintext password authentication succeeded
Comment 5 Mike Lykov 2011-06-02 12:26:40 MSK
правда, есть еще одна засада: если установлена политика периодической смены паролей, и пароль меняется через passwd (current NT password, new NT password, retype new NT password), то при этом поле sambaLMPassword (в LDAP) уничтожается (очищается).

после чего компьютер (machine trust account) считается неаутентифицированной, и при следующей попытке логина до проверки пароля пользователя не доходит, говоря на machine account NT_STATUS_ACCESS_DENIED.

новый net rpc join member решает (заполняет поле sambaLMPassword).