Guía de administración de sistemas: administración de recursos y contenedores de Oracle Solaris y zonas de Oracle Solaris

Capítulo 2 Proyectos y tareas (información general)

En este capítulo se describen las funciones de proyectos y tareas de la administración de recursos de Solaris. Los proyectos y tareas se utilizan para etiquetar cargas de trabajo y separarlas entre sí.

En este capítulo, se describen los siguientes temas:

Para utilizar las funciones de proyectos y tareas, consulte el Capítulo 3Administración de proyectos y tareas.

Novedades de los comandos de control de recursos y bases de datos del proyecto para Solaris 10

En Solaris 10 se incorporan las mejoras siguientes:

Además de la información que contiene este capítulo y el Capítulo 6Controles de recursos (descripción general), consulte las siguientes páginas de comando man:

En Solaris 10 5/08, las mejoras incluyen la adición de una opción -A en el comando projmod. Consulte Comandos utilizados con proyectos y tareas.

Para ver una lista completa de las nuevas funciones de Solaris 10 y una descripción de las versiones de Solaris, consulte Novedades de Oracle Solaris 10 9/10.

Funciones de proyectos y tareas

Para optimizar la respuesta de la carga de trabajo, primero debe ser capaz de identificar las cargas de trabajo que se ejecutan en el sistema que está analizando. Esta información puede ser difícil de obtener utilizando un método orientado únicamente a procesos o usuarios. En el sistema Solaris, pueden utilizarse dos funciones adicionales para separar e identificar las cargas de trabajo: el proyecto y la tarea. El proyecto proporciona un identificador administrativo de red para el trabajo relacionado. La tarea recopila un grupo de procesos en una entidad con posibilidades de administración que representa un componente de la carga de trabajo.

Los controles especificados en la base de datos del servicio de nombres de project se configuran en el proceso, la tarea y el proyecto. Dado que los controles del proceso y la tarea se heredan de las llamadas del sistema fork y settaskid, todos los procesos y tareas que se crean en el proyecto heredan dichos controles. Para obtener información sobre estas llamadas del sistema, consulte las páginas de comando man fork(2) y settaskid(2).

Basándose en su pertenencia a un proyecto o tarea, los procesos en ejecución se pueden manipular con los comando estándar de Solaris. La función de contabilidad ampliada puede informar del uso de procesos y tareas, y etiquetar cada registro con el identificador del proyecto en cuestión. Este proceso permite correlacionar el análisis de carga de trabajo fuera de línea con la supervisión en línea. El identificador de proyecto puede compartirse en varios equipos mediante la base de datos de servicio de nombres de project. De este modo, el consumo de recursos de las cargas de trabajo relacionadas que se ejecutan o abarcan varios equipos se puede analizar en última instancia en todos los equipos.

Identificadores de proyecto

El identificador de proyecto es un identificador alternativo que se utiliza para identificar el trabajo relacionado. El identificador de proyecto se puede considerar una etiqueta de carga de trabajo equivalente a los identificadores de usuario y grupo. Un usuario o grupo puede pertenecer a un proyecto o más. Estos proyectos pueden utilizarse para representar las cargas de trabajo en las que el usuario (o el grupo de usuarios) tiene permiso para participar. Esta pertenencia al grupo puede constituir la base del contracargo que se basa, por ejemplo, en el uso o las asignaciones de recursos iniciales. Aunque debe asignarse un usuario a un proyecto predeterminado, el proceso que inicia el usuario se puede asociar con cualquier proyecto del que es miembro el usuario.

Determinación de un proyecto predeterminado del usuario

Para iniciar sesión en el sistema, un usuario debe tener asignado un proyecto predeterminado. Un usuario es automáticamente miembro del proyecto predeterminado, aunque no se encuentre en la lista de usuarios o grupos del proyecto.

Dado que cada proceso del sistema procesa la pertenencia a un grupo del proyecto, se necesita un algoritmo para asignar un proyecto predeterminado al proceso de conexión u otro proceso inicial. El algoritmo se documenta en la página del comando man getprojent(3C). El sistema sigue una serie de pasos para determinar el proyecto predeterminado. Si no se encuentra ningún proyecto predeterminado, se deniega la conexión del usuario o su solicitud para iniciar un proceso.

