Mostrando entradas con la etiqueta cómo. Mostrar todas las entradas
Mostrando entradas con la etiqueta cómo. Mostrar todas las entradas

domingo, 1 de febrero de 2009

Cómo repetir una cadena en bash

Dos maneras de repetir una cadena en bash, un número determinado de veces. En este caso desde 1 hasta 3:

nouser@nohost:~$ CADENA="loquesea_"

nouser@nohost:~$ for i in {1..3};do printf "%s" $CADENA;done;echo
loquesea_loquesea_loquesea_
nouser@nohost:~$ printf "$CADENA%.0s" {1..3};echo
loquesea_loquesea_loquesea_


martes, 27 de enero de 2009

sed, borrando bloques de texto delimitado por cadenas

Tenía unos cuantos ficheros htm dentro de un directorio (pongamos como ruta /ruta/del/directorio), y quería borrar de ellos -si lo contenían- las siguientes líneas:

<div class="links">
<a href="http://peremolto.net">peremolto.net</a>
</div>


En la página de sed, el ejemplo 4.21 se ajusta casi en su totalidad a esto. Tras adaptarlo a lo mío quedó así:

nouser@nohost:~$ cat borra_delimitado.sed
# sed script to delete a block if /regex/ matches inside it
:t
/<div class="links">/,/div>/ { # For each line inside these block markers
/div>/!{ # If we are not at the /end/ marker
$!{ # nor the last line of the file,
N; # add the Next line to the pattern space
bt
} # and branch (loop back) to the :t label.
} # This line matches the /end/ marker.
/>peremolto.net</d; # If /regex/ matches, delete the block.
} # Otherwise, the block will be printed.
#---end of script---

Tal como se presenta este script sed, lo incluimos en un "for i in" que recorre los ficheros devueltos por un find

nouser@nohost:~$ for i in `find /ruta/del/directorio -name "*.htm"`; do sed -f borra_delimitado.sed -i $i; done

viernes, 2 de enero de 2009

PHP desde la línea de comandos, por ejemplo

nouser@nohost:~$ php -r "phpinfo();"
phpinfo()
PHP Version => 5.2.4-2ubuntu5.4


System => Linux nohost-ubuntu 2.6.24-22-generic #1 SMP Mon Nov 24 18:32:42 UTC 2008 i686


...



domingo, 9 de septiembre de 2007

Indentado y tabulación en HTML

Mostrar indentados y tabulaciones en una página html es algo más complicado que en un fichero de texto.

En el anterior post me encontré con esta necesidad. Por si le sirve a alguien, explico cómo puede hacerse mediante style tags:

El siguiente código ...

<style>
<!-- p.Normal {margin:0cm;} -->
</style>
<p class=Normal style='text-indent:30pt'>line 1 - tab level 1 - 30pt</p>
<p class=Normal style='text-indent:60pt'>line 2 - tab level 2 - 60pt</p>
<p class=Normal style='text-indent:90pt'>line 3 - tab level 3 - 90pt</p>
<p class=Normal style='text-indent:60pt'>line 4 - tab level 2 - 60pt</p>
<p class=Normal style='text-indent:30pt'>line 5 - tab level 1 - 30pt</p>

... muestra en el navegador lo siguiente:

line 1 - tab level 1 - 30pt

line 2 - tab level 2 - 60pt

line 3 - tab level 3 - 90pt

line 4 - tab level 2 - 60pt

line 5 - tab level 1 - 30pt


Feliz indentado.

jueves, 6 de septiembre de 2007

Getting Oracle 10 datapump full path

This week I have been working on a bash script and I had the need to know the full path of my Oracle 10 datapump directory (directories).

I have found some useful links with general info about datapumps, how to create them, etc, but none of them told me how to find out their defined paths...

Navigating the dictionary information through the PL/SQL Developer trees I have found the view SYS.ALL_DIRECTORIES which contains what I wanted. I have just take a look to this view definition and... this is how I finally get my datapump dirs:

...

export IFS="

"

export DATAPUMP_DIRS=`

echo "

set heading off;

set feedback off;

select d.os_path

from sys.obj$ o, sys.dir$ d

where o.obj# = d.obj#

and o.type# = 23;

" | sqlplus -S $USER/$PASSWORD

`

...


Integración Unix AIX, Samba, Winbind, SSH y dominio Windows (1/8) - Instalación

Home del documento

En esta entrada se cubre la intalación de Samba sobre un sistema operativo AIX 5.3, mediante paquete binario precompilado descargado desde

http://us1.samba.org/samba/ftp/Binary_Packages/AIX/

La explicación se basa en la instalación de la versión 3.0.26a

En este caso, la instalación del paquete precompilado no incluye algunas opciones importantes, como por ejemplo la posibilidad de trabajar con PAM. Estas opciones se tratan más adelante en la instalación mediante compilación de código fuente:


- Gunzipeo y destareo:

