1. Administraci´n de Sistemas Informaticos
o
Pr´ctica 2
a
Rub´n Poll´n
e a
meskio@amedias.org
29 de marzo de 2006
2. Instalaci´n de OpenBSD
o
Particionado
Al principio hubo problemas con la instalaci´n, pues el instalador en disquetes de OpenBSD no lleva
o
soporte para discos USB, y en internet no encontraba informaci´n sobre la instalaci´n en un disco USB.
o o
Esto me hizo pensar que OpenBSD no estaba preparado para ser instalado en este medio. Luego al probar
a instalarlo desde CD pude comprobar que a traves de este medio si que pod´ acceder al disco USB, e
ıa
instalarlo sobre el.
El proceso de instalaci´n es bastante sencillo. La unica diferencia notable con respecto a un sistema
o ´
GNU/Linux es que el particionado tiene dos fases: una primera en la que manipulas la tabla de particiones
del disco, en mi caso lo he instalado sin generar ninguna partici´n; y otra segunda en la que manipulas
o
las rodajas (slices), el sistema me ha quedado:
Filesystem Size Used Avail Capacity Mounted on
/dev/sd0a 97.4M 36.3M 56.3M 39% /
/dev/sd0f 1006M 310K 956M 0% /home
/dev/sd0h 502M 6.0K 477M 0% /tmp
/dev/sd0e 2.0G 750M 1.1G 39% /usr
/dev/sd0g 1006M 5.2M 951M 1% /var
Arranque
El gestor de arranque de OpenBSD lo he puesto sobre el MBR del disco USB. La configuraci´n del o
GRUB de los ordenadores de la sala de redes ha sido algo complicada, pues no era consciente de haber
instalado el sistema sin generar particiones, y le estaba pidiendo al grub que accediera a (hd1,0,a) en vez
de a (hd1,a). El codigo de arranque que le hemos dejado al GRUB es:
title OpenBSD
rootnoverify (hd1,a)
makeactive
chainloader +1
sudo
Para que los usuarios del grupo wheel puedan usar sudo he a˜ adido esta linea a /etc/sudoers:
n
%wheel ALL=(ALL) ALL
instalar programas
Hay dos metodos para instalar programas en OpenBSD:
Los ports. Hay que bajarse el arbol de ports del ftp de OpenBSD. Este basicamente es un conjunto
de makefiles capaces de descargarse, compilar e instalar un programa con todas sus dependencias.
En el raiz del arbol de ports hay un makefile que se pueden hacer busquedas e instalar los programas:
$ make search key=‘‘moon-buggy’’
Port: moon-buggy-0.5.1p0
Path: games/moon-buggy
1
3. Info: drive some car across the moon
Maint: Felix Kronlage <fkr@grummel.net>
Index: games
L-deps:
B-deps:
R-deps:
Archs: any
$ sudo make install games/moon-buggy
La desinstalaci´n de un programa es de forma similar:
o
$ sudo make deinstall games/moon-buggy
pkgsrc. Este es un sistema de instalaci´n por binarios. Hay una variable de sistema a traves de la
o
que le dices a pkgsrc de donde instalarse los programas, esta variable la he a˜ adido al .profile:
n
export PKG_PATH=‘‘ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/’’
Con el comando pkg add se puede a˜ adir un programa y con pkg delete se puede eliminar.
n
2
4. Arranque del sistema
Monousuario
Para arrancar el sistema en monousuario en el gestor de arranque de openbsd hay que teclear:
> b /bsd -s
rc
El sustituto a /etc/inittab en OpenBSD es /etc/rc, un script que se encarga del arranque del sistema.
Tiene varios ficheros de configuraci´n:
o
/etc/rc.conf. Fichero de configuraci´n basico, donde est´n casitodas las variables. No se deber´
o a ıa
modificar nunca.
/etc/rc.conf.local. En este fichero es donde se deben poner las modificaciones que se querrian hacer
a /etc/rc.conf. Mi fichero /etc/rc.conf.local a quedado as´ (con lo que he habilitado el raton en
ı
consola):
# For enabling console mouse support (i386 and alpha only)
wsmoused_flags=‘‘’’ #NO # for ps/2 or usb mice: ’’‘‘, serial: ’’-p /dev/cua00‘‘
/etc/rc.local. Script que se ejecuta despues de /etc/rc, sirve para a˜ adir cosas al arranque. Yo he
n
a˜ adido en el soporte para el teclado en espa˜ ol:
n n
# $OpenBSD: rc.local,v 1.38 2005/03/29 21:41:59 uwe Exp $
# site-specific startup actions, daemons, and other things which
# can be done AFTER your system goes into securemode. For actions
# which should be done BEFORE your system has gone into securemode
# please see /etc/rc.securelevel
# site-specific startup actions, daemons which can be run
# Add your local startup actions to this file
echo -n ’starting local daemons:’
if [ -x /usr/local/sbin/cfsd ]; then
if ps auxc | grep -q ’^ *root .* mountd$’; then
echo -n ’ cfsd’; /usr/local/sbin/cfsd >/dev/null 2>&1
mount -o port=3049,nfsv2,intr localhost:/null /crypt
else
echo -n ’ cfsd (failed, no mountd running)’
fi
fi
#if [ -x /usr/local/sbin/snmpd ]; then
# echo -n ’ snmpd’; /usr/local/sbin/snmpd
#fi
3
5. echo ’.’
# Netatalk stuff
#if [ -f /etc/netatalk/rc.atalk ]; then
# . /etc/netatalk/rc.atalk
#fi
# Pone el teclado en espa~ol
n
wsconsctl -w keyboard.encoding=es
/etc/ttys. Fichero de configuraci´n de activaci´n de las terminales. He eliminado las terminales 4,
o o
5, y 6:
#
# $OpenBSD: ttys,v 1.17 2002/06/09 06:15:14 todd Exp $
#
# name getty type status comments
#
console ’’/usr/libexec/getty Pc‘‘ vt220 off secure
ttyC0 ’’/usr/libexec/getty Pc‘‘ vt220 on secure
ttyC1 ’’/usr/libexec/getty Pc‘‘ vt220 on secure
ttyC2 ’’/usr/libexec/getty Pc‘‘ vt220 on secure
ttyC3 ’’/usr/libexec/getty Pc‘‘ vt220 on secure
ttyC4 ’’/usr/libexec/getty Pc‘‘ vt220 off secure
ttyC5 ’’/usr/libexec/getty Pc‘‘ vt220 off secure
ttyC6 ’’/usr/libexec/getty Pc‘‘ vt220 off secure
...
red
El identificador de la tarjeta de red depende del modelo de la tarjeta de red, por ejemplo la usada en la
sala de redes tiene el identificador xl0. Los ficheros de configuraci´n de la red est´n en /etc/hostname.xl0
o a
(sustituir xl0 por el identificador adecuado). La sintaxis para configurar la red en la sala de redes es:
inet 155.210.154.204 255.255.255.0 155.210.154.255
En caso de querer pedir la informaci´n por dhcp hay que poner:
o
dhcp NONE NONE NONE
El script encargado de arrancar la red en el arranque del sistema es /etc/netstart.
4
6. Gesti´n de cuentas de usuario
o
adduser
Ya que el adduser de OpenBSD no dispone de la opci´n LETTERHOMES he optado por implimen-
o
tarla, modificando el script adduser (que esta en perl). Aqu´ esta el parche realizado:
ı
--- adduser.old Sat Sep 10 23:20:58 2005
+++ adduser Tue Mar 28 19:43:20 2006
@@ -84,6 +84,7 @@
$config_read = 1; # read config file
$logfile = quot;/var/log/adduserquot;; # logfile
$home = quot;/homequot;; # default HOME
+ $letterhomes = quot;noquot;; # homes in directories sort to initials
$etc_shells = quot;/etc/shellsquot;;
$etc_passwd = quot;/etc/master.passwdquot;;
$etc_ptmp = quot;/etc/ptmpquot;;
@@ -765,7 +766,7 @@
# new_groups: some other groups
# log_cl: login class
local($name, $group_login, $fullname, $sh, $u_id, $g_id, $new_groups,
-$log_cl);
+ $log_cl, $letter);
local($groupmembers_bak, $cryptpwd);
local($new_users_ok) = 1;
@@ -785,11 +786,16 @@
$new_groups = &new_users_groups($name, $new_groups);
$log_cl = &new_users_login_class;
$password = &new_users_password;
+
+ if ($letterhomes eq quot;yesquot;) {
+ $letter = substr($name, 0, 1);
+ $home=quot;$home/$letterquot;;
+}
-
if (&new_users_ok) {
$new_users_ok = 1;
+
$cryptpwd = quot;*quot;; # Locked by default
$cryptpwd = encrypt($password, &salt) if ($password ne quot;quot;);
$log_cl = quot;quot; if ($log_cl eq quot;defaultquot;);
@@ -817,9 +823,14 @@
sub batch {
local($name, $groups, $fullname, $password) = @_;
- local($sh);
+ local($sh, $letter);
5
7. $defaultshell = &shell_default_valid($defaultshell);
+
+ if ($letterhomes eq quot;yesquot;) {
+ $letter = substr($name, 0, 1);
+ $home=quot;$home/$letterquot;;
+ }
return 0 unless $home = &home_partition_valid($home);
return 0 if $dotdir ne &dotdir_default_valid($dotdir);
$send_message = &message_default;
@@ -915,6 +926,7 @@
[-class login_class]
[-h|-help]
[-home home]
+ [-lh|-letterhomes]
[-message message_file]
[-noconfig]
[-shell shell]
@@ -1020,6 +1032,7 @@
elsif (/^--?(debug)$/) { $verbose = 2 }
elsif (/^--?(h|help|?)$/) { &usage }
elsif (/^--?(home)$/) { $home = $argv[0]; shift @argv }
+ elsif (/^--?(lh|letterhomes)$/) { $letterhomes = 1 }
elsif (/^--?(shell)$/) { $defaultshell = $argv[0]; shift @argv }
elsif (/^--?(class)$/) { $defaultclass = $argv[0]; shift @argv }
elsif (/^--?(dotdir)$/) { $dotdir = $argv[0]; shift @argv }
@@ -1123,6 +1136,12 @@
local($name, $group) = @_;
local($homedir) = quot;$home/$namequot;;
+ if (!-e quot;$homequot;) {
+ if (!mkdir(quot;$homequot;, 0755)) {
+ warn quot;mkdir $home: $!nquot;; return 0;
+}
+ }
+
if (-e quot;$homedirquot;) {
warn quot;HOME Directory ‘‘$homedir’’ already existsanquot;;
return 0;
@@ -1534,6 +1553,8 @@
# default HOME directory (quot;/homequot;)
home = quot;$homequot;
+# use first letter of the user name for homes (example: /home/f/foo )
+letterhomes = quot;$letterhomesquot;
# List of directories where shells located
# path = (’/bin’, ’/usr/bin’, ’/usr/local/bin’)
El script adduser modificado por mi entero esta disponible aqui: http://pulsar.unizar.es/ meskio/asi/adduser
creacuenta
Al crear un usuario hace falta a˜ adirlo al grupo users, para que tenga permisos para formatear floppys
n
(mas adelante se explica). El script creacuenta queda as´ ı:
#!/bin/sh
if [ $# -ne 1 ]; then
6
8. echo quot;usage: crearcuenta nombre_usuarioquot;
exit 1
fi
adduser -batch $1
chmod 700 /home/‘echo $1|cut -c -1‘/$1
profile
El formatear un disquete para OpenBSD tiene 3 partes: darle formato (formatfd), crear una rodaja
que ocupe todo el disquete (disklabel) y crear el sistema de ficheros ffs (newfs). Para que cualquier
usuario dentro del grupo users tenga permisod para hacer esto hay que cambiar los permisos de algunos
dispositivos:
crw-rw---- 1 root users 9, 0 Mar 28 21:11 /dev/rfd0a
crw-rw---- 1 root users 9, 2 Mar 1 17:21 /dev/rfd0c
Se ha tenido que usar sudo para montar el floppy, pues el fstab de OpenBSD no permite darles permiso
a los usuarios para montar dispositivos. La entrada del /etc/fstab para montar el floppy es:
/dev/fd0a /mnt/floppy ffs rw,noauto 0 0
La entrada de /etc/sudoers que permite a los usuarios del grupo users usar sudo es:
%users ALL = NOPASSWD: /sbin/mount /mnt/floppy,/sbin/umount /mnt/floppy
El .profile resultado con los comandos pedidos es:
# $OpenBSD: dot.profile,v 1.4 2005/02/16 06:56:57 matthieu Exp $
#
# sh/ksh initialization
PATH=$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/game
export PATH HOME TERM
export PKG_PATH=quot;ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/quot;
# mis funciones
formatfd () {
/usr/sbin/fdformat fd0
echo quot;a a
w
qquot; | /sbin/disklabel -E fd0 > /dev/null
/sbin/newfs fd0a > /dev/null
}
conexion () {
sudo /sbin/mount /mnt/floppy
}
desconexion () {
sudo /sbin/umount /mnt/floppy
}
copyfd () {
conexion
7
9. case $1 in
-d) cp /mnt/floppy/$2 .;;
-h) cp $2 /mnt/floppy/ ;;
*) echo quot;usage: copy -d|-h filequot;
echo quot; -d desde disquetequot;
echo quot; -h hacia disquetequot; ;;
esac
desconexion
}
8