El sistema sigue estos pasos de forma secuencial para determinar un proyecto predeterminado del usuario:

  1. Si el usuario tiene una entrada con un atributo project definido en la base de datos de atributos de usuario extendida /etc/user_attr, el valor del atributo project es el proyecto predeterminado. Consulte la página del comando man user_attr(4).

  2. Si hay un proyecto con el nombre user.ID_usuario en la base de datos project, dicho proyecto es el predeterminado. Consulte la página del comando man project(4) para obtener más información.

  3. Si hay un proyecto con el nombre group.nombre_grupo en la base de datos project, en el que nombre_grupo es el nombre del grupo predeterminado para el usuario, tal como se especifica en el archivo passwd, dicho proyecto es el predeterminado. Para obtener información sobre el archivo passwd, consulte la página del comando man passwd(4).

  4. Si el proyecto especial default está presente en la base de datos project, dicho proyecto es el predeterminado.

Esta lógica la proporciona la función de biblioteca getdefaultproj. () Consulte la página del comando man getprojent(3PROJECT) para obtener más información.

Definición de atributos de usuario con los comandos useradd, usermod y passmgmt

Puede utilizar los siguientes comandos con la opción -K y un par clave=valor para definir los atributos de usuario en los archivos locales:

passmgmt

Modificar información del usuario

useradd

Definir proyecto predeterminado para el usuario

usermod

Modificar información del usuario

Los archivos locales pueden incluir:

Si se utiliza un servicio de nombres de red como NIS para complementar el archivo local con entradas adicionales, estos comandos no pueden cambiar la información proporcionada por el servicio de nombres de red. Sin embargo, los comandos comprueban lo siguiente en la base de datos de servicio de nombres externa:

Para obtener más información, consulte las páginas de comando man passmgmt(1M), useradd(1M), usermod(1M), y user_attr(4).

Base de datos project

Puede almacenar los datos de proyecto en un archivo local, en el mapa de proyecto del Servicio de información de la red (NIS) o en un servicio de directorio de protocolo ligero de acceso a directorios (LDAP). El archivo /etc/project o el servicio de nombres lo utilizan durante la conexión todas las solicitudes de administración de cuentas del módulo de autenticación enchufable (PAM) para vincular un usuario a un proyecto predeterminado.


Nota –

Las actualizaciones de las entradas de la base de datos del proyecto, tanto si son para el archivo /etc/project como para una representación de la base de datos en un servicio de nombres de red, no se aplican a los proyectos activos. Las actualizaciones se aplican a las nuevas tareas que se unen al proyecto cuando se utilizan los comandos login o newtask. Para obtener más información, consulte las páginas de comando man login(1) y newtask(1).


Subsistema PAM

Las operaciones que cambian o definen identidades incluyen el registro en el sistema, la invocación de un comando rcp o rsh, utilizando ftp o su. Cuando una operación implica cambiar o definir una identidad, se utiliza un conjunto de módulos configurables para proporcionar autenticación y administración de cuentas, credenciales y sesiones.

El módulo PAM de administración de cuentas para los proyectos se documenta en la página del comando man pam_projects(5) Para ver una descripción general de PAM, consulte el Capítulo 17, Using PAM de System Administration Guide: Security Services.

Configuración de servicios de nombres

La administración de recursos admite las bases de datos project del servicio de nombres. La ubicación donde se almacena la base de datos project se define en el archivo /etc/nsswitch.conf. De modo predeterminado, files aparece en primer lugar, pero los orígenes pueden enumerarse en cualquier orden.


project: files [nis] [ldap]

Si se enumera más de un origen para la información del proyecto, el archivo nsswitch.conf dirige la rutina para empezar a buscar la información en el primer origen enumerado y luego buscar los orígenes subsiguientes.

Para obtener más información sobre el archivo /etc/nsswitch.conf, consulte el Capítulo 2, The Name Service Switch (Overview) de System Administration Guide: Naming and Directory Services (DNS, NIS, and LDAP) y nsswitch.conf(4).

Formato de archivo /etc/project local

Si selecciona files como origen de la base de datos project en el archivo nsswitch.conf, el proceso de inicio de sesión busca el archivo /etc/project para obtener información del proyecto. Consulte las páginas del comando man projects(1) y project(4) para obtener información adicional.

El archivo project contiene una entrada de una línea con el siguiente formato para cada proyecto reconocido por el sistema:


projname:projid:comment:user-list:group-list:attributes