# pwd
/usr/src/samba
# ls
README.htm
opt-samba-3.0.26a-AIX5.tar.gz
opt-samba-3.0.26a-AIX5.tar.asc
opt-samba-base.tar.asc
opt-samba-base.tar.gz
# ls *.gz
opt-samba-3.0.26a-AIX5.tar.gz opt-samba-base.tar.gz
# gunzip opt-samba-base.tar.gz
# gunzip opt-samba-3.0.26a-AIX5.tar.gz
# mkdir /tmp/samba
# cp -p opt-samba-base.tar opt-samba-base-AIX5.tar /tmp/samba
# cp -p opt-samba-3.0.26a-AIX5.tar /tmp/samba
# cd /tmp/samba
# ls
opt-samba-3.0.26a-AIX5.tar
opt-samba-base.tar
# tar -xf opt-samba-3.0.26a-AIX5.tar
# tar -xf opt-samba-base.tar


- Simulacro de instalación mediante installp -l:

# installp -lE -d.
*******************************************************************************
installp PREVIEW: installation will not actually occur.
*******************************************************************************

+-----------------------------------------------------------------------------+
Pre-installation Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
Results...

SUCCESSES
---------
Filesets listed in this section passed pre-installation verification
and will be installed.

Selected Filesets
-----------------
pware.BerkeleyDB.4.4-NC.rte 4.4.20.4 # Patched Berkeley DB 4.4.20-NC
pware.MIT-krb5.rte 1.4.4.1 # MIT Kerberos 1.4.4
pware.base.rte 5.2.0.0 # pware base for AIX 5.2
pware.cyrus-sasl.rte 2.1.22.0 # Cyrus SASL 2.1.22
pware.gcc-shared-libs.rte 4.1.1.0 # gcc shared libs 4.1.1
pware.libiconv.rte 1.9.2.0 # libiconv 1.9.2
pware.openldap.rte 2.3.27.0 # OpenLDAP 2.3.27
pware.openssl.rte 0.9.8.3 # OpenSSL 0.9.8c
pware.popt.rte 1.7.0.0 # popt 1.7
pware.samba-3.0.26a.rte 3.0.26.1 # Samba 3.0.26a

<< End of Success Section >>

FILESET STATISTICS
------------------
10 Selected to be installed, of which:
10 Passed pre-installation verification
----
10 Total to be installed

RESOURCES
---------
Estimated system resource requirements for filesets being installed:
(All sizes are in 512-byte blocks)
Filesystem Needed Space Free Space
/usr 7837 28591976
/opt 557944 9631888
----- -------- ------
TOTAL: 565781 38223864

NOTE: "Needed Space" values are calculated from data available prior
to installation. These are the estimated resources required for the
entire operation. Further resource checks will be made during
installation to verify that these initial estimates are sufficient.
Use the option to extend filesystems (-X flag) to ensure that any
additional resources which may be needed are automatically allocated.

LICENSE AGREEMENTS
------------------
License agreement for:
pware.base.rte
pware.samba-3.0.26a.rte
pware.openldap.rte
pware.cyrus-sasl.rte
pware.gcc-shared-libs.rte
pware.libiconv.rte
pware.openssl.rte
pware.popt.rte
pware.samba-3.0.26a.rte
pware.BerkeleyDB.4.4-NC.rte
pware.MIT-krb5.rte

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
...
are THE SOLE RESPONSIBILITY OF THE INSTALLER.

******************************************************************************
End of installp PREVIEW. No apply operation has actually occurred.
******************************************************************************


- Viendo que parece que no va a haber problemas, procedemos a instalar de verdad:

# installp -agYX -d. all
+-----------------------------------------------------------------------------+
Pre-installation Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
Results...

SUCCESSES
---------
Filesets listed in this section passed pre-installation verification
and will be installed.

Selected Filesets
-----------------
pware.BerkeleyDB.4.4-NC.rte 4.4.20.4 # Patched Berkeley DB 4.4.20-NC
pware.MIT-krb5.rte 1.4.4.1 # MIT Kerberos 1.4.4
pware.base.rte 5.2.0.0 # pware base for AIX 5.2
pware.cyrus-sasl.rte 2.1.22.0 # Cyrus SASL 2.1.22
pware.gcc-shared-libs.rte 4.1.1.0 # gcc shared libs 4.1.1
pware.libiconv.rte 1.9.2.0 # libiconv 1.9.2
pware.openldap.rte 2.3.27.0 # OpenLDAP 2.3.27
pware.openssl.rte 0.9.8.3 # OpenSSL 0.9.8c
pware.popt.rte 1.7.0.0 # popt 1.7
pware.samba-3.0.26a.rte 3.0.26.1 # Samba 3.0.26a

<< End of Success Section >>

FILESET STATISTICS
------------------
10 Selected to be installed, of which:
10 Passed pre-installation verification
----
10 Total to be installed

+-----------------------------------------------------------------------------+
Installing Software...
+-----------------------------------------------------------------------------+

installp: APPLYING software for:
pware.base.rte 5.2.0.0

Filesets processed: 1 of 10 (Total time: 2 secs).

