Linux From Scratch XXXIII: Creando una cuenta de usuario

Continúo con el siguiente artículo de esta serie. En el anterior, hemos visto la forma de usar un kernel de otra distro en Linux From Scratch como kernel alternativo. Ahora vamos a configurar la forma de trabajar de los usuarios desde la terminal y crear un usuario no privilegiado para poder usar nuestro sistema de manera más segura.

Configurando las cuentas de usuario

En realidad la creación y configuración de los usuarios es una de las secciones del libro Beyond Linux From Scratch, pero como a partir de ahora vamos a trabajar en nuestro sistema, he decidido adelantarme y crear una cuenta de usuario con una configuración que nos resulte más cómoda para trabajar desde ella.

Ántes de crear la cuenta vamos a dejar listos los ficheros de configuración necesarios. Crearemos algunos ficheros en el directorio /etc y un directorio /etc/skel que contiene la configuración por defecto de los nuevos usuarios creados. Primero el directorio skel.

[~/lfs]$ sudo lfs
root:/# mkdir -v /etc/skel
root:/# cat > /etc/skel/.bashrc << "EOF"
> if [ -f "/etc/bashrc" ]; then
>     source /etc/bashrc
> fi
> EOF
root:/# cat > /etc/skel/.bash_profile << "EOF"
> if [ -f "$HOME/.bashrc" ]; then
>     source "$HOME/.bashrc"
> fi
> EOF
root:/# chmod go-rw /etc/skel/.bash*
root:/# cp /etc/skel/.bash* /root

Con estos comandos lo que hemos hecho es crear un directorio /etc/skel con dos ficheros .bashrc y .bash_profile. Por defecto no vamos a meter nada en estos ficheros salvo lo necesario para que el shell lea los ficheros de configuración de /etc. El comando chmod quita los permisos de lectura y escritura a todos menos al propietario de los ficheros. Importante para la seguridad.

El último comando sirve para copiar los ficheros a la cuenta de root. Los ficheros del directorio skel se copian a las cuentas de los usuarios nuevos que vamos creando, pero no afectan a los usuarios que ya están creados. Por eso tenemos que copiarlos a mano a la cuenta de root y por eso estamos configurando las cuentas antes de crear los usuarios.

En el skel no vamos a poner nada más. El resto de la configuración la haremos en los ficheros de etc para que sirva para todos los usuarios sin tener que copiar los ficheros a sus cuentas. En vez de poner comandos para ejecutar directamente en la terminal, voy a poner el nombre y el contenido de los ficheros y dejaré que los creéis como prefiráis. Con los comandos de siempre o con algún editor.

También quisiera advertiros que esta configuración es la que he puesto en mi LFS porque es la configuración con la que estoy más cómodo. Todo esto es personalizable a gusto de cada usuario, así que si preferíis cambiar alguna cosa no dudéis en ello. Mi configuración no tiene por qué ser la mejor para vosotros.

Configurando el editor vim

El primer fichero que vamos a crear es el /etc/vimrc. Este es el fichero de configuración del editor vim, que es el que suelo usar. Así, si queréis usar el vim para crear los demás ficheros, lo tenéis configurado de una forma más cómoda que la que usa por defecto. Si no usáis el vim podéis omitir este fichero. Si sois puristas del vim y preferíis trabajar en modo normal, quizás prefiráis eliminar la linea “start“, que es la que lo hace entrar en modo de inserción nada más empezar.

" Begin /etc/vimrc

set nocompatible
set backspace=indent,eol,start
set ruler
set laststatus=1
set vb t_vb=
set display+=lastline
set sw=4
set ts=4
set sts=4
set autoindent
set cindent
set scrolloff=3
set backupdir=/tmp
set directory=/tmp
set hlsearch
set nowrap
set stal=2
set cursorline
set relativenumber

start
syntax on
filetype on

