Integracion Unix AIX, Samba, Winbind, SSH y dominio Windows (8/8) - Winbind y SSH, ultimos detalles


Home del documento

- Como ya tenemos el sshd en el estado que queríamos, desactivamos telnet

# stopsrc -t'telnet'


- Y nos aseguramos

# lssrc -t'telnet'
Service Command Description Status
#


- En las pruebas, en alguna ocasión me he encontrado que el host remoto cierra la conexión en el inicio:

smolarek@host1 ~
$ ssh "DOMINIO\smolarek@modsed"
Password:
Connection to modsed closed by remote host.
Connection to modsed closed.

No he sido capaz de determinar la causa. Las veces que ha pasado tenía el log desactivado y en el siguiente intento, tras activarlo, siempre me ha funcionado... (?!). (TODO) Esto me queda pendiente.

- Para incorporar todo lo que hemos creado en el arranque de máquina habría que incorporar nuevos subsistemas (o subservidores) y quitar los antiguos que no procedan. En nuestro caso, en lo que se refiere a ssh y Samba, sólo teníamos un ssh:

# lssrc -a
Subsystem Group PID Status
syslogd ras 9330 active
...
sshd ssh inoperative


- En la operación de añadir un nuevo subsistema sshd-4.7 (previa parada del daemon corriendo)...:

# mkssys -p /opt/openssh-4.7p1/sbin/sshd -s sshd-4.7 -u 0 -G ssh
0513-071 The sshd-4.7 Subsystem has been added.
#

# startsrc -s sshd-4.7
0513-059 The sshd-4.7 Subsystem has been started. Subsystem PID is 29068.
#

... no ha habido suerte. Parece que arranca bién pero luego hago un ps -ef y no hay nada del pid que me ha devuelto el startsrc. (TODO) Como ya no quedan muchas energias me olvido de este tema y lo haré de la manera que mejor conozco, así que me cargo el subsistema que he creado antes...

# rmssys -s sshd-4.7
0513-083 Subsystem has been Deleted.
#

... y hago un script de arranque/parada. Primero creo una carpeta old en /etc/rc.d/rc2.d que es donde está el script Sshd que voy a reutilizar. Antes de nada lo copio en esa carpeta. Tras modificar el fichero Ssshd queda así:

# cat Ssshd
#!/bin/ksh
PROGRAM="/opt/openssh-4.7p1/sbin/sshd"
case "$1" in
start )
echo Starting $PROGRAM...
$PROGRAM
$0 status
;;
stop )
echo Stopping $PROGRAM...
ps -ef | grep "$PROGRAM" | grep -v grep | awk '{print $2}' | xargs kill
$0 status
;;
status )
echo Requesting status...
ps -ef | grep "$PROGRAM" | grep -v grep || echo No $PROGRAM running.
;;
restart )
$0 stop
$0 start
;;
* )
echo "Usage: $0 ( start | stop | restart | status )"
exit 1
esac

- Lo linko con el fichero K de parada...

# ln -s /etc/rc.d/rc2.d/Ssshd /etc/rc.d/rc2.d/Ksshd


- Parecido para Samba:

# cat Ssamba
#!/bin/ksh

SMBD="/usr/local/samba/sbin/smbd"
NMBD="/usr/local/samba/sbin/nmbd"
WINBINDD="/usr/local/samba/sbin/winbindd"
SMBD_OPTIONS="-D"
NMBD_OPTIONS="-D"
WINBIND_OPTIONS="-B"
case "$1" in
start )
for i in "$SMBD $SMBD_OPTIONS" "$NMBD $NMBD_OPTIONS" "$WINBINDD $WINBIND_OPTIONS"
do
echo Starting $i...
$i
done
$0 status
;;
stop )
for i in $SMBD $NMBD $WINBINDD
do
echo Stopping $i...
ps -ef | grep $i | grep -v grep | awk '{print $2}' | xargs kill
done
$0 status
;;
status )
for i in $SMBD $NMBD $WINBINDD
do
echo Requesting $i status...
ps -ef | grep $i | grep -v grep || echo No $i running.
done
;;
restart )
$0 stop
$0 start
;;
* )
echo "Usage: $0 ( start | stop | restart | status )"
exit 1
esac

