Como en casi todo lenguaje de programación, puede utilizar funciones para agrupar trozos de código de una manera más lógica, o practicar el divino arte de la recursión.
Declarar una función es sólo cuestión de escribir function mi_func { mi_código }.
Llamar a la función es como llamar a otro programa, sólo hay que escribir su nombre.
8.1 Ejemplo de funciones
#!/bin/bash
function salir {
exit
}
function hola {
echo ¡Hola!
}
hola
salir
echo petete
Las líneas 2-4 contienen la función ‘salir’. Las líneas 5-7 contienen la función ‘hola’. Si no está completamente seguro de lo que hace este script, por favor, ¡pruébelo!.
Tenga en cuenta que una función no necesita que sea declarada en un orden específico.
Cuando ejecute el script se dará cuenta de que: primero se llama a la función ‘hola’, luego a la función ‘quit’, y el programa nunca llega a la línea 10.
8.2 Ejemplo de funciones con parámetros
#!/bin/bash
function salir {
exit
}
function e {
echo $1
}
e Hola
e Mundo
salir
echo petete
Este script es casi idéntico al anterior. La diferencia principal es la función ‘e’. Esta función imprime el primer argumento que recibe. Los argumentos, dentro de las funciones, son tratados de la misma manera que los argumentos suministrados al script.
Podemos crear un fichero ejecutable llamado parametros.sh y copiar lo siguiente:
#!/bin/bash
echo $1
Si invocamos el script con el siguiente comando:
parametros.sh primero
el resultado sería:
primero
Como vemos, el argumento “primero” ha quedado almacenado en la variable $1 (sí, con bash se pueden usar variables ¿no es maravilloso?).
El siguiente comando:
parametros.sh primero segundo
Nos mostrará lo mismo que antes:
primero
Los argumentos en bash se separan por un espacio, de tal forma “segundo” sería el segundo argumento. Para recogerlo y mostrarlo tendríamos que modificar nuestro script:
#!/bin/bash
echo $1
echo $2
Para recoger el tercer argumento usaríamos $3 y así sucesivamente.
Existe una variable, $#, que se crea automáticamente que contiene el número de argumentos que se han pasado al script:
#!/bin/bash
echo "Total argumentos: $#"
al llamarlo con:
parametros.sh primero segundo
mostrará:
Total argumentos: 2
También se crea automáticamente otra variable, $@, que es un array que contiene todos los argumentos. Si hacemos:
#!/bin/bash
echo $@
nos mostará todos los argumentos:
parametros.sh primero segundo
resultado:
primero segundo
Ya veremos en otra entrega cómo trabajar con este y otros arrays.
Los parámetros especiales
Estas también son variables reservadas que permite en algunos casos efectuar operaciones sobre los mismos parámetros.
Estos parámetros son los siguientes:
$0 Contiene el nombre del script tal como es invocado
$* El conjunto de todos los parámetros en un solo argumento
$@ El conjunto de argumentos, un argumento por parámetro
$# El número de parámetros pasados al script
$? El código de retorno del último comando
$$ El PID del shell que ejecuta el script
$! El PID del último proceso ejecutado en segundo plano
¿Qué utilidad tiene esto de los argumentos?
Los argumentos dan una gran flexibilidad a nuestros scripts ya que mediante ellos podemos indicar con qué fichero o directorio queremos trabajar o especificar un usuario por ejemplo.
Linux es un sistema multiusuario, por lo tanto, la tarea de añadir, modificar, eliminar y en general administrar usuarios se convierte en algo no solo rutinario, sino importante, además de ser un elemento de seguridad que mal administrado o tomado a la ligera, puede convertirse en un enorme hoyo de seguridad. En este manual aprenderás todo lo necesario para administrar completamente tus usuarios en GNU/Linux.
Tipos de usuarios
Los usuarios en Unix/Linux se identifican por un número único de usuario, User ID, UID. Y pertenecen a un grupo principal de usuario, identificado también por un número único de grupo, Group ID, GID. El usuario puede pertenecer a más grupos además del principal.
Aunque sujeto a cierta polémica, es posible identificar tres tipos de usuarios en Linux:
Usuario root
También llamado superusuario o administrador.
Su UID (User ID) es 0 (cero).
Es la única cuenta de usuario con privilegios sobre todo el sistema.
Acceso total a todos los archivos y directorios con independencia de propietarios y permisos.
Controla la administración de cuentas de usuarios.
Ejecuta tareas de mantenimiento del sistema.
Puede detener el sistema.
Instala software en el sistema.
Puede modificar o reconfigurar el kernel, controladores, etc.
No tiene todos los privilegios del usuario root, pero dependiendo de la cuenta asumen distintos privilegios de root.
Lo anterior para proteger al sistema de posibles formas de vulnerar la seguridad.
No tienen contraseñas pues son cuentas que no están diseñadas para iniciar sesiones con ellas.
También se les conoce como cuentas de «no inicio de sesión» (nologin).
Se crean (generalmente) automáticamente al momento de la instalación de Linux o de la aplicación.
Generalmente se les asigna un UID entre 1 y 100 (definifo en /etc/login.defs)
Usuarios normales
Se usan para usuarios individuales.
Cada usuario dispone de un directorio de trabajo, ubicado generalmente en /home.
Cada usuario puede personalizar su entorno de trabajo.
Tienen solo privilegios completos en su directorio de trabajo o HOME.
Por seguridad, es siempre mejor trabajar como un usuario normal en vez del usuario root, y cuando se requiera hacer uso de comandos solo de root, utilizar el comando .
En las distros actuales de Linux se les asigna generalmente un UID superior a 500.
/etc/passwd
Cualquiera que sea el tipo de usuario, todas las cuentas se encuentran definidas en el archivo de configuración ‘‘, ubicado dentro del directorio . Este archivo es de texto tipo ASCII, se crea al momento de la instalación con el usuario root y las cuentas especiales, más las cuentas de usuarios normales que se hayan indicado al momento de la instalación.
El archivo contiene una línea para cada usuario, similar a las siguientes:
La información de cada usuario está dividida en 7 campos delimitados cada uno por ‘:’ dos puntos.
/etc/passwd
Campo 1
Es el nombre del usuario, identificador de inicio de sesión (login). Tiene que ser único.
Campo 2
La ‘x’ indica la contraseña encriptada del usuario, además también indica que se está haciendo uso del archivo , si no se hace uso de este archivo, este campo se vería algo así como: ‘‘.
Campo 3
Número de identificación del usuario (UID). Tiene que ser único. 0 para root, generalmente las cuentas o usuarios especiales se numeran del 1 al 100 y las de usuario normal del 101 en delante, en las distribuciones mas recientes esta numeración comienza a partir del 500.
Campo 4
Numeración de identificación del grupo (GID). El que aparece es el número de grupo principal del usuario, pero puede pertenecer a otros, esto se configura en .
Campo 5
Comentarios o el nombre completo del usuario.
Campo 6
Directorio de trabajo (Home) donde se sitúa al usuario después del inicio de sesión.
Campo 7
Shell que va a utilizar el usuario de forma predeterminada.
/etc/shadow
Anteriormente (en sistemas Unix) las contraseñas cifradas se almacenaban en el mismo El problema es que ‘passwd’ es un archivo que puede ser leído por cualquier usuario del sistema, aunque solo puede ser modificado por root. Con cualquier computadora potente de hoy en día, un buen programa de descifrado de contraseñas y paciencia es posible «crackear» contraseñas débiles (por eso la conveniencia de cambiar periódicamente la contraseña de root y de otras cuentas importantes). El archivo ‘shadow’, resuelve el problema ya que solo puede ser leido por root. Considérese a ‘shadow’ como una extensión de ‘passwd’ ya que no solo almacena la contraseña encriptada, sino que tiene otros campos de control de contraseñas.
El archivo contiene una línea para cada usuario, similar a las siguientes:
La información de cada usuario está dividida en 9 campos delimitados cada uno por ‘:’ dos puntos.
/etc/shadow
Campo 1
Nombre de la cuenta del usuario.
Campo 2
Contraseña cifrada o encriptada, un ‘*’ indica cuenta de ‘nologin’.
Campo 3
Días transcurridos desde el 1/ene/1970 hasta la fecha en que la contraseña fue cambiada por última vez.
Campo 4
Número de días que deben transcurrir hasta que la contraseña se pueda volver a cambiar.
Campo 5
Número de días tras los cuales hay que cambiar la contraseña. (-1 significa nunca). A partir de este dato se obtiene la fecha de expiración de la contraseña.
Campo 6
Número de días antes de la expiración de la contraseña en que se le avisará al usuario al inicio de la sesión.
Campo 7
Días después de la expiración en que la contraseña se inhabilitara, si es que no se cambio.
Campo 8
Fecha de caducidad de la cuenta. Se expresa en días transcurridos desde el 1/Enero/1970 (epoch).
Campo 9
Reservado.
/etc/group
Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del sistema, contiene una línea para cada usuario con tres o cuatro campos por usuario:
El campo 2 ‘x’ indica la contraseña del grupo, que no existe, si hubiera se mostraría un ‘hash’ encriptado.
El campo 3 es el Group ID (GID) o identificación del grupo.
El campo 4 es opcional e indica la lista de grupos a los que pertenece el usuario
Actualmente al crear al usuario con se crea también automáticamente su grupo principal de trabajo GID, con el mismo nombre del usuario. Es decir, si se añade el usuario ‘sergio’ también se crea el /etc/group el grupo ‘sergio’. Aun asi, existen comandos de administración de grupos que se explicarán más adelante.
pwconv y pwunconv
El comportamiento por defecto de todas las distros modernas de GNU/Linux es activar la protección extendida del archivo , que (se insiste) oculta efectivamente el ‘hash’ cifrado de la contraseña de .
Pero si por alguna bizarra y extraña situación de compatibilidad se requiriera tener las contraseñas cifradas en el mismo archivo de se usaría el comando :
#> more /etc/passwd
root:x:0:0:root:/root:/bin/bash
sergio:x:501:500:Sergio González:/home/sergio:/bin/bash
...
#> more /etc/shadow
root:ghy675gjuXCc12r5gt78uuu6R:10568:0:99999:7:7:-1::
sergio:rfgf886DG778sDFFDRRu78asd:10568:0:-1:9:-1:-1::
#> pwunconv
#> more /etc/passwd
root:ghy675gjuXCc12r5gt78uuu6R:0:0:root:/root:/bin/bash
sergio:rfgf886DG778sDFFDRRu78asd:501:500:Sergio González:/home/sergio:/bin/bash
...
#> more /etc/shadow
/etc/shadow: No such file or directory
En cualquier momento es posible reactivar la protección de shadow:
Se vuelve a crear el archivo , además nótese los permisos tan restrictivos (400) que tiene este archivo, haciendo sumamente difícil (no me gusta usar imposible, ya que en informática parece ser que los imposibles ‘casi’ no existen) que cualquier usuario que no sea root lo lea.
/etc/login.defs
En el archivo de configuración están definidas las variables que controlan los aspectos de la creación de usuarios y de los campos de usadas por defecto. Algunos de los aspectos que controlan estas variables son:
Número máximo de días que una contraseña es válida PASS_MAX_DAYS
El número mínimo de caracteres en la contraseña PASS_MIN_LEN
Valor mínimo para usuarios normales cuando se usa UID_MIN
El valor por defecto UMASK
Si el comando debe crear el directorio home por defecto CREATE_HOME
Basta con leer este archivo para conocer el resto de las variables que son autodescriptivas y ajustarlas al gusto. Recúerdese que se usaran principalmente al momento de crear o modificar usuarios con los comandos y que en breve se explicaran.
Añadir usuarios con
o es el comando que permite añadir nuevos usuarios al sistema desde la línea de comandos. Sus opciones más comunes o importantes son las siguientes:
-c añade un comentario al momento de crear al usuario, campo 5 de
-d directorio de trabajo o home del usuario, campo 6 de
-e fecha de expiración de la cuenta, formato AAAA-MM-DD, campo 8 de
-g número de grupo principal del usuario (GID), campo 4 de
-G otros grupos a los que puede pertenecer el usuario, separados por comas.
-r crea una cuenta del sistema o especial, su UID será menor al definido en en la variable UID_MIN, además no se crea el directorio de inicio.
-s shell por defecto del usuario cuando ingrese al sistema. Si no se especifica, bash, es el que queda establecido.
-u UID del usuario, si no se indica esta opción, automáticamente se establece el siguiente número disponible a partir del último usuario creado.
Ahora bien, realmente no hay prácticamente necesidad de indicar ninguna opción ya que si hacemos lo siguiente:
#> useradd juan
Se creará el usuario y su grupo, asi como las entradas correspondientes en /etc/passwd, /etc/shadow y /etc/group. También se creará el directorio de inicio o de trabajo: /home/juan y los archivos de configuración que van dentro de este directorio y que más adelante se detallan.
Las fechas de expiración de contraseña, etc. Quedan lo más amplias posibles asi que no hay problema que la cuenta caduque, asi que prácticamente lo único que faltaría sería añadir la contraseña del usuario y algún comentario o identificación de la cuenta. Como añadir el password o contraseña se estudiara en un momento y viendo las opciones con ‘-c’ es posible establecer el comentario, campo 5 de /etc/passwd:
#> useradd -c "Juan Perez Hernandez" juan
Siempre el nombre del usuario es el último parámetro del comando. Asi por ejemplo, si queremos salirnos del default, podemos establecer algo como lo siguiente:
Con lo anterior estamos cambiando su directorio de inicio, su shell por defautl sera csh y su UID será el 800 en vez de que el sistema tome el siguiente número disponible.
Modificar usuarios con
Como su nombre lo indica, usermod permite modificar o actualizar un usuario o cuenta ya existente. Sus opciones más comunes o importantes son las siguientes:
-c añade o modifica el comentario, campo 5 de
-d modifica el directorio de trabajo o home del usuario, campo 6 de
-e cambia o establece la fecha de expiración de la cuenta, formato AAAA-MM-DD, campo 8 de
-g cambia el número de grupo principal del usuario (GID), campo 4 de
-G establece otros grupos a los que puede pertenecer el usuario, separados por comas.
-l cambia el login o nombre del usuario, campo 1 de y de
-L bloque la cuenta del usuario, no permitiendolé que ingrese al sistema. No borra ni cambia nada del usuario, solo lo deshabilita.
-s cambia el shell por defecto del usuario cuando ingrese al sistema.
-u cambia el UID del usuario.
-U desbloquea una cuenta previamente bloqueada con la opción -L.
Si quiseramos cambiar el nombre de usuario de ‘sergio’ a ‘sego’:
#> usermod -l sego sergio
Casi seguro también cambiará el nombre del directorio de inicio o HOME en /home, pero si no fuera así, entonces:
#> usermod -d /home/sego sego
Otros cambios o modificaciones en la misma cuenta:
Lo anterior modifica el comentario de la cuenta, su shell por defecto que ahora sera Korn shell y su grupo principal de usuario quedó establecido al GID 505 y todo esto se aplicó al usuario ‘sego’ que como se observa debe ser el último argumento del comando.
El usuario ‘sego’ salió de vacaciones y nos aseguramos de que nadie use su cuenta:
#> usermod -L sego
Eliminar usuarios con userdel
Como su nombre lo indica, userdel elimina una cuenta del sistema, userdel puede ser invocado de tres maneras:
#> userdel sergio
Sin opciones elimina la cuenta del usuario de y de , pero no elimina su directorio de trabajo ni archivos contenidos en el mismo, esta es la mejor opción, ya que elimina la cuenta pero no la información de la misma.
#> userdel -r sergio
Al igual que lo anterior elimina la cuenta totalmente, pero con la opción -r además elimina su directorio de trabajo y archivos y directorios contenidos en el mismo, asi como su buzón de correo, si es que estuvieran configuradas las opciones de correo. La cuenta no se podrá eliminar si el usuario esta logueado o en el sistema al momento de ejecutar el comando.
#> userdel -f sergio
La opción -f es igual que la opción -r, elimina todo lo del usuario, cuenta, directorios y archivos del usuario, pero además lo hace sin importar si el usuario esta actualmente en el sistema trabajando. Es una opción muy radical, además de que podría causar inestabilidad en el sistema, asi que hay que usarla solo en casos muy extremos.
Cambiar contraseñas con
Crear al usuario con es el primer paso, el segundo es asignarle una contraseña a ese usuario. Esto se logra con el comando que permitirá ingresar la contraseña y su verificación:
#> passwd sergio
Changing password for user prueba.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
#>
El usuario es el único que puede indicar el cambio o asignación de contraseñas de cualquier usuario. Usuarios normales pueden cambiar su contraeña en cualquier momento con tan solo invocar sin argumentos, y podrá de esta manera cambiar la contraseña cuantas veces lo requiera.
tiene integrado validación de contraseñas comunes, cortas, de diccionario, etc. asi que si por ejemplo intento como usuario normal cambiar mi contraseña a ‘qwerty’ el sistema me mostrará lo siguiente:
$> passwd
Changing password for user prueba.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
$>
Nótese que al ingresar ‘qwerty’ como contraseña se detectó que es una secuencia ya conocida como contraseña y me manda la advertencia: «BAD PASSWORD: it is based on a dictionary word», sin embargo me permite continuar, al ingresar la verificación. Es decir, passwd avisa de malas o débiles contraseñas pero permite establecerlas si realmente se desea.
Resumiendo entonces, se podría decir que todo este tutorial se reduce a dos líneas de comandos para crear y dejar listo para trabajar a un usuario en Linux:
#> useradd ana
#> passwd ana
Se crea el usuario ‘ana’, hace todo el trabajo de establecer el shell, directorio de inicio, copiar archivos iniciales de configuración de la cuenta, etc. y después establece la contraseña. Asi de simple.
tiene varias opciones que permiten bloquear la cuenta ‘-l’, desbloquearla ‘-u’, y varias opciones más que controlan la vigencia de la contraseña, es decir, es otro modo de establecer los valores de la cuenta en. Para más información consulta las páginas del manual:
$> man passwd
Archivos de configuración
Los usuarios normales y en sus directorios de inicio tienen varios archivos que comienzan con «.» es decir están ocultos. Varían mucho dependiendo de la distribución de Linux que se tenga, pero seguramente se encontrarán los siguientes o similares:
#> ls -la
drwx------ 2 ana ana 4096 jul 9 09:54 .
drwxr-xr-x 7 root root 4096 jul 9 09:54 ..
-rw-r--r-- 1 ana ana 24 jul 9 09:54 .bash_logout
-rw-r--r-- 1 ana ana 191 jul 9 09:54 .bash_profile
-rw-r--r-- 1 ana ana 124 jul 9 09:54 .bashrc
aquí podremos indicar alias, variables, configuración del entorno, etc. que deseamos iniciar al principio de la sesión.
aquí podremos indicar acciones, programas, scripts, etc., que deseemos ejecutar al salirnos de la sesión.
es igual que .bash_profile, se ejecuta al principio de la sesión, tradicionalmente en este archivo se indican los programas o scripts a ejecutar, a diferencia de .bash_profile que configura el entorno.
Lo anterior aplica para terminales de texto 100%.
Si deseamos configurar archivos de inicio o de salida de la sesión gráfica entonces, en este caso, hay que buscar en el menú del ambiente gráfico algún programa gráfico que permita manipular que programas se deben arrancar al iniciar la sesión en modo gráfico. En la mayoría de las distribuciones existe un programa llamado «sesiones» o «sessions», generalmente esta ubicado dentro del menú de preferencias. En este programa es posible establecer programas o scripts que arranquen junto con el ambiente gráfico, sería equivalente a manipular ‘bashrc’.
Además Linux permite que el usuario decida que tipo de entorno Xwindow a utilizar, ya sea algún entorno de escritorio como KDE o Gnome o algún manejador de ventanas como Xfce o Twm. Dentro del Home del usuario, se creará un directorio o archivo escondido «.» , por ejemplo ‘.gnome’ o ‘.kde’ donde vendrá la configuración personalizada del usuario para ese entorno. Dentro de este directorio suele haber varios directorios y archivos de configuración. Estos son sumamente variados dependiendo de la distribución y del entorno. No es recomendable modificar manualmente (aunque es perfectamente posible) estos archivos, es mucho mas sencillo modificar vía las interfases gráficas que permiten cambiar el fondo, protector de pantalla, estilos de ventanas, tamaños de letras, etc.
Resumen de comandos y archivos de administración de usuarios
Existen varios comandos más que se usan muy poco en la administración de usuarios, que sin embargo permiten administrar aun más a detalle a tus usuarios de Linux. Algunos de estos comandos permiten hacer lo mismo que los comandos previamente vistos, solo que de otra manera, y otros como ‘chpasswd’ y ‘newusers’ resultan muy útiles y prácticos cuando de dar de alta a múltiples usuarios se trata.
A continuación te presento un resumen de los comandos y archivos vistos en este tutorial más otros que un poco de investigación
Comandos de administración y control de usuarios
adduser
Ver useradd
chage
Permite cambiar o establecer parámetros de las fechas de control de la contraseña.
chpasswd
Actualiza o establece contraseñas en modo batch, múltiples usuarios a la vez. (se usa junto con newusers)
id
Muestra la identidad del usuario (UID) y los grupos a los que pertence.
gpasswd
Administra las contraseñas de grupos (/etc/group y /etc/gshadow).
groupadd
Añade grupos al sistema (/etc/group).
groupdel
Elimina grupos del sistema.
groupmod
Modifica grupos del sistema.
groups
Muestra los grupos a los que pertence el usuario.
newusers
Actualiza o crea usuarios en modo batch, múltiples usuarios a la vez. (se usa junto chpasswd)
pwconv
Establece la protección shadow (/etc/shadow) al archivo /etc/passwd.
pwunconv
Elimina la protección shadow (/etc/shadow) al archivo /etc/passwd.
useradd
Añade usuarios al sistema (/etc/passwd).
userdel
Elimina usuarios del sistema.
usermod
Modifica usuarios.
Archivos de administración y control de usuarios
.bash_logout
Se ejecuta cuando el usuario abandona la sesión.
.bash_profile
Se ejecuta cuando el usuario inicia la sesión.
.bashrc
Se ejecuta cuando el usuario inicia la sesión.
/etc/group
Usuarios y sus grupos.
/etc/gshadow
Contraseñas encriptadas de los grupos.
/etc/login.defs
Variables que controlan los aspectos de la creación de usuarios.
/etc/passwd
Usuarios del sistema.
/etc/shadow
Contraseñas encriptadas y control de fechas de usuarios del sistema.
Ambientes gráficos y Web
Si usas Linux con Xwindow (gnome, kde, etc.) encontrarás dentro de los menús una o varias opciones gráficas de administración de usuarios, asi como programas basados en Web como webmin que entre muchas otras cosas te permiten un control total de la administración de usuarios y grupos. Estos programas de gestión de usuarios son sumamente intuitivos y en una sola pantalla a través de sus opciones puedes controlar prácticamente todas las funciones expuestas en este tutorial, en lo particular recomiendo webmin por su confiablidad y alto nivel de configuración, además que es accesible via web.
Programa de control de usuarios, disponible en Fedora a través del menú Escritorio -> Administración -> Usuarios y grupos, o desde una terminal de comandos o shell con el comando , debes de ser root en cualquier caso.
Webmin en el módulo de añadir usuarios. Excelente herramienta de configuración y administración de múltiples aspectos de Linux.
Traditional Unix systems keep user account information, including one-way encrypted passwords, in a text file called «/etc/passwd». As this file is used by many tools (such as «ls») to display file ownerships, etc. by matching user id #’s with the user’s names, the file needs to be world-readable. Consequentally, this can be somewhat of a security risk.
Another method of storing account information, one that I always use, is with the shadow password format. As with the traditional method, this method stores account information in the /etc/passwd file in a compatible format. However, the password is stored as a single «x» character (ie. not actually stored in this file). A second file, called «/etc/shadow», contains encrypted password as well as other information such as account or password expiration values, etc. The /etc/shadow file is readable only by the root account and is therefore less of a security risk.
While some other Linux distributions forces you to install the Shadow Password Suite in order to use the shadow format, Red Hat makes it simple. To switch between the two formats, type (as root):
/usr/sbin/pwconv To convert to the shadow format
/usr/sbin/pwunconv To convert back to the traditional format
With shadow passwords, the «/etc/passwd» file contains account information, and looks like this:
smithj:x:561:561:Joe Smith:/home/smithj:/bin/bash
Each field in a passwd entry is separated with «:» colon characters, and are as follows:
Username, up to 8 characters. Case-sensitive, usually all lowercase
An «x» in the password field. Passwords are stored in the «/etc/shadow» file.
Numeric user id. This is assigned by the «adduser» script. Unix uses this field, plus the following group field, to identify which files belong to the user.
Numeric group id. Red Hat uses group id’s in a fairly unique manner for enhanced file security. Usually the group id will match the user id.
Full name of user. I’m not sure what the maximum length for this field is, but try to keep it reasonable (under 30 characters).
User’s home directory. Usually /home/username (eg. /home/smithj). All user’s personal files, web pages, mail forwarding, etc. will be stored here.
User’s «shell account». Often set to «/bin/bash» to provide access to the bash shell (my personal favorite shell).
Perhaps you do not wish to provide shell accounts for your users. You could create a script file called «/bin/sorrysh», for example, that would display some kind of error message and log the user off, and then set this script as their default shell.
Note: Note: If the account needs to provide «FTP» transfers to update web pages, etc. then the shell account will need to be set to «/bin/bash» — and then special permissions will need to be set up in the user’s home directory to prevent shell logins. See Section 7.1 for details on this.
The «/etc/shadow» file contains password and account expiration information for users, and looks like this:
smithj:Ep6mckrOLChF.:10063:0:99999:7:::
As with the passwd file, each field in the shadow file is also separated with «:» colon characters, and are as follows:
Username, up to 8 characters. Case-sensitive, usually all lowercase. A direct match to the username in the /etc/passwd file.
Password, 13 character encrypted. A blank entry (eg. ::) indicates a password is not required to log in (usually a bad idea), and a «*» entry (eg. :*:) indicates the account has been disabled.
The number of days (since January 1, 1970) since the password was last changed.
The number of days before password may be changed (0 indicates it may be changed at any time)
The number of days after which password must be changed (99999 indicates user can keep his or her password unchanged for many, many years)
The number of days to warn user of an expiring password (7 for a full week)
The number of days after password expires that account is disabled
The number of days since January 1, 1970 that an account has been disabled
pfSense is a free, open source customized distribution of FreeBSD tailored for use as a firewall and router. In addition to being a powerful, flexible firewalling and routing platform, it includes a long list of related features and a package system allowing further expandability without adding bloat and potential security vulnerabilities to the base distribution. pfSense is a popular project with more than 1 million downloads since its inception, and proven in countless installations ranging from small home networks protecting a PC and an Xbox to large corporations, universities and other organizations protecting thousands of network devices.
This project started in 2004 as a fork of the m0n0wall project, but focused towards full PC installations rather than the embedded hardware focus of m0n0wall. pfSense also offers an embedded image for Compact Flash based installations, however it is not our primary focus.