Los campos se definen del modo siguiente:

nombre_proyecto

Nombre del proyecto. El nombre debe ser una cadena que esté compuesta por caracteres alfanuméricos, guiones bajos (_), guiones (-) y puntos (.). El punto, que queda reservado para los proyectos que tengan un significado especial para el sistema operativo, sólo se puede utilizar en los nombres de proyectos predeterminados para usuarios. projname no puede contener dos puntos (: ) o caracteres de línea nueva.

ID_proyecto

El ID numérico exclusivo del proyecto (PROJID) en el sistema. El valor máximo del campo projid es UID_MAX (2147483647).

comentario

Descripción del proyecto.

lista_usuario

Lista separada por comas de los usuarios que se permiten en el proyecto.

En este campo pueden utilizarse comodines. El símbolo de asterisco (*) permite a los usuarios unirse al proyecto. Un signo de exclamación de cierre seguido de un asterisco (!*) excluye del proyecto a todos los usuarios. Un signo de exclamación (!) seguido de un nombre de usuario excluye del proyecto al usuario especificado.

lista_grupos

Lista separada por comas de los grupos de usuarios que se permiten en el proyecto.

En este campo pueden utilizarse comodines. El símbolo de asterisco (*) permite a todos los grupos unirse al proyecto. Un signo de exclamación de cierre seguido de un asterisco (!*) excluye del proyecto a todos los grupos. Un signo de exclamación (!) seguido de un nombre de grupo excluye del proyecto al grupo especificado.

atributos

Una lista de pares de nombre-valor separados por puntos y coma, como los controles de recursos (consulte el Capítulo 6Controles de recursos (descripción general)). nombre es una cadena arbitraria que especifica el atributo relacionado con el objeto y valor es el valor opcional de dicho atributo.


name[=value]

En el par de nombre-valor, los nombres se restringen a letras, dígitos, subrayados y puntos. Un punto suele utilizarse como separador entre las categorías y subcategorías del control de recursos (rctl). El primer carácter de un nombre de atributo debe ser una letra. El nombre distingue entre mayúsculas y minúsculas.

Los valores pueden estructurarse utilizando comas y paréntesis para establecer el orden de precedencia.

El símbolo de punto y coma se utiliza para separar pares de nombre-valor. No se puede utilizar un punto y coma en una definición de valor. El símbolo de dos puntos se utiliza para separar campos de proyecto. No se puede utilizar el símbolo de dos puntos en una definición de valor.


Nota –

Las rutinas que leen este archivo se detienen si detectan una entrada mal creada. Cualquier proyecto que se especifique después de la entrada incorrecta no podrá asignarse.


Este ejemplo muestra el archivo /etc/project predeterminado:


system:0:System:::
user.root:1:Super-User:::
noproject:2:No Project:::
default:3::::
group.staff:10::::

Este ejemplo muestra el archivo /etc/project predeterminado con entradas de proyecto añadidas al final:


system:0:System:::
user.root:1:Super-User:::
noproject:2:No Project:::
default:3::::
group.staff:10::::
user.ml:2424:Lyle Personal:::
booksite:4113:Book Auction Project:ml,mp,jtd,kjh::

También puede añadir controles de recursos y atributos al archivo /etc/project:

Configuración del proyecto para NIS

Si utiliza NIS, puede especificar en el archivo /etc/nsswitch.conf la búsqueda de las asignaciones de proyecto NIS para los proyectos:


project: nis files 

Las asignaciones NIS, tanto project.byname como project.bynumber, tienen la misma forma que el archivo /etc/project:


projname:projid:comment:user-list:group-list:attributes

Para más información, consulte el Capítulo 4, Network Information Service (NIS) (Overview) de System Administration Guide: Naming and Directory Services (DNS, NIS, and LDAP).

Configuración del proyecto para LDAP

Si utiliza LDAP, puede especificar en el archivo /etc/nsswitch.conf la búsqueda de bases de datos LDAP project para los proyectos:


project: ldap files

Para obtener más información acerca de LDAP, consulte el Capítulo 8, Introduction to LDAP Naming Services (Overview/Reference) de System Administration Guide: Naming and Directory Services (DNS, NIS, and LDAP). Para obtener más información sobre el esquema para las entradas de proyecto en una base de datos LDAP, consulte Solaris Schemas de System Administration Guide: Naming and Directory Services (DNS, NIS, and LDAP).