# ln -s /etc/rc.d/rc2.d/Ssamba /etc/rc.d/rc2.d/Ksamba
#

... para dejarlo todo así:

# ls -l
total 16
lrwxrwxrwx 1 root system 22 Dec 13 11:59 Ksamba -> /etc/rc.d/rc2.d/Ssamba
lrwxrwxrwx 1 root system 5 Dec 05 18:14 Ksshd -> Ssshd
-rwxr-xr-x 1 root system 846 Dec 13 11:57 Ssamba
-rwxr-xr-x 1 root system 579 Dec 11 13:35 Ssshd
drwxr-xr-x 2 root system 256 Dec 05 16:28 old


- El fichero de configuración de Samba smb.conf que hemos preparado determina que el HOME del usuario (template home) sea/home lo cual no es muy ortodoxo. Lo normal es determinar un template home como el siguiente

template home = /home/%D/%U

con %D haciendo referencia al dominio y %U al usuario. Pero esto provoca que si no existe esa ruta recibamos un error tras el login. Para evitarlo, la manera más correcta sería utilzar el módulo PAM pam_mkhomedir, pero este módulo no se incluye en los PAM de AIX. Como workaround se puede dejar el template home como lo habíamos puesto al principo

template home = /home

y gestionar el resto desde el fichero /etc/profile, que se ejecuta tras el login

# cat /etc/profile
# @(#)27 1.20 src/bos/etc/profile/profile, cmdsh, bos530 8/9/94 12:01:38
...
# System wide profile. All variables set here may be overridden by
# a user's personal .profile file in their $HOME directory. However,
# all commands here will be executed at login regardless.

trap "" 1 2 3
readonly LOGNAME
...
# unset LC_MESSAGES.
if [ "$LC_MESSAGES" = "C@lft" -a "$TERM" != "lft" ]
then
unset LC_MESSAGES
fi
...
#control de entrada de usuaris con user/password de windows
SAMBA_CONF=/etc/smb.conf
SAMBA_FIRST_UID=`grep "idmap uid" $SAMBA_CONF|cut -f2 -d"="|cut -f1 -d"-"|grep [0-9]`
SAMBA_VALID_SSH_DOMAIN="DOMINIO"
SAMBA_VALID_SSH_USER="Domain master-users"
UID=`id -u`
if [ $UID -ge $SAMBA_FIRST_UID ] ; then
SAMBA_VALID_SSH_LOGON=$SAMBA_VALID_SSH_DOMAIN\\\\$SAMBA_VALID_SSH_USER
MATCH=`id | grep -i "$SAMBA_VALID_SSH_LOGON"`
#comprova que tingui permis per logar amb ssh amb usuari/pw de AD
if [ "$MATCH" = "" ] ; then
echo "ERROR: Domain account not allowed to SSH login."
exit
fi
#prepara el $HOME
ACCOUNT=$(echo $LOGNAME | sed '1,$s/'$SAMBA_VALID_SSH_DOMAIN'\\//g')
export HOME=/home/$SAMBA_VALID_SSH_DOMAIN/$ACCOUNT
mkdir -p $HOME
cd $HOME
umask 022
#prepara el PATH, para que funcione ui2name gid2name name2uid y name2gid
export PATH=$PATH:/usr/local/samba/bin/
fi
...
trap 1 2 3


- Con lo anterior:
  • Forzamos que el usuario no pueda hacer un Control-C durante el proceso de validación (código entre los las dos instrucciones trap).
  • Forzamos que sólo pueden logar con SSH y usuario de Windows aquellos users de AD que pertenezcan al grupo indicado en SAMBA_VALID_SSH_USER (en este caso "admins. del dominio")
  • Creamos un HOME por usuario
  • Preparamos el PATH, para que funcionen los patches ui2name, gid2name, name2uid y name2gid que preparamos anteriormente.


- Fuentes oficiales:

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp
http://samba.org
http://gnu.org
http://openssh.org
http://www.zlib.net


Home del documento