SUDO – command srvctl and others without access to the oracle user

Utilizando srvctl sin acceso al usuario oracle con comando sudo

Cuando existen diferentes politicas de seguridad y ellas implican evitar el acceso , o restringir el usuario de OS oracle nos vemos impedidos de poder utilizar el mismo para realizar tareas administrativas.

Si no se tiene conocimiento de las estructuras de usuarios y permisos en entornos unix podemos estar en un problema.

Es por ello que hoy trabajaremos en un usuario personal de OS que fue asignado , para que pueda realizar algunas tareas de administración.

Basicamente usaremos el comando sudo , que lo que hace es impersonar nuestro usuario, y correr cualquier comando autorizado como si fuese el mismo usuario oracle.

Por ejemplo:

sudo -u oracle lsnrctl status

Le hacemos creer al OS que el usuario oracle esta manejando ese comando.

Entonces debemos solcitar al administrador del OS linux , AIX , etc que en el archivo de configuracion de sudo agregue las siguientes lineas:

a) Ejecución con root del comando visudo.

# visudo

a.1) Una vez abierto el archivo recomiendo crear un grupo, en el cual participaran los encargados de la administración.

En nuestro ejemplo nuestro usuario es useros y el grupo de SUDO es USR_ORCL_ADMIN. Ahi agregamos al resto de los DBA’s

# User alias specification
User_Alias      USR_ORCL_ADMIN                      =       dvader, okenobi, c3po, r2d2, useros

b) Adhesion de las siguientes lineas con los comandos que precisamos. (recordemos que pueden ser mas de las que yo pongo en el ejemplo.)

b.1) Creación del Grupo de Comandos.

USR_ORCL_ADMIN          ALL=(oracle)                    NOPASSWD:       CMD_ORCL_ADMIN

b.2) Asignación en detalle de comandos al grupo :

Cmnd_Alias CMD_ADM_ORACLE               =     /u01/app/oracle/product/10.2.0/*/bin/rman, \
/u01/app/oracle/product/10.2.0/*/bin/srvctl, \
/u01/app/oracle/product/10.2.0/*/bin/sqlplus, \
/u01/app/oracle/product/10.2.0/*/bin/dbca, \
/u01/app/oracle/product/10.2.0/*/bin/lsnrctl, \
/u01/app/oracle/product/10.2.0/*/bin/dgmgrl, \
/u01/app/oracle/product/10.2.0/*/bin/netca, \
/u01/app/oracle/product/10.2.0/*/bin/crsctl, \
/u01/app/oracle/product/10.2.0/*/bin/crsd, \
/u01/app/oracle/product/10.2.0/*/bin/crs_getperm, \
/u01/app/oracle/product/10.2.0/*/bin/crs_profile, \
/u01/app/oracle/product/10.2.0/*/bin/crs_register, \
/u01/app/oracle/product/10.2.0/*/bin/crs_relocate, \
/u01/app/oracle/product/10.2.0/*/bin/crs_setperm, \
/u01/app/oracle/product/10.2.0/*/bin/crs_start, \
/u01/app/oracle/product/10.2.0/*/bin/crs_stat, \
/u01/app/oracle/product/10.2.0/*/bin/crs_stop, \
/u01/app/oracle/product/10.2.0/*/bin/crs_unregister

Ahora podemos utilizar el comado srvctl con permisos sudo.

Nota: Primero debemos exportar variables de cualquier home.

Status de la base con sudo.

[useros@tstdat01lx ~]$ sudo -u oracle srvctl status database -d TESTDAT
Instance TESTDAT1 is running on node tstdat01lx
Instance TESTDAT2 is running on node tstdat02lx

Stop de la base con sudo.

[useros@tstdat01lx ~]$ sudo -u oracle srvctl stop database -d TESTDAT

Status de la base con sudo.

[useros@tstdat01lx ~]$ sudo -u oracle srvctl start database -d TESTDAT

También aplica lo mismo para cualquiera de los comandos de la lista.

En el próximo articulo veremos como ejecutar estos mismos comandos , pero con usuarios de OS , sin hacer sudo.