Identificadores de tareas

Cada inicio de sesión correcto en un proyecto crea una nueva tarea que contiene el proceso de inicio de sesión. La tarea es un proceso colectivo que representa un conjunto de trabajos en el tiempo. Una tarea también puede visualizarse como componente de carga de trabajo. A cada tarea se asigna automáticamente un ID.

Cada proceso es miembro de una tarea, y cada tarea se asocia con un proyecto.

Figura 2–1 Árbol de proyectos y tareas

El diagrama muestra un proyecto con tres tareas, que a su vez incluyen de dos a cuatro procesos.

Todas las operaciones de los grupos de procesos, como la entrega de señales, también se admiten para las tareas. Asimismo, puede vincular una tarea a un conjunto de procesadores y definir una prioridad de planificación y una clase para una tarea, lo que modifica todos los procesos actuales y subsiguientes de la tarea.

Se crea una tarea siempre que se incorpora un proyecto. Los siguientes comandos, acciones y funciones crean tareas:

Puede crear una tarea finalizada siguiendo uno de estos métodos. Cualquier intento adicional de crear tareas fallará.

Para más información, consulte las páginas del comando man login(1), newtask(1), cron(1M), su(1M) y setproject(3PROJECT).

La función de contabilidad ampliada puede proporcionar datos de cuentas para los procesos. Los datos se añaden en el nivel de la tarea.

Comandos utilizados con proyectos y tareas

Los comandos que se incluyen en la tabla siguiente proporcionan la interfaz administrativa principal para las funciones de proyectos y tareas.

Referencia de página del comando man 

Descripción 

projects(1)

Muestra la pertenencia de los usuarios a un grupo del proyecto. Enumera los proyectos de la base de datos project. Imprime información sobre determinados proyectos. Si no se proporciona ningún nombre de proyecto, se muestra la información para todos los proyectos. Utilice el comando projects con la opción -l para imprimir un listado detallado.

newtask(1)

Ejecuta el comando especificado o el shell predeterminado del usuario, y coloca el comando de ejecución en una nueva tarea que pertenece al proyecto especificado. newtask también puede utilizarse para cambiar la vinculación de la tarea y el proyecto para un proceso en ejecución. Utilícela con la opción -F para crear una tarea finalizada.

passmgmt(1M)

Actualiza la información en los archivos de contraseña. Utilícela con la opción -K clave=valor para añadir o sustituir atributos de usuario en los archivos locales.

projadd(1M)

Añade una entrada de proyecto nueva al archivo /etc/project. El comando projadd crea una entrada de proyecto sólo en el sistema local. projadd no puede cambiar la información que proporciona el servicio de nombres de la red.

Se puede utilizar para editar archivos de proyecto que no sean el predeterminado, /etc/project. Proporciona comprobación de sintaxis para el archivo project. Valida y edita los atributos del proyecto. Admite valores a escala.

projmod(1M)

Modifica la información para un proyecto en el sistema local. projmod no puede cambiar la información que proporciona el servicio de nombres de la red. Sin embargo, el comando sí que verifica la exclusividad del nombre y el ID del proyecto con el servicio de nombres externo.

Se puede utilizar para editar archivos de proyecto que no sean el predeterminado, /etc/project. Proporciona comprobación de sintaxis para el archivo project. Valida y edita los atributos del proyecto. Se puede utilizar para añadir un atributo nuevo, añadir valores a un atributo o eliminar un atributo. Admite valores a escala.

A partir de Solaris 10 5/08, se pueden utilizar con la opción -A para aplicar en el proyecto activo los valores de control de recurso detectados en la base de datos de proyectos. Se eliminan los valores ya configurados que no coincidan con los valores definidos en el archivo project, por ejemplo los valores establecidos manualmente con el comando prctl.

projdel(1M)

Elimina un proyecto del sistema local. projdel no puede cambiar la información que proporciona el servicio de nombres de la red.

useradd(1M)

Añade definiciones de proyecto predeterminadas a los archivos locales. Utilícela con la opción -K clave=valor para añadir o sustituir atributos de usuario.

userdel(1M)

Elimina una cuenta de usuario del archivo local. 

usermod(1M)

Modifica la información de inicio de sesión de un usuario en el sistema. Utilícela con la opción -K clave=valor para añadir o sustituir atributos de usuario.