noremap <silent> <Up> k
noremap <silent> <Down> j
noremap <silent> <Left> h
noremap <silent> <Right> l
noremap <silent> <C-Right> <S-Right>
noremap <silent> <C-Left> <S-Left>
noremap <silent> <C-Up> <C-Y>
noremap <silent> <C-Down> <C-E>
noremap <silent> <C-Home> gg
noremap <silent> <C-End> G<End>
noremap <silent> <End> $
noremap <silent> <Home> 0

inoremap <silent> <Up> <C-O>k
inoremap <silent> <Down> <C-O>j
inoremap <silent> <Left> <C-O>h
inoremap <silent> <Right> <C-O>l
inoremap <silent> <C-Right> <S-Right>
inoremap <silent> <C-Left> <S-Left>
inoremap <silent> <C-Up> <C-O><C-Y>
inoremap <silent> <C-Down> <C-O><C-E>
inoremap <silent> <C-Home> <C-O>gg
inoremap <silent> <C-End> <C-O>G<End>
inoremap <silent> <M-Up> <C-O>gg
inoremap <silent> <M-Down> <C-O>G<End>
inoremap <silent> <End> <C-O>$
inoremap <silent> <Home> <C-O>0

inoremap <C-S> <C-O>:w<CR>
inoremap <silent> <C-Z> <C-O>u
inoremap <C-X> <C-O>:xa<CR>
inoremap <C-Q> <C-O>:qa<CR>
inoremap <C-Q><C-Q> <C-o>:qa!<CR>
inoremap <silent> <C-D> <C-O>dd
inoremap <silent> <C-N> <C-O>:tabn<CR>
inoremap <silent> <C-P> <C-O>:tabp<CR>

" End /etc/vimrc

La linea 2 pone el editor en modo no compatible. Fundamental para que funcionen la mayoría de las demas cosas. La 3 hace que el comportamiento de la tecla de borrar sea el esperado. Las lineas 5 y 6 muestran la linea de estado donde se ve el modo en el que está el editor y la posición del cursor. La linea 7 desactiva tanto el bell audible como el visual. Imprescindible para conservar la poca salud mental que todavía nos queda. 🙂 La linea 8 evita que vim oculte las lineas incompletas. Las lineas 9 a 11 establecen un tamaño de tabulación de 4 caracteres. La 12 y la 13 activan la indentación automática. La 14 permite que siempre se vean 3 lineas de contexto al hacer scroll. La 15 y la 16 hacen que los ficheros temporales se creen en /tmp. La linea 17 hace que, al buscar algo, se resalten todas las ocurrencias del texto que hemos buscado. La 18 desactiva el word wrapping. La 19 hace que se vean las pestañas con los nombres de los ficheros que tenemos abiertos. La 20 resalta la linea en la que está el cursor. La 21 activa los números de linea relativos. Muy útiles cuando se trabaja desde modo normal.

La linea 23 activa el modo de inserción. Podemos omitir esta linea si preferimos trabajar siempre desde modo normal. Las lineas 24 y 25 activan la syntax highlighting. Las lineas 27 a 53 mapean las teclas especiales de forma que funcionen como es de esperar tanto en modo de inserción como en modo normal. Algunas de ellas no funcionan en la consola, sino en un emulador de terminal dentro de las X.

Por último, las lineas 55 a 62 sirven para mapear algunas teclas que resultan útiles cuando se trabaja en modo de inserción. Se puede guardar con Ctrl-S, deshacer con Ctrl-Z, salir guardando con Ctrl-X, salir sin guardar con Ctrl-Q (pulsándola dos veces evitamos la confirmación), borrar la linea actual con Ctrl-D y pasar a la pestaña siguiente y anterior con Ctrl-N y Ctrl-P respectivamente.

Ojo: La tecla de guardar Ctrl-S sólo funciona si tenemos desactivado el protocolo XON/XOFF en la terminal. Esto lo haremos en el /etc/bashrc. Si queremos que funcione ahora tenemos que usar este comando desde el shell:

stty -ixon

El fichero /etc/profile