installp: APPLYING software for:
pware.MIT-krb5.rte 1.4.4.1

Filesets processed: 2 of 10 (Total time: 6 secs).

installp: APPLYING software for:
pware.BerkeleyDB.4.4-NC.rte 4.4.20.4

Filesets processed: 3 of 10 (Total time: 33 secs).

installp: APPLYING software for:
pware.popt.rte 1.7.0.0

Filesets processed: 4 of 10 (Total time: 35 secs).

installp: APPLYING software for:
pware.openssl.rte 0.9.8.3

Filesets processed: 5 of 10 (Total time: 55 secs).

installp: APPLYING software for:
pware.libiconv.rte 1.9.2.0

Filesets processed: 6 of 10 (Total time: 58 secs).

installp: APPLYING software for:
pware.gcc-shared-libs.rte 4.1.1.0

Filesets processed: 7 of 10 (Total time: 1 mins 1 secs).

installp: APPLYING software for:
pware.cyrus-sasl.rte 2.1.22.0

Filesets processed: 8 of 10 (Total time: 1 mins 3 secs).

installp: APPLYING software for:
pware.openldap.rte 2.3.27.0

Filesets processed: 9 of 10 (Total time: 1 mins 9 secs).

installp: APPLYING software for:
pware.samba-3.0.26a.rte 3.0.26.1

Restoring files, please wait.
Finished processing all filesets. (Total time: 2 mins 3 secs).

+-----------------------------------------------------------------------------+
Summaries:
+-----------------------------------------------------------------------------+

Installation Summary
--------------------
Name Level Part Event Result
-------------------------------------------------------------------------------
pware.base.rte 5.2.0.0 USR APPLY SUCCESS
pware.MIT-krb5.rte 1.4.4.1 USR APPLY SUCCESS
pware.BerkeleyDB.4.4-NC.rte 4.4.20.4 USR APPLY SUCCESS
pware.popt.rte 1.7.0.0 USR APPLY SUCCESS
pware.openssl.rte 0.9.8.3 USR APPLY SUCCESS
pware.libiconv.rte 1.9.2.0 USR APPLY SUCCESS
pware.gcc-shared-libs.rte 4.1.1.0 USR APPLY SUCCESS
pware.cyrus-sasl.rte 2.1.22.0 USR APPLY SUCCESS
pware.openldap.rte 2.3.27.0 USR APPLY SUCCESS
pware.samba-3.0.26a.rte 3.0.26.1 USR APPLY SUCCESS
#


- Hacemos limpieza:

# installp -u pware.*
+-----------------------------------------------------------------------------+
Pre-deinstall Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
Results...

WARNINGS
--------
Problems described in this section are not likely to be the source of any
immediate or serious failures, but further actions may be necessary or
desired.

Not Installed
-------------
No software could be found on the system that could be deinstalled for the
following requests:

pware.BerkeleyDB.4.4-NC.4.4.20.4.bff
pware.MIT-krb5.1.4.4.1.bff
pware.base.5.2.0.0.bff
pware.cyrus-sasl.2.1.22.0.bff
pware.gcc-shared-libs.4.1.1.0.bff
pware.libiconv.1.9.2.0.bff
pware.openldap.2.3.27.0.bff
pware.openssl.0.9.8.3.bff
pware.popt.1.7.0.0.bff
pware.samba-3.0.26a.3.0.26.1.bff

(The fileset may not be currently installed, or you may have made a
typographical error.)

<< End of Warning Section >>

FILESET STATISTICS
------------------
10 Selected to be deinstalled, of which:
10 FAILED pre-deinstall verification
----
0 Total to be deinstalled


Pre-installation Failure/Warning Summary
----------------------------------------
Name Level Pre-installation Failure/Warning
-------------------------------------------------------------------------------
pware.BerkeleyDB.4.4-NC.4 Nothing by this name to deinstall
pware.MIT-krb5.1.4.4.1.bf Nothing by this name to deinstall
pware.base.5.2.0.0.bff Nothing by this name to deinstall
pware.cyrus-sasl.2.1.22.0 Nothing by this name to deinstall
pware.gcc-shared-libs.4.1 Nothing by this name to deinstall
pware.libiconv.1.9.2.0.bf Nothing by this name to deinstall
pware.openldap.2.3.27.0.b Nothing by this name to deinstall
pware.openssl.0.9.8.3.bff Nothing by this name to deinstall
pware.popt.1.7.0.0.bff Nothing by this name to deinstall
pware.samba-3.0.26a.3.0.2 Nothing by this name to deinstall


- Comprobamos mediante comando que se ha instalado Samba:

# lslpp -L all|grep samba
pware.samba-3.0.26a.rte 3.0.26.1 C F Samba 3.0.26a


- Como prueba, intento arrancar smbd y ver que pasa...

# /opt/pware/samba/3.0.26a/sbin/smbd -D
# echo $?
255


- Da error porque no sabe donde encontrar el fichero smb.conf, así que lo busco entre los filesystems:


# find / -name smb.conf -ls
33462 4 -rw-r--r-- 1 root system 3904 Jan 3 2006 /opt/pware/samba/3.0.26a/examples/LDAP/smbldap-tools-0.9.2/smb.conf
33570 4 -rw-r--r-- 1 root system 793 Feb 25 2005 /opt/pware/samba/3.0.26a/examples/dce-dfs/smb.conf
33763 4 -rw-r--r-- 1 root system 1924 Feb 25 2005 /opt/pware/samba/3.0.26a/examples/tridge/smb.conf


- Copio uno de ellos en /etc que sería su ubicación habitual en AIX. Otra posibilidad sería arrancar el smbd con el parámetro -s e indicarle a continuación un fichero de configuración (con su ruta completa si fuera necesario)


# cp -p /opt/pware/samba/3.0.26a/examples/dce-dfs/smb.conf /etc

... y tuneo el fichero de acuerdo a mis necesidades. Deberí­a quedar más o menos así­:

# cat /etc/smb.conf
[global]
workgroup = DOMINIO
netbios name = modsed
encrypt passwords = yes
security = domain
log file = /var/log/samba/samba.log

# separate domain and username with '\', like DOMAIN\username
winbind separator = \\

# use uids from 10000 to 20000 for domain users
idmap uid = 10000-20000

# use gids from 10000 to 20000 for domain groups
idmap gid = 10000-20000

# allow enumeration of winbind users and groups
winbind enum users = yes
winbind enum groups = yes

[dosys]
comment = Testing Samba and Active Directory integration
path = /home/dosys
read only = no
public = no
writable = yes
printable = no


- Creo un directorio de log en la ruta que he definido en el fichero de antes...

# mkdir /var/log/samba


- Pero lo que hemos instalado espera el fichero smb.conf en la ruta /opt/pware/samba/3.0.26a/lib. Pues nada, linkamos en esa ruta el fichero que he copiado en el paso anterior...

# ln -s /etc/smb.conf /opt/pware/samba/3.0.26a/lib/smb.conf

... y tuneo el PATH en el /etc/profile:

# cat /etc/profile
...
export SAMBA_HOME=/opt/pware/samba/3.0.26a
export PATH=$PATH:$SAMBA_HOME/bin:$SAMBA_HOME/sbin

#


- Preparo, si no existe ya, la ruta del recurso compartido que he definido ([dosys])

# mkdir -p /home/dosys
# chown -R dosys:teson /home/dosys


- Vuelvo a arrancar, a ver que pasa ahora:

# smbd -D
# echo $?
0

# nmbd -D
# echo $?
0


Parece que ahora tira.


Home del documento

Integración Unix AIX, Samba, Winbind, SSH y dominio Windows (2/8) - Agregar host al dominio de Windows

Home del documento

Vamos bien, pero si no nos fiamos de que haya arrancado alguno de los daemons anteriores, podemos lanzar un ps -ef | grep mbd

Ahora según el howto oficial de Samba tocarí­a trabajar el NSS a través del fichero /etc/nsswitch.conf. En el sistema en el que me he basado la expliación no existe este fichero, pero sí que hay un /etc/netsvc.conf (la sintaxis es algo distinta) que se ha dejado así:


# cat /etc/netsvc.conf
# @(#)43 1.1 src/tcpip/etc/netsvc.conf, tcpip, tcpip530 4/3/02 22:12:29
...
#
hosts = local4 , bind4


- En este punto también nos proponen el uso de ldconfig para empezar hacer uso de las librerias necesarias. En mi caso ni existe el comando en el SO ni ha hecho falta reiniciar máquina tal como se indica.

- También hay que tunear el fichero /usr/lib/security/methods.cfg. En mi caso he tenido que añadir la sección WINBIND que detallo a continuación en color negro:


# cat /usr/lib/security/methods.cfg
* @(#)78 1.5 src/bos/usr/lib/security/methods.cfg.S, cmdsadm, bos530 6/11/03 17:06:16
...
NIS:
program = /usr/lib/security/NIS
program_64 = /usr/lib/security/NIS_64
DCE:
program = /usr/lib/security/DCE
WINBIND:
program = /usr/lib/security/WINBIND


- El fichero /usr/lib/security/WINBIND hay que tenerlo en la ruta indicada en el fichero anterior. Con un link funciona, pero también se puede copiar:

# ln -s /opt/pware/samba/3.0.26a/lib/security/WINBIND /usr/lib/security/WINBIND

En algún documento he encontrado referencias que comentan el hecho de que /usr/lib/security/WINBIND debe tener permisos 444 y propietario/grupo root:security. En este caso no ha hecho falta determinar nada de esto.


- Ahora viene la parte en la que hay que añadir la máquina al dominio (WORKGROUP indicado en el smb.conf):

# net rpc join -S delta.dominio.com -U administrador
Password:
Joined domain DOMINIO.
#


- En teoría ya hemos acabado. Arrancamos winbind (con -B para agilizar consultas mediante caché)...

# winbindd -B
# echo $?
0

... y comprobamos que la máquina se ha unido al dominio.

# wbinfo -t
checking the trust secret via RPC calls succeeded


- Si matamos el winbindd (o si éste hubiera arrancado de forma incorrecta) y preguntamos de nuevo lo mismo obtenemos algo así:

# wbinfo -t
checking the trust secret via RPC calls failed
error code was NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND (0xc0000233)
Could not check secret
#


- Entonces, con el winbindd arrancado, preguntamos al dominio por sus cuentas de usuario:

# wbinfo -u
Error looking up domain users

WTF!? Pues no, aun no hemos acabado (Este problema no tuve que sufrirlo en un Linux). En el próximo capítulo explico cómo llevar a cabo el debugado.


Home del documento

Integración Unix AIX, Samba, Winbind, SSH y dominio Windows (3/8) - Debugado de problemas


Home del documento

En el caso presentado, si en lugar de preguntar por los usuarios del dominio, pregunto por los grupos...

# wbinfo -g
BUILTIN\administrators
BUILTIN\users

... o sea, no da error, pero tampoco responde correctamente.

Para localizar el error, como de costumbre, se debe consultar el log correspondiente. Si este nos trae información suficiente, perfecto. Si no es así, tenemos la posibilidad de subir el nivel de log que nos trae winbindd. Este nivel de log puede subir hasta un nivel 20, pero para la mayoría de propositos un nivel 3 es suficiente para propósitos de traza de problemas.

En este caso se pudo localizar el error arrancando winbindd en modo interactivo con los siguientes parámetros:

# winbindd -S -n -i --debuglevel=3

-S para mostrar salida en pantalla
-n para deshabilitar posibles problemas de credenciales cacheadas
-i para no lanzar como daemon
--debuglevel=3 para mostrar log con un nivel 3 de detalle


- Ahora toca arremangarse y empezar a digerir la salida del comando (o al menos intentarlo). El problema queda patente entre las siguientes líneas:


ads_dns_lookup_srv: 17 records returned in the answer section.
ads_dns_parse_rr_srv: Failed to parse RR record
ads_dns_lookup_srv: Failed to parse answer record!
get_dc_list: no servers found
get_dc_list: preferred server list: ", *"
resolve_lmhosts: Attempting lmhosts lookup for name dominio.com<0x1c>
startlmhosts: Can't open lmhosts file /opt/pware/samba/3.0.26a/lib/lmhosts. Error was No such file or directory
resolve_wins: Attempting wins lookup for name dominio.com<0x1c>
resolve_wins: WINS server resolution selected and no WINS servers listed.
name_resolve_bcast: Attempting broadcast lookup for name dominio.com<0x1c>
get_dc_list: no servers found
get_dc_list: preferred server list: "DELTA, *"
get_dc_list: returning 1 ip addresses in an ordered list
get_dc_list: 192.168.92.56:0
nmb packet from 192.168.92.56(137) header: id=14682 opcode=Query(0) response=Yes
header: flags: bcast=No rec_avail=No rec_des=No trunc=No auth=Yes
header: rcode=0 qdcount=0 ancount=1 nscount=0 arcount=0
answers: nmb_name=DOMINIO<1c> rr_type=33 rr_class=1 ttl=0
answers 0 char .DELTA hex --------------------------------
answers 10 char .D.DELTA hex
--------------------------------
answers 20 char D.DOMINIO hex --------------------------------
answers 30 char ...DOMINIO hex
--------------------------------
answers 40 char ...DOMINIO hex
--------------------------------
answers 50 char .D.DOMIN hex
--------------------------------
answers 60 char IO ...DEL hex
--------------------------------
answers 70 char TA .D.D hex
--------------------------------
answers 80 char OMINIO .D hex
--------------------------------
answers 90 char ...__MSBROWSE__. hex
--------------------------------
answers a0 char ...ADMINISTRADOR hex
--------------------------------
answers b0 char .D...kXV3..... hex
--------------------------------
answers c0 char ................ hex
--------------------------------
answers d0 char ................ hex
--------------------------------
answers e0 char ... hex 000000
rpc_dc_name: Returning DC DELTA (192.168.92.56) for domain DOMINIO
get_dc_list: preferred server list: ", *"
ads_dns_lookup_srv: 17 records returned in the answer section.
ads_dns_parse_rr_srv: Failed to parse RR record
ads_dns_lookup_srv: Failed to parse answer record!
get_dc_list: no servers found
get_dc_list: preferred server list: ", *"
resolve_lmhosts: Attempting lmhosts lookup for name dominio.com<0x1c>
startlmhosts: Can't open lmhosts file /opt/pware/samba/3.0.26a/lib/lmhosts. Error was No such file or directory
resolve_wins: Attempting wins lookup for name dominio.com<0x1c>
resolve_wins: WINS server resolution selected and no WINS servers listed.
name_resolve_bcast: Attempting broadcast lookup for name dominio.com<0x1c>
get_dc_list: no servers found
ads_connect for domain DOMINIO failed: No logon servers


- Se trata de la no-existencia del fichero /opt/pware/samba/3.0.26a/lib/lmhosts. Lo creamos, (fijarse en la formato utilizado)...

# cat /opt/pware/samba/3.0.26a/lib/lmhosts
192.168.92.56 delta delta.dominio.com
#


... e intentamos de nuevo. Se queja de la sintaxis utilizada:

resolve_lmhosts: Attempting lmhosts lookup for name dominio.com<0x1c>
getlmhostsent: too many columns in lmhosts file (obsolete syntax)


- Pues nada, dejamos el fichero a su gusto:

# cat /opt/pware/samba/3.0.26a/lib/lmhosts
192.168.92.56 delta
192.168.92.56 delta.dominio.com
#


- Ahora tras reinicir winbind obtuve en el log algo así...

get_dc_list: 192.168.92.104:389 192.168.92.56:389 192.168.92.102:389
Connected to LDAP server 192.168.92.104
time offset is 0 seconds
Found SASL mechanism GSS-SPNEGO
ads_sasl_spnego_bind: got OID=1 2 840 48018 1 2 2
ads_sasl_spnego_bind: got OID=1 2 840 113554 1 2 2
ads_sasl_spnego_bind: got OID=1 2 840 113554 1 2 2 3
ads_sasl_spnego_bind: got OID=1 3 6 1 4 1 311 2 2 10
ads_sasl_spnego_bind: got server principal name = lambda$@DOMINIO.COM
ads_krb5_mk_req: krb5_cc_get_principal failed (No credentials cache found)
ads_cleanup_expired_creds: Ticket in ccache[MEMORY:winbind_ccache] expiration Tue, 20 Nov 2007 20:32:27 NFT


... y lo que antes fallaba empezó a funcionar:

# wbinfo -g
DOMINIO\Grupo 1
...
DOMINIO\
Grupo N menos 3
DOMINIO\
Grupo N menos 2
DOMINIO\
Grupo N menos 1
DOMINIO\
Grupo N

# wbinfo -u
DOMINIO\Usuario 1
...
DOMINIO\
Usuario N menos 3
DOMINIO\
Usuario N menos 2
DOMINIO\
Usuario N menos 1


- Vamos lanzados, a ver que obtengo con getent...

# getent passwd
ksh: getent: not found.
#


WTF!?

Home del documento

Integracion Unix AIX, Samba, Winbind, SSH y dominio Windows (4/8) - Otros problemas encontrados en AIX en este punto


Home del documento

Pues parece que ni en IBM ni en mi AIX 5.3 saben nada del comando getent (que sirve para obtener listas unificadas de usuarios locales y usuarios de Active Directory)... A ver como podemos obtener alguna funcionalidad parecida.

En el momento de escibir este documento veo que el comando net (propio de la suite de Samba) ofrece multiples posibilidades. Sin haber leido de forma exhaustiva toda su documentación no me atrevo a decir que lo que voy a explicar ahora se pueda hacer de otra forma más sencilla... De momento explico mi trabajo: Me voy a /home ...

# ls -l
total 0
drwxr-x--x 2 dosys teson 256 Nov 06 13:17 dosys
drwxr-xr-x 2 user1 usr 256 Nov 13 17:37 user1
drwxr-xr-x 2 usertwo usr 256 Nov 12 11:40 usertwo
drwxr-xr-x 2 guest usr 256 Jul 06 2006 guest
drwxr-xr-x 2 usuario3 usr 256 Nov 12 10:04 usuario3
drwx------ 2 root system 256 Apr 12 2007 lost+found
drwxr-xr-x 2 userzet usr 256 Nov 05 16:31 userzet
drwxr-xr-x 2 teson teson 256 May 14 2007 teson

... y cambio el propietario y el grupo del directorio dosys

# chown "DOMINIO\smolarek" dosys
# ls -l
total 0
drwxr-x--x 2 DOMINIO\ teson 256 Nov 06 13:17 dosys
drwxr-xr-x 2 user1 usr 256 Nov 13 17:37 user1
drwxr-xr-x 2 usertwo usr 256 Nov 12 11:40 usertwo
drwxr-xr-x 2 guest usr 256 Jul 06 2006 guest
drwxr-xr-x 2 usuario3 usr 256 Nov 12 10:04 usuario3
drwx------ 2 root system 256 Apr 12 2007 lost+found
drwxr-xr-x 2 userzet usr 256 Nov 05 16:31 userzet
drwxr-xr-x 2 teson teson 256 May 14 2007 teson
# chgrp "DOMINIO\Domain master-users" dosys
# ls -l
total 0
drwxr-x--x 2 DOMINIO\ DOMINIO\ 256 Nov 06 13:17 dosys
drwxr-xr-x 2 user1 usr 256 Nov 13 17:37 user1
drwxr-xr-x 2 usertwo usr 256 Nov 12 11:40 usertwo
drwxr-xr-x 2 guest usr 256 Jul 06 2006 guest
drwxr-xr-x 2 usuario3 usr 256 Nov 12 10:04 usuario3
drwx------ 2 root system 256 Apr 12 2007 lost+found
drwxr-xr-x 2 userzet usr 256 Nov 05 16:31 userzet
drwxr-xr-x 2 teson teson 256 May 14 2007 teson


- Desde este momento se puede acceder al recurso compartido \\modsed\dosys (que nos mostrará el contenido de la ruta /home/dosys) con los permisos que indica el ls anterior (?!)

Nuevo problema: Hemos determinado un propietario y un grupo del dominio para la carpeta dosys, pero el sistema presenta la salida de un ls en un formato que nos impide ver a qué corresponden esos nombres. (Este problema no se da, p. ej., con Linux que adapta la salida de manera que nos permita ver el propietario/grupo). En nuestro caso he utilizado un método alternativo que paso a explicar:

# ls -n
total 0
drwxr-x--x 2 10000 10009 256 Nov 06 13:17 dosys
drwxr-xr-x 2 204 100 256 Nov 13 17:37 user1
drwxr-xr-x 2 208 100 256 Nov 12 11:40 usertwo
drwxr-xr-x 2 100 100 256 Jul 06 2006 guest
drwxr-xr-x 2 206 100 256 Nov 12 10:04 usuario3
drwx------ 2 0 0 256 Apr 12 2007 lost+found
drwxr-xr-x 2 205 100 256 Nov 05 16:31 userzet
drwxr-xr-x 2 300 300 256 May 14 2007 teson

... que muestra los UID y GID que maneja winbindd (y que tienen que ver con las variables globales idmap uid e idmap gid determinadas en smb.conf)


- Tomamos el UID 10000 que nos muestra el ls y preguntamos el SID asociado:

# wbinfo -U 10000
S-1-5-21-2079082624-1001472106-643713613-4753


- Con ese SID preguntamos el nombre de usuario asociado:

# wbinfo -s S-1-5-21-2079082624-1001472106-643713613-4753
DOMINIO\SMOLAREK 1


- Podemos hacer lo mismo pero con el GID en lugar del UID:

# wbinfo -G 10009
S-1-5-21-2079082624-1001472106-643713613-512
# wbinfo -s S-1-5-21-2079082624-1001472106-643713613-512
DOMINIO\Domain master-users 2


- Y hasta aquí el primer workaround. Hay que reconocer que obtener el nombre de usuario de esta forma es muy incomodo, así que he preparado cuatro pequeños scripts (uid2name, gid2name, name2uid, name2gid) que facilitan el trabajo. Para que funcionen primero debemos asegurar que el wbinfo se encuentra en el PATH

# echo $PATH
/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java14/jre/bin:/usr/java14/bin:
/opt/pware/samba/3.0.26a/bin:/opt/pware/samba/3.0.26a/sbin



- Estos son los cuatro scripts:

# cat /usr/bin/uid2name
UID=$1
SID=`wbinfo -U $UID`
wbinfo -s $SID

# cat /usr/bin/gid2name
GID=$1
SID=`wbinfo -G $GID`
wbinfo -s $SID

# cat /usr/bin/name2uid
NAME=$1
SID=`wbinfo -n "$NAME"`
wbinfo -S $SID

# cat /usr/bin/name2gid
NAME=$1
SID=`wbinfo -n "$NAME"`
wbinfo -Y $SID


- Doy permisos de ejecución a todo el mundo...

# chmod +x /usr/bin/uid2name /usr/bin/gid2name /usr/bin/name2uid /usr/bin/name2gid

... y dado que los cuatro están en el PATH...

# name2uid "DOMINIO\smolarek"
10000
# name2gid "DOMINIO\Domain master-users"
10009
# uid2name 10000
DOMINIO\SMOLAREK 1
# gid2name 10009
DOMINIO\Domain master-users 2


- Para establecer permisos en recursos compartidos mediante Samba debemos recurrir a los comandos chown y chmod. No es viable la utilización de las herramientas propias de Windows para gestionar estos permisos.

Otras posibilidades en el entorno que hemos preparado: Conocer los dominios "trusted" en los que nos movemos...

# wbinfo -m
DOMINIO

... conocer los GID de una cuenta...

# wbinfo -r "DOMINIO\smolarek"
10005
10006
10007
...
10025
10000
10001

... mediante uno de los scripts propuestos (gid2name) conocer los nombres de los grupos que nos ha mostrado el comando anterior...

# for i in `wbinfo -r "DOMINIO\smolarek"`
> do
> gid2name $i
> done
DOMINIO\
Grupo 10 2
DOMINIO\
Grupo 20 2
DOMINIO\
Grupo 30 2
...
DOMINIO\
Grupo 60 4
BUILTIN\Administrators 4
BUILTIN\Users 4

... e información completa de una cuenta de usuario.


# lsuser "DOMINIO\smolarek"
DOMINIO\smolarek id=10000 pgrp=DOMINIO\usuarios del dominio home=/home shell=/bin/ksh gecos=P Smolarek login=true su=true rlogin=true daemon=true admin=false sugroups=ALL admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=WINBIND SYSTEM=compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1 data=786432 stack=196608 core=2097151 rss=196608 nofiles=6000 roles= id=10000 pgrp=DOMINIO\usuarios del dominio home=/home shell=/bin/ksh gecos=P Smolarek shell=/bin/ksh pgrp=DOMINIO\usuarios del dominio SID=S-1-5-21-2079082624-1001472106-643713613-4753

Home del documento

Integración Unix AIX, Samba, Winbind, SSH y dominio Windows (5/8) - Winbind y SSH, compilación código fuente de Samba


Home del documento

En este apartado tratamos la integración de winbind con SSH, lo que nos va a permitir acceder a la linea de comandos del sistema con nuestra cuenta del dominio.

- Lo primero que hay que hacer es añadir a nuestro smb.conf las siguientes líneas en la sección global

template homedir = /home
template shell = /bin/ksh


- Tal como deja entrever la doc oficial de Samba aquí (en la sección "NSS Winbind on AIX") esta integración que pretendemos hacer este SO no es trivial. Es debido a que /usr/lib/security/WINBIND es un módulo que sólo provee servicios de identificación, mientras que para logar a un sistema con SSH necesitamos identificación y autenticación.

Esto nos lleva a la utilización de PAM (Pluggable Authentication Modules) que en el caso de AIX presenta de nuevo ciertas particularidades que complican el tema.


- El primer obstáculo en este punto se presenta debido a que el paquete binario que hemos utilizado no viene precompilado para uttlizar PAM:

# type smbd
smbd is /opt/pware/samba/3.0.26a/sbin/smbd
# smbd -b | grep -i PAM
#

Así que, si no disponemos de otro binario para AIX que incluya las opciones que necesitamos, no queda otro remedio que compilar el paquete a nuestro gusto (Toca descargar código fuente desde alguno de los mirrors de Samba, seguimos con la versión samba-3.0.26a)


- Segundo obstáculo (al menos en mi caso): El SO no trae compilador de C.

# type cc
cc not found.
# type gcc
gcc not found.


- A través de

http://gcc.gnu.org/install/binaries.html

llegamos a

http://www.bullfreeware.com/download/wpar_tt/

donde disponemos de un binario precompilado (gcc-3.3.2-5.aix5.3.ppc.rpm en el momento de redactar) de la versión GNU del compilador de C para AIX (Me bajé también por si acaso la libgcc-3..., pero parece que no la necesita). Instalamos mediante rpm:

# pwd
/usr/src/rpms
# ls
gcc-3.3.2-5.aix5.3.ppc.rpm libgcc-3.3.2-5.aix5.3.ppc.rpm
# rpm -ivh gcc-3.3.2-5.aix5.3.ppc.rpm
gcc ##################################################
# type cc
cc not found.
# type gcc
gcc is /usr/bin/gcc
# ln -s /usr/bin/gcc /usr/bin/cc
#


- Desgunzipado y desempaquetado:

# pwd
/usr/src
# ls samba*.gz
samba-3.0.26a.tar.gz
# gunzip samba*.gz
# ls samba*.tar
samba-3.0.26a.tar
# tar -xf samba*.tar
#


- configure ...:

# cd samba-3.0.26a
# cd source
# ./configure
...
config.status: creating include/config.h
config.status: executing rm-stdint.h commands
config.status: executing rm-stdbool.h commands
#

... pero sólo con esto no llegará a construir el módulo pam_winbind.so (necesario). Entonces lo que he hecho es:

# ./configure --with-pam --with-pam_smbpass
...
config.status: creating script/installbin.sh
config.status: creating script/uninstallbin.sh
config.status: creating include/config.h
config.status: executing rm-stdint.h commands
config.status: executing rm-stdbool.h commands


- Ahora toca make...

# make
...
nsswitch/pam_winbind.c: In function `pam_sm_chauthtok':
nsswitch/pam_winbind.c:1976: warning: passing arg 2 of `pam_get_user' from incompatible pointer type
Linking shared library bin/pam_winbind.so
Target "all" is up to date.

... y me aseguro que el módulo se ha construido:

# find . -name pam_winbind.so
./bin/pam_winbind.so
#


- Lo siguiente sería hacer make install. Atención! Esto sobreescribe la versión de Samba que pudiera haber en /usr/local/samba pero puede que esto no interese por algún motivo. Por ejemplo tras esto habría que volver a añadir la máquina al dominio.

# make install
...
#


- Hemos acabado con la compilación de Samba. Ahora probamos con la nueva versión que hemos construido. Primero linkamos /etc/smb.conf y despues arrancamos cada uno de los daemons...

# ln -s /etc/smb.conf /usr/local/samba/lib/smb.conf
# /usr/local/samba/sbin/smbd -D
# /usr/local/samba/sbin/nmbd -D
# /usr/local/samba/sbin/winbindd -B

... y tras esto volvemos a añadir la máquina al dominio:

# net rpc join -S delta.dominio.com -U administrador
Password:
Joined domain DOMINIO.
#


Home del documento