En este fichero es donde se ponen las variables de entorno que sean comunes para todos los usuarios. También se pueden poner programas que queramos que se lancen al iniciar sesión desde cualquier usuario. Los usuarios sin privilegios no pueden evitar que este fichero se ejecute.

Si quisieramos configurar variables de entorno o programas de inicio para un usuario concreto, tendríamos que ponerlos en el .bash_profile de la cuenta de ese usuario. Si quisieramos ponerlos para todos los usuarios, pero dejar que cada usuario decida si los quiere o no, tendríamos que ponerlos en el /etc/skel/.bash_profile.

Ojo con la linea que define la variable LANG. Tiene que ser la misma que hemos puesto cuando creamos este fichero de configuración con las instrucciones del libro. Fijáos en lo que tenéis puesto vosotros y dejadla igual.

# Begin /etc/profile

export LANG=en_GB.UTF-8

export GREP_OPTIONS="--color"
export GREP_COLORS="ms=01;31:mc=01;31:sl=:cx=:fn=01;35:ln=01;32:bn=01;32:se=01;36"

export HISTIGNORE=$'[fb]g:exit:history*:ls'
export HISTCONTROL=erasedups:ignoreboth

export LESS="-MQRS"
export LESSCHARSET="latin1"
export LESSHISTFILE="-"
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_us=$'\E[01;32m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_ue=$'\E[0m'
export GROFF_NO_SGR=yes

export LS_COLORS="rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32"

# End /etc/profile

Las lineas 5 y 6 hacen que el comando grep resalte en color el texto encontrado. Las lineas 8 y 9 evitan que el histórico del bash se nos llene con comandos duplicados y cosas que no tiene sentido incluir en él. Las lineas 11 a 21 configuran el less de forma que salga en color. Esto afecta también a las páginas del manual. La linea 23 configura los colores que van a salir en el comando ls. Hace falta también definir un alias para que salgan estos colores.

El fichero /etc/bashrc

En este fichero se ponen alias y otros comandos que queremos que estén disponibles para todos los usuarios. Este fichero se lee desde el .bashrc de cada usuario, así que los usuarios pueden decidir si leerlo o no. Por lo tanto, todo lo que se ponga aquí debemos considerarlo opcional. Para configurar alias especificos de cada usuario, el fichero correcto es el .bashrc de cada cuenta de usuario.

# Begin /etc/bashrc

alias ll="ls -l"
alias la="ls -lA"
alias l.='ls -d .[a-zA-Z0-9]*'
alias ls='ls -FN --color=tty -T 0'
alias ..="cd .."
alias cd..="cd .."

alias rm="rm -v"
alias cp="cp -v"
alias mv="mv -v"
alias ln="ln -v"
alias mkdir="mkdir -v"
alias rmdir="rmdir -v"

alias chmod="chmod -v"
alias chown="chown -v"

alias df='df -h'
alias du='du -h'

alias vim='vim -p'
alias vi='vim -p'

complete -cf man

shopt -s histappend
shopt -s extglob

stty -ixon

[[ $EUID == 0 ]] && PSCOLOR="1;31" || PSCOLOR="1;32"
export PS1="[\[\e[${PSCOLOR}m\]\u@\h:\w\[\e[0m\]]\\$ "
unset PSCOLOR

# End /etc/bashrc

Fijáos que, aunque las variables de entorno van en el /etc/profile, he puesto aquí PS1. Eso es porque quiero que el prompt cambie de color cada vez que el usuario cambie de cuenta (con su o, más adelante, con sudo) para distinguir claramente si estamos trabajando con la cuenta de root o no. El fichero /etc/profile no se procesa cuando el usuario cambia de cuenta, pero este sí, así que hay que ponerlo en este. Paso a comentaros el fichero:

Las lineas 3 a 8 definen algunos alias útiles para navegar y ver los ficheros. Entre ellos está el comando ls, al cual se le añaden parámetros para que salgan los colores y para que indique el tipo de cada fichero poniendo un caracter especial a continuación. Las lineas 10 a 18 añaden el parámetro -v a algunos comandos para que muestren mensajes informativos. Las lineas 20 y 21 hacen que los tamaños que muestran los comandos du y df salgan en unidades más legibles. Las lineas 23 y 24 añaden el parámetro -p al vim de forma que, si especificamos varios ficheros, abra cada uno en una pestaña. La linea 26 hace que se pueda autocompletar nombres de comandos después de escribir “man“.

La linea 28 es para que el bash añada los últimos comandos al historial en vez de sobreescribir el historial entero cada vez. Así si abrimos varias sesiones no perdemos el historial de ninguna de ellas. De lo contrario, la última sesión que cerremos machaca el historial de las anteriores. La linea 29 activa las plantillas de fichero extendidas. La linea 31 desactiva el protocolo XON/XOFF de forma que se puedan usar las teclas Ctrl-S y Ctrl-Q para otras cosas más útiles. Por último, las lineas 33 a 35 configuran el prompt PS1 de forma que muestre el nombre de usuario, el de la máquina y el directorio en el que estamos. Ademas, ponen un color diferente según si el usuario actual es el root (EUID = 0) o no.

Configurando el /etc/inputrc

El último fichero que vamos a configurar es el /etc/inputrc. Este fichero controla la configuración del bash y de otros programas que usan la librería readline cuando leen comandos del usuario. Anteriormente ya hemos creado este fichero con el contenido que indica el libro, pero vamos a añadir unas cuantas lineas al final que yo creo que mejoran un poco el funcionamiento.

set completion-ignore-case On
set show-all-if-unmodified on
set skip-completed-text on

"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[4~": history-search-backward
"\e[6~": history-search-forward

La linea 1 hace que el autocompletado no sea sensible a mayúsculas. La 2 muestra la lista de autocompletado con la primera pulsación de TAB. La 3 evita que se duplique texto al autocompletar en mitad de una palabra. Las lineas 5 a 10 hacen que se pueda pasar de palabra en palabra con Ctrl más las flecha del cursor a la derecha y a la izquierda. Están repetidas porque depende del tipo de terminal. Las lineas 12 a 15 permiten que al pulsar las flechas del cursor arriba y abajo, busquemos en el historial comandos que empiezen por los caracteres que hemos escrito.

Creando un nuevo usuario

Una vez creados estos ficheros ya podemos crear un usuario. Es fundamental tener una cuenta de usuario sin privilegios para poder trabajar sin riesgo y usar la de root sólo para administrar. Esto mejora la seguridad evitando estropear cosas importantes cuando metamos la pata.

root:/# groupadd -g 1000 users
root:/# useradd -G users -m hexborg
root:/# passwd hexborg

Por supuesto, podéis cambiar “hexborg” por el nombre de usuario que prefiráis. El primer comando añade un grupo llamado users que es al que van a pertenecer todos los usuarios creados. Tiene que existir antes de crear el usuario. El segundo añade el usuario. Ojo con el parámetro -m, que es el que hace que se cree el directorio home. Si no lo ponemos estaremos creando un usuario sin home adecuado, por ejemplo, para ejecutar servicios pero no para entrar en sesión con él. El parámetro “-G users” es para que agrege el usuario al grupo que hemos creado anteriormente. Además de este grupo, también creará uno especifico para el usuario, lo que nos da más posibilidades a la hora de administrar los permisos de los usuarios.

Por ahora esto es todo. En el próximo post instalaremos algunos programas más que necesitamos para poder continuar.

EOF

Anuncios

2 pensamientos en “Linux From Scratch XXXIII: Creando una cuenta de usuario

  1. Raul

    Excelente amigo, te seguimos en nuestro trabajo. Tu guía es la que nos faltaba, como decimos por estos lados del mundo nos das todo masticado. Gracias y adelante que te seguimos.

    1. hexborg Autor de la entrada

      De verdad que me alegro. 🙂 Tengo ganas de llegar a crear el initrd. Lo que me falta es tiempo, pero eso no se puede descargar de ningún sitio. 🙂 Todo llegará.

      Un saludo.

Los comentarios están cerrados.