https://manuais.iessanclemente.net/index.php?title=Creaci%C3%B3n_e_configuraci%C3%B3n_do_esqueleto_da_estrutura_de_cartafoles&feed=atom&action=historyCreación e configuración do esqueleto da estrutura de cartafoles - Historial de revisiones2024-03-28T08:59:41ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Creaci%C3%B3n_e_configuraci%C3%B3n_do_esqueleto_da_estrutura_de_cartafoles&diff=62597&oldid=prevCarrion: /* Creación das carpetas persoais dos usuarios (home) */2017-10-07T10:52:30Z<p><span dir="auto"><span class="autocomment">Creación das carpetas persoais dos usuarios (home)</span></span></p>
<p><b>Página nueva</b></p><div>==Introdución==<br />
*Antes de comezar con NFS, engadiremos un novo disco duro que albergará as carpetas persoais dos usuarios e de comun. Tal e como se amosa na seguinte imaxe.<br />
<br />
<br />
[[Image:00_Dominios_Linux_Escenarios_parte_02_Carpetas_Usuarios.jpg | 700px]]<br />
<br />
*Notar que ten unha estrutura moi semellante á das OUs do LDAP.<br />
<br />
*Imos engadir un novo disco duro á MV (''sdb'')<br />
*Particionalo para separar os datos das carpetas dos usuarios dos de comun. Así, no futuro, a un mesmo usuario podemos asignarlle cotas distintas na súa carpeta persoal e en comun, pois as cotas asígnanse por partición.<br />
*Explicación das carpetas:<br />
**'''iescalquera''': crearemos unha carpeta dentro de '''home''' que sexa un punto de montaxe que apunte á primeira partición (''sdb1'') do segundo disco duro (''sdb'').<br />
***'''profes''': conterá os homes dos usuarios LDAP do profesorado.<br />
***'''alumnos''': conterá as carpetas homes dos usuarios do LDAP do alumnado, organizadas por cursos.<br />
**'''Comun''': esta carpeta será un punto de montaxe que apuntará á segunda partición (''sdb2'') do segundo disco duro (''sdb'')<br />
***'''Carpeta por curso ''': carpeta na que o profesorado dese curso poderá deixar información ao alumnado.<br />
***'''Departamentos''': carpeta na que o profesorado poderá deixar información relativa ao seu departamento.<br />
<br />
*'''Notas''': <br />
**Non imos afondar máis na estrutura, pois con esta é suficiente para entender o que se pretende. Poderíase detallar máis con:<br />
***Subcarpetas dos módulos de cada curso dentro de ''/comun/curso''<br />
***Subcarpetas dos departamentos dentro de ''/comun/departamentos'',<br />
***Etc.<br />
**A carpeta '''iescalquera''', podería:<br />
***ser creada noutro sitio se se desexara<br />
***ter outro nome distinto, por exemplo: nfs, usariosldap, etc.<br />
**O mesmo con ''comun''.<br />
<br />
<br />
<br><br />
<div style="margin:0; background:#E6ECFF; font-size:100%; border:1px solid #cccccc; text-align:left; padding:0.2em 0.4em; -moz-border-radius:6px">[[Imagen:aprende.png|left]]'''TAMÉN PODES VER...'''<br />
*Se se precisa información sobre discos e particións pódese consultar o seguinte enlace: [[Operacións con discos e soportes externos: montar, desmontar, formatar, etc.]] do [[Curso Platega: Ubuntu Desktop. Un sistema dual (MS Windows / GNU/Linux)]]<br />
</div><br />
<br />
==Engadir segundo disco a dserver00==<br />
* Comezamos engadindo un novo disco á máquina virtual:<br />
<br />
<gallery caption="Engadir disco á MV" widths="350pxpx" heights="250px" perrow="2"><br />
Image:Dl_2014_nfs_01.jpeg| Engadir un segundo disco de expansión dinámica á MV '''dserver00'''.<br />
Image:Dl_2014_nfs_02.jpeg| Indicar nome e tamaño, nesta ocasión escolleuse 10 GB.<br />
Image:Dl_2014_nfs_04.jpeg| Disco engadido e MV xa acesa.<br />
</gallery><br />
<br />
==Crear particións e formato==<br />
*Lembrar que todo dispositivo en Linux está accesible dentro do directorio ''/dev/<dispositivo>''<br />
'''ls /dev/sd*<br />
''/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sda6 /dev/sdb<br />
<br />
* Observamos o disco primeiro (''sda'') e as súas particións e o disco segundo (''sdb'') que non contén particións.<br />
<br />
<gallery caption="Particionar e formatar o disco" widths="350pxpx" heights="250px" perrow="2"><br />
Imagen:Dl_2014_dhcp_01.jpeg| Comezamos conectándonos ao servidor '''dserver00''' dende o exterior.<br>Lembrar que rediriximos os portos en VirtualBox no escenario 1.A, e estamos conectándonos á IP do host real a un porto que nos redirixe ao servidor '''dserver00'''<br />
Image:Dl_2014_nfs_05.jpeg| Pódese usar '''fdisk''' para particionar o disco, '''fdisk -l''' indica os discos que hai e as súas particións. Observar que o disco ''sdb'' non contén particións.<br />
Image:Dl_2014_nfs_06.jpeg| Imos usar a utilidade '''cfdisk''' para particionar no canto da anterior. Executamos '''cfdisk /dev/sdb''' para realizar operacións/consultas co segundo disco.<br />
Image:2017_esqueleto_nfs_02.png| Indícasenos que o disco non ten unha táboa de particións. Escollemos crear para o disco unha táboa de particións con etiqueta ''gpt', soportada pola meirande parte dos sistemas operativos.<br />
Image:2017_esqueleto_nfs_03.png| No espazo libre creamos unha '''Nova''' partición.<br />
Image:2017_esqueleto_nfs_04.png| Nesta ocasión asignamos 5G á partición que vai conter os ''homes'' dos usuarios do LDAP.<br />
Image:2017_esqueleto_nfs_05.png| Coa primeira partición definida, baixamos ao espazo libre e creamos outra nova partición.<br />
Image:2017_esqueleto_nfs_06.png| Co espazo sobrante para a estrutura que colga de '''/comun'''<br />
Image:2017_esqueleto_nfs_07.png| '''Escribir''' a disco os cambios.<br />
Image:2017_esqueleto_nfs_08.png| Indicar que '''si''' se desexa escribir a táboa de particións.<br />
Image:2017_esqueleto_nfs_09.png| Saímos<br />
Image:2017_esqueleto_nfs_10.png| Comprobamos o particionado do disco ''sdb''.<br />
Image:Dl_2014_nfs_21.jpeg| Incluso en '''/dev''' vemos o disco e as 2 particións.<br />
Image:2017_esqueleto_nfs_11.png| Damos formato tipo [http://es.wikipedia.org/wiki/Ext4 ext4] e poñemos etiqueta á primeira partición: '''mkfs.ext4 -L Usuarios /dev/sdb1'''.<br />
Image:2017_esqueleto_nfs_12.png| Facemos o mesmo coa segunda: '''mkfs.ext4 -L Comun /dev/sdb2'''<br />
Image:2017_esqueleto_nfs_13.png| Con [http://linux.die.net/man/8/blkid blkid] podemos ver as particións de bloque, os UUIDs asignados a cada dispositivo, etiquetas e tipo de sistema de ficheiros. <br />
</gallery><br />
<br />
==Montaxe das particións== <br />
*Só resta montar as particións nos puntos de montaxe<br />
*Para iso podemos usar o '''UUID''' asignado a cada partición ou o nome do dispositivo ('''/dev/sdbX''').<br />
<gallery caption="Montaxe das particións" widths="350pxpx" heights="250px" perrow="2"><br />
Image:Dl_2014_nfs_25.jpeg| Creamos as carpetas nas que se van realizar os puntos de montaxe.<br />
Image:Dl_2014_nfs_26.jpeg| Imos primeiro montar de forma non permanente unha das particións, para realizar probas: '''mount /dev/sdb1 /home/iescalquera'''. Agora se alguén crea ficheiros ou carpetas en ''/home/iescalquera'' estaría creándoas na primeira partición do segundo disco. <br />
Image:Dl_2014_nfs_27.jpeg| Con '''df -h''' (http://linux.die.net/man/1/df) vemos os espazos asignados, usados e consumidos de cada partición. Podemos comprobar que aparece sdb1. <br>Pero se reiniciamos o ordenador, perderemos ese punto de montaxe. Para iso podemos usar o ficheiro '''/etc/fstab'''<br />
Image:2017_esqueleto_nfs_13.png| Lembrar que con '''blkid''' obtiñamos entre outras cousas o UUID de cada partición. Podemos copiar as relacionadas con sdbX.<br />
Image:Dl_2014_nfs_30.jpeg| Editar o ficheiro '''/etc/fstab''' e engadir os puntos de montaxe. Abaixo está en texto o contido da imaxe, pois pode que se vexa defectuosamente. <br> Decidiuse montar unha partición facendo uso do UUID desa partición, e a outra facendo uso do seu directorio en /dev. Fíxose así a modo de exemplo. É aconsellable usar o UUID.<br>En calquera caso o resto dos parámetros son os mesmos:<br>-Punto de montaxe<br>-Tipo de sistema de ficheiros<br>-Parámetros por defecto<br>-Non facemos dumping do disco --> 0<br>-Non indicamos a orde na que se chequea o disco no inicio do sistema --> 0.<br />
Image:Dl_2014_nfs_31.jpeg| Con '''mount -a''' lese o ficheiro /etc/fstab e o que non estea montado móntase. Agora se se reinicia o equipo vaise ler sempre o ficheiro /etc/fstab.<br />
Image:Dl_2014_nfs_32.jpeg| Con '''df -h''' de novo vemos as dúas particións sdbX montadas.<br />
</gallery><br />
<br />
*O contido de '''/etc/fstab'''.<br />
**'''Ollo!''', que o UUID en cada caso é distinto.<br />
<br />
<syntaxhighlight lang="bash" enclose="div" line highlight="17-19,21-23"><br />
# /etc/fstab: static file system information.<br />
#<br />
# Use 'blkid' to print the universally unique identifier for a<br />
# device; this may be used with UUID= as a more robust way to name devices<br />
# that works even if disks are added and removed. See fstab(5).<br />
#<br />
# <file system> <mount point> <type> <options> <dump> <pass><br />
# / was on /dev/sda1 during installation<br />
UUID=3247f690-d4fe-4033-93f3-ac0846d2edd0 / ext4 errors=remount-ro 0 1<br />
# /home was on /dev/sda6 during installation<br />
UUID=93111745-c95c-4a3d-aff0-721dacdf5741 /home ext4 defaults 0 2<br />
# swap was on /dev/sda5 during installation<br />
UUID=730d435e-4862-4ca5-bb72-ff2571ec017c none swap sw 0 0<br />
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0<br />
<br />
<br />
#Partición montada facendo uso de UUID<br />
#/dev/sdb1: LABEL="Usuarios" <br />
UUID=f7d9a85b-5847-449a-9f98-29dfecf4239e /home/iescalquera ext4 defaults 0 0<br />
<br />
#Partición montada facendo uso do dispositivo /dev/sdb*<br />
#/dev/sdb2: LABEL="Comun" UUID="726f54f6-960b-4ad0-9ec2-35eace42290a" <br />
/dev/sdb2 /comun ext4 defaults 0 0<br />
</syntaxhighlight><br />
<br />
*Con '''mount''' debemos ver que están montadas as 2 particións.<br />
<syntaxhighlight lang="bash" enclose="div" highlight="1,12,13"><br />
mount<br />
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)<br />
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)<br />
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=61196,mode=755)<br />
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)<br />
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=101252k,mode=755)<br />
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)<br />
....<br />
....<br />
/dev/sda6 on /home type ext4 (rw,relatime,data=ordered)<br />
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)<br />
/dev/sdb1 on /home/iescalquera type ext4 (rw,relatime,data=ordered)<br />
/dev/sdb2 on /comun type ext4 (rw,relatime,data=ordered)<br />
</syntaxhighlight><br />
<br />
==Crear esqueleto==<br />
[[Image:00_Dominios_Linux_Escenarios_parte_02_Carpetas_Esqueleto.jpg | 600px]]<br />
*Denominamos '''esqueleto''' a aquelas carpetas as cales vai crear o administrador e que o usuario non vai poder eliminar nin modificar a súa configuración, si poderá escribir/ler nalgunhas delas e noutras non.<br />
<br />
*Imos realizar toda a configuración con scripts, pois así sempre podemos recorrer a eles e caso de necesidade e ademais deixamos en rexistrado en ficheiros a traza do que realizamos.<br />
<br />
===Scripts para crear o esqueleto===<br />
*Vista a experimentación anterior con scripts e chamadas aos mesmos imos proceder a crear o esqueleto con scripts,<br />
<br />
*A seguinte estrutura dá unha idea dos scripts e ficheiros que imos crear/usar.<br />
'''tree scripts/ -a<br />
scripts/<br />
├── 00_variables.sh<br />
├── 01_crear_esqueleto.sh<br />
├── 02_axustar_permisos_esqueleto.sh<br />
├── 03_crear_home_usuarios_axustar_permisos.sh<br />
├── f00_cursos.txt<br />
└── skel_ubuntu<br />
├── .bash_logout<br />
├── .bashrc<br />
├── examples.desktop<br />
└── .profile<br />
<br />
1 directory, 9 files<br />
<br />
<br />
<br />
*Se non estivemos experimentando antes cos scripts, comezamos creando un directorio en ''dserver00'' no que ter organizados todos os scripts, neste caso este directorio está en ''/root/scripts'' (pero pode ser en calquera outro sitio).<br />
<br />
'''mkdir scripts<br />
'''cd scripts<br />
<br />
<br />
<br />
*Dentro desa carpeta comezamos creando os seguintes ficheiros e scripts:<br />
*Os ficheiros que comezan por '''f''' son ficheiros de texto ou xml.<br />
*Os ficheiros que comezan por número son scripts e levan a extensión '''sh'''.<br />
*Os nomes dos ficheiros van todos en minúsculas.<br />
*Os nomes das variables en maiúsculas<br />
*Os scripts están pensados para executarse as veces que se precise sen que por iso modifique o realizado por outros scripts. Isto, sempre fan o mesmo, independentemente do momento no que se execute.<br />
<br />
*'''FICHEIRO DE CURSOS: f00_cursos.txt<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
dam1<br />
dam2<br />
</syntaxhighlight><br />
<br />
*'''SCRIPT DE VARIABLES GLOBAIS: 00_variables.sh<br />
<syntaxhighlight lang="bash" enclose="div" line highlight=""><br />
#!/bin/bash<br />
<br />
#../scripts/00_variables.sh<br />
# Define variable globais que van usar os demais scripts<br />
<br />
<br />
#Variables<br />
DIR_HOME_LDAP=/home/iescalquera<br />
DIR_COMUN=/comun<br />
<br />
<br />
# Exportar variables<br />
# Nos scripts que se van usar a continuación non faría falla que se exportansen as variables.<br />
# Pero quedan exportadas por se a posteriori calquera dos scripts que vai importar<br />
# o contido deste ficheiro precisase chamar a outros escripts que precisasen usar estas variables<br />
export DIR_HOME_LDAP<br />
export DIR_COMUN<br />
</syntaxhighlight><br />
<br />
<br />
<br />
*'''SCRIPT: 01_crear_esqueleto.sh<br />
<syntaxhighlight lang="bash" enclose="div" line highlight=""><br />
#!/bin/bash<br />
<br />
#Chamar ao script de variables, temos varias opcións:<br />
<br />
# source 00_variables.sh <br />
. ./00_variables.sh # Tamén podería ser: source ./00_variables.sh<br />
<br />
<br />
#Crear esqueleto profes<br />
#Por se executamos o script varias veces, comprobamos se xa existe o directorio<br />
test -d $DIR_HOME_LDAP/profes || mkdir -p $DIR_HOME_LDAP/profes<br />
<br />
<br />
#Crear esqueleto alumnos e comun<br />
#Lemos o ficheiro cursos e procesamos cada curso<br />
for CURSO in $(cat f00_cursos.txt)<br />
do<br />
test -d $DIR_HOME_LDAP/alumnos/$CURSO || mkdir -p $DIR_HOME_LDAP/alumnos/$CURSO<br />
test -d $DIR_COMUN/$CURSO || mkdir -p $DIR_COMUN/$CURSO<br />
done<br />
<br />
test -d $DIR_COMUN/departamentos || mkdir -p $DIR_COMUN/departamentos<br />
</syntaxhighlight><br />
<br />
*Executamos o primeiro script<br />
'''sh 01_crear_esqueleto.sh <br />
<br />
*Comprobamos a súa execución<br />
'''tree /home/iescalquera/<br />
/home/iescalquera/<br />
├── alumnos<br />
│ ├── dam1<br />
│ └── dam2<br />
├── lost+found<br />
└── profes<br />
<br />
5 directories, 0 files<br />
<br />
'''tree /comun<br />
/comun<br />
├── dam1<br />
├── dam2<br />
├── departamentos<br />
└── lost+found<br />
<br />
4 directories, 0 files<br />
<br />
===Axustar permisos esqueleto===<br />
<br />
*Se nos fixamos en todas as carpetas creadas só pode escribir o usuario ''root'' e o os membros do grupo ''root''.<br />
*Por exemplo<br />
'''tree -ugp /comun<br />
/comun<br />
├── [drwxr-xr-x root root ] dam1<br />
├── [drwxr-xr-x root root ] dam2<br />
├── [drwxr-xr-x root root ] departamentos<br />
└── [drwx------ root root ] lost+found<br />
<br />
<br />
*Imos axustar o grupo propietario e os permisos segundo o seguinte esquema:<br />
[[Image:00_Dominios_Linux_Escenarios_parte_02_Permisos_Esqueleto.jpg | 600px]]<br />
<br />
*Imos usar 2 comandos:<br />
**'''chown (change owner) (http://es.wikipedia.org/wiki/Chown)''', para cambiar o usuario e grupo propietario dunha carpeta/ficheiro.<br />
**'''chomod (change mode) (http://es.wikipedia.org/wiki/Chmod)''', para cambiar os permisos dunha carpeta/ficheiro:<br />
*** usuario propietario<br />
*** grupo propietario<br />
*** e os demais usuarios (outros, others)<br />
<br />
'''SCRIPT: 02_axustar_permisos_esqueleto.sh<br />
<syntaxhighlight lang="bash" enclose="div" line highlight=""><br />
#!/bin/bash<br />
<br />
#Chamar ao script das variables<br />
. ./00_variables.sh # Tamén podería ser: source ./00_variables.sh<br />
<br />
<br />
#Cartafol /home/iescalquera<br />
chown root:g-usuarios $DIR_HOME_LDAP # Cambiar grupo propietario<br />
chmod 750 $DIR_HOME_LDAP # Axustar permisos<br />
<br />
#Cartafol profes<br />
chown root:g-profes $DIR_HOME_LDAP/profes<br />
chmod 750 $DIR_HOME_LDAP/profes<br />
<br />
<br />
#Cartafol alumnos<br />
chown root:g-usuarios $DIR_HOME_LDAP/alumnos<br />
chmod 750 $DIR_HOME_LDAP/alumnos<br />
<br />
#Cartafoles cursos<br />
for CURSO in $(cat f00_cursos.txt)<br />
do<br />
chown root:g-usuarios $DIR_HOME_LDAP/alumnos/$CURSO<br />
chmod 750 $DIR_HOME_LDAP/alumnos/$CURSO<br />
done<br />
<br />
<br />
#Cartafol comun<br />
chown root:g-usuarios $DIR_COMUN<br />
chmod 750 $DIR_COMUN<br />
<br />
<br />
#Subcartafol departamentos<br />
<br />
chown root:g-profes $DIR_COMUN/departamentos<br />
chmod 770 $DIR_COMUN/departamentos<br />
<br />
<br />
<br />
#Subcartafoles cursos<br />
# O participante no curso á vista do esquema de permisos<br />
# e do exemplo de arriba debe ser quen de axustar<br />
# os permisos de /comun/<cursos><br />
# Ollo!!!!! nas subcarpetas co grupo others.<br />
# Unha pista para o grupo propietario dos cursos: g-"$CURSO"-profes <br />
#<br />
#IMPORTANTE: o que se lle engada ao script, debe valer para futuros crecementos en curso: asir1, asir2, etc.<br />
#Con só dar de alta no ficheiro f00_cursos.txt os cursos non deberamos tocar nada no presente script.<br />
</syntaxhighlight><br />
<br />
*Executamos o script<br />
'''sh 02_axustar_permisos_esqueleto.sh<br />
<br />
*Comprobamos resultados:<br />
<br />
*Os propietarios e permisos en comun e subcarpetas (lembrar que o directorio "." (punto) é o mesmo directorio, neste caso comun) <br />
'''ls -la /comun<br />
total 24<br />
drwxr-x--- 6 root g-usuarios 4096 Mai 6 08:09 .<br />
drwxr-xr-x 24 root root 4096 Mai 5 14:59 ..<br />
drwxrwxr-x 2 root g-dam1-profes 4096 Mai 6 08:04 dam1<br />
drwxrwxr-x 2 root g-dam2-profes 4096 Mai 6 08:04 dam2<br />
drwxrwx--- 2 root g-profes 4096 Mai 6 08:04 departamentos<br />
drwx------ 2 root root 4096 Mai 6 08:09 lost+found<br />
<br />
==Creación das carpetas persoais dos usuarios (home)==<br />
*Para rematar o esqueleto quédanos crear e poñer permisos ás carpetas persoais dos usuarios<br />
*Lembrar que estes eran os usuarios:<br />
<br />
[[Image:00_Dominios_Linux_parte_01_Usuarios.jpg|600px]]<br />
<br />
<br />
*Na seguinte imaxe amosa onde estará a carpeta persoal de cada un deles:<br />
<br />
[[Image:00_Dominios_Linux_Escenarios_parte_02_Carpetas_Usuarios.jpg|600px]]<br />
<br />
*Pero se nos fixamos no que temos no ldap, para os nosos usuarios indícase que as carpetas persoais deberan estar en '''/home'''<br />
'''getent passwd | tail -n 5<br />
sol:x:10000:10000:Profe - Sol Lua:/home/sol:/bin/bash<br />
noe:x:10001:10000:Profe - Noe Ras:/home/noe:/bin/bash<br />
mon:x:10002:10000:DAM1 Mon Mon:/home/mon:/bin/bash<br />
tom:x:10003:10000:DAM1 Tom Tom:/home/tom:/bin/bash<br />
pia:x:10004:10000:DAM2 Pia Fdez:/home/pia:/bin/bash<br />
<br />
*Pero '''/home''' non vai ser o cartafol que vaiamos '''exportar''' á rede (compartir) senón '''/home/iescalquera'''.<br />
*E dentro de /home/iescalquera a carpeta de cada usuario está nun directorio en función do curso/grupo ao que pertence.<br />
<br />
*Agora temos que cambiar no ldap a ruta aos cartafoles home de cada usuario.<br />
*'''O aconsellable é no momento de dar de alta o usuario indicarlle cal é a ruta correcta á súa carpeta persoal.<br />
<br />
<br />
<br />
*'''IMPORTANTE:'''Agora por calquera dos métodos (consola, LAM, JXplorer) cambiamos o home de cada usuario, con moito tento, para facelo ben á primeira. Para que quede algo así. <br />
'''getent passwd | tail -n 5<br />
sol:x:10000:10000:Profe - Sol Lua:/home/iescalquera/profes/sol:/bin/bash<br />
noe:x:10001:10000:Profe - Noe Ras:/home/iescalquera/profes/noe:/bin/bash<br />
mon:x:10002:10000:DAM1 Mon Mon:/home/iescalquera/alumnos/dam1/mon:/bin/bash<br />
tom:x:10003:10000:DAM1 Tom Tom:/home/iescalquera/alumnos/dam1/tom:/bin/bash<br />
pia:x:10004:10000:DAM2 Pia Fdez:/home/iescalquera/alumnos/dam2/pia:/bin/bash<br />
*Fixarse ben que cada quen ten o cartafol onde lle corresponde, porque senón logo van fallar os scripts de creación das súas carpetas persoais e de axuste de permisos.<br />
*Se por exemplo se fixera a creación dos usuarios con LAM e se usa unha folla de cálculo para crear o ficheiro CSV, o ideal é usar unhas columnas base (nome, apelidos, grupo, etc) para construír as outras columnas (OUs, home, grupos, etc) coa función das follas de cálculo '''concatenar()'''. Logo importaríase como se veu na parte II.<br />
<br />
===/etc/skel===<br />
*A carpeta ''/etc/skel'' contén ficheiros e carpetas que son copiadas ao home do usuario no momento de darse de alta un usuario e crearse nese o seu ''home'' (Cousa que non nos sucedeu ao crear os usuarios de LDAP).<br />
*Este é o contido de '''/etc/skel''' dun Debian.<br />
'''ls -la /etc/skel<br />
total 20<br />
drwxr-xr-x 2 root root 4096 Abr 19 18:46 .<br />
drwxr-xr-x 105 root root 4096 Mai 6 15:10 ..<br />
-rw-r--r-- 1 root root 220 Dec 30 2012 .bash_logout<br />
-rw-r--r-- 1 root root 3392 Dec 30 2012 .bashrc<br />
-rw-r--r-- 1 root root 675 Dec 30 2012 .profile<br />
<br />
*Eses ficheiros execútanse ben cando o usuario inicia sesión ou ben cando a pecha.<br />
<br />
*Pero os nosos usuarios van iniciar sesión en Ubuntu, e o contido desa carpeta nun Ubuntu desktop ten algunha cousa máis e algún ficheiro é distinto.<br />
*Por tanto, como temos instalado o servidor ssh nos ''uclients'' imos traer para a carpeta scripts o contido de ''/etc/skel'' de ''uclient01''.<br />
** Se o servidor ssh non está instalado nos clientes executamos: '''sudo apt-get install ssh <br />
<br />
'''scp -r uadmin@uclient01:/etc/skel ./<br />
The authenticity of host 'uclient01 (172.16.5.20)' can't be established.<br />
ECDSA key fingerprint is 62:06:ce:d2:a5:30:5f:f0:78:7d:8b:db:2f:c4:72:a0.<br />
Are you sure you want to continue connecting (yes/no)? yes<br />
Warning: Permanently added 'uclient01,172.16.5.20' (ECDSA) to the list of known hosts.<br />
uadmin@uclient01's password: <br />
.bash_logout 100% 220 0.2KB/s 00:00 <br />
.profile 100% 675 0.7KB/s 00:00 <br />
.bashrc 100% 3637 3.6KB/s 00:00 <br />
examples.desktop 100% 8980 8.8KB/s 00:00 <br />
<br />
*Observar que se copiaron 4 ficheiros.<br />
<br />
<br />
*Agora renomeamos a carpeta que se trouxo de Ubuntu, para evitar confusións.<br />
'''mv skel skel_ubuntu<br />
<br />
===Script crear home usuarios ldap. Axustar permisos=== <br />
<br />
[[Image:00_Dominios_Linux_Escenarios_parte_02_Permisos_Usuarios.jpg|600px]]<br />
<br />
<br />
*Como se ve na imaxe o que se pretende é que para cada usuario:<br />
**'''Profesor/a''': só el poida acceder á súa carpeta, pero que non a poida borrar.<br />
**'''Alumno/a''': só el pode entrar na súa carpeta con control total, pero os profesores dese grupo, poden entrar en modo lectura execución, para ver o contido da mesma.<br />
<br />
<br />
*Imos aproveitar que con '''getent passwd''' obtemos todos os datos dun usuario, entre eles:<br />
**'''Nome de usuario''': necesario para asignar propiedade e permisos<br />
**'''Home do usuario''': xa nos indica onde se debe crear o cartafol do usuario. Ademais no caso de alumnado unha das carpetas xa indica a que grupo pertence.<br />
**Coa axuda dunha utilidade complexa de manexar pero potente, '''awk''' (http://es.wikipedia.org/wiki/AWK), imos extraer eses 3 campos.<br />
<br />
<br />
<br />
'''SCRIPT: 03_crear_home_usuarios_axustar_permisos.sh<br />
<syntaxhighlight lang="bash" enclose="div" line highlight=""><br />
#!/bin/bash<br />
<br />
<br />
#Lembrar que cada usuario ten o seguinte formato<br />
# Un/unha profe -> sol:x:10000:10000:Profe - Sol Lua:/home/iescalquera/profes/sol:/bin/bash<br />
# Un/unha alumna -> mon:x:10002:10000:DAM1 Mon Mon:/home/iescalquera/alumnos/dam1/mon:/bin/bash<br />
<br />
# Observar que posición ocupan os campos e que están separados por :<br />
<br />
# Imos extraer con awk dos usuarios con ID (campo 3) entre 10000 e 60000 os campos<br />
# Usuario (campo 1) e home (campo 6)<br />
# Deste campo (home) imos extraer o grupo ao que pertence o usuario<br />
# Neste caso o separador de campos é /, e o grupo está no 4º campo.<br />
<br />
<br />
#Volcamos tódolos usuarios (locais e ldap) do sistema a un ficheiro<br />
getent passwd>usuarios.txt<br />
<br />
<br />
#Extraemos os campos anteriores<br />
for USUARIO in $( awk -F: '$3>=10000 && $3<60000 {print $1":"$6}' usuarios.txt )<br />
do<br />
#USUARIO vai ter o seguinte formato<br />
# sol:/home/iescalquera/profes/sol<br />
<br />
NOME_USUARIO=$( echo $USUARIO | awk -F: '{print $1}')<br />
HOME_USUARIO=$( echo $USUARIO | awk -F: '{print $2}')<br />
GRUPO_GLOBAL_USUARIO=$( echo $HOME_USUARIO | awk -F/ '{print $4}')<br />
<br />
#Creamos a carpeta persoal do usuario/a<br />
test -d $HOME_USUARIO || mkdir -p $HOME_USUARIO<br />
<br />
#Copiamos o contido de skel_ubuntu (ocultos incluídos, -a) á carpeta persoal do usuario/a<br />
cp -a skel_ubuntu/\. $HOME_USUARIO<br />
<br />
#Comprobamos se o usuario/a é un profe<br />
if [ $GRUPO_GLOBAL_USUARIO = "profes" ]<br />
then<br />
#Se é un profe deixamos entrar só a ese profe na súa carpeta persoal<br />
chown -R $NOME_USUARIO:g-usuarios $HOME_USUARIO<br />
chmod -R 700 $HOME_USUARIO<br />
else<br />
#Se é un alumno o campo 5 do home coincide con parte do nome do grupo ao que pertence<br />
GRUPO_ALUMNO=$( echo $HOME_USUARIO |awk -F/ '{print $5}')<br />
<br />
#Se é un alumno deixamos entrar en modo lectura execución aos profes dese curso<br />
# en modo recursivo<br />
chown -R $NOME_USUARIO:g-"$GRUPO_ALUMNO"-profes $HOME_USUARIO<br />
chmod -R 750 $HOME_USUARIO<br />
fi<br />
done<br />
<br />
rm usuarios.txt<br />
</syntaxhighlight><br />
<br />
*Executamos o script<br />
'''sh 03_crear_home_usuarios_axustar_permisos.sh<br />
<br />
*Comprobacións<br />
'''tree /home/iescalquera/ -a<br />
/home/iescalquera/<br />
├── alumnos<br />
│ ├── dam1<br />
│ │ ├── mon<br />
│ │ │ ├── .bash_logout<br />
│ │ │ ├── .bashrc<br />
│ │ │ ├── examples.desktop<br />
│ │ │ └── .profile<br />
│ │ └── tom<br />
│ │ ├── .bash_logout<br />
│ │ ├── .bashrc<br />
│ │ ├── examples.desktop<br />
│ │ └── .profile<br />
│ └── dam2<br />
│ └── pia<br />
│ ├── .bash_logout<br />
│ ├── .bashrc<br />
│ ├── examples.desktop<br />
│ └── .profile<br />
├── lost+found<br />
└── profes<br />
├── noe<br />
│ ├── .bash_logout<br />
│ ├── .bashrc<br />
│ ├── examples.desktop<br />
│ └── .profile<br />
└── sol<br />
├── .bash_logout<br />
├── .bashrc<br />
├── examples.desktop<br />
└── .profile<br />
<br />
10 directories, 20 files<br />
<br />
*Todo usuario ten os ficheiros do skel.<br />
<br />
'''ls -la /home/iescalquera/profes/sol/<br />
total 32<br />
drwx------ 2 sol g-usuarios 4096 Mai 7 09:45 .<br />
drwxr-x--- 4 root g-profes 4096 Mai 7 11:26 ..<br />
-rwx------ 1 sol g-usuarios 220 Mai 7 09:45 .bash_logout<br />
-rwx------ 1 sol g-usuarios 3637 Mai 7 09:45 .bashrc<br />
-rwx------ 1 sol g-usuarios 8980 Mai 7 09:45 examples.desktop<br />
-rwx------ 1 sol g-usuarios 675 Mai 7 09:45 .profile<br />
<br />
*Nun cartafol dun profesor/a so el/ela pode acceder. Bueno, e o root, que sempre pode.<br />
<br />
*Observar como para un alumno/a só el pode escribir os profesores do grupo só ler:<br />
<br />
'''ls -la /home/iescalquera/alumnos/dam1/mon/<br />
total 32<br />
drwxr-x--- 2 mon g-dam1-profes 4096 Mai 7 09:45 .<br />
drwxr-x--- 4 root g-usuarios 4096 Mai 7 11:26 ..<br />
-rwxr-x--- 1 mon g-dam1-profes 220 Mai 7 09:45 .bash_logout<br />
-rwxr-x--- 1 mon g-dam1-profes 3637 Mai 7 09:45 .bashrc<br />
-rwxr-x--- 1 mon g-dam1-profes 8980 Mai 7 09:45 examples.desktop<br />
-rwxr-x--- 1 mon g-dam1-profes 675 Mai 7 09:45 .profile<br />
<br />
==Conclusións==<br />
<br />
*Agora podemos crear cantos usuarios desexemos (profes, dam1, dam2) que só temos que executar o script 03 e xa lle queda ao usuario o seu cartafol creado e configurado.<br />
<br />
*Se decidimos engadir un grupo máis: ''asir1'', só temos que engadilo no LDAP e no ficheiro ''f00_cursos.txt'' e executar os scripts 01 e 02.<br />
<br />
*Se non queremos andar manualmente con este ficheiro de cursos podemos facer un script que lea as OUs, e que cree ese ficheiro por nós.<br />
<br />
==Comprobación no servidor dos homes dos usuarios==<br />
<br />
*Como temos a coincidencia de que en ''dserver00'' están as carpetas dos usuarios, o servidor LDAP e o cliente LDAP para iniciar sesión imos comprobar que agora ao entrar cos usuarios do dominio imos á súa carpeta persoal.<br />
<br />
*Como somos '''root''', cando facemos '''su - usuario''' pásanos a ese usuario inmediatamente sen pedirnos o contrasinal.<br />
<br />
*Pero cando non somos ''root'' e pasamos a outro usuario si que nos pide o contrasinal dese usuario.<br />
<br />
'''root@dserver00:~# su - sol<br />
<br />
'''sol@dserver00:~$ pwd<br />
/home/iescalquera/profes/sol<br />
'''sol@dserver00:~$ ls -la<br />
total 32<br />
drwx------ 2 sol g-usuarios 4096 Mai 7 09:45 .<br />
drwxr-x--- 4 root g-profes 4096 Mai 7 11:26 ..<br />
-rwx------ 1 sol g-usuarios 220 Mai 7 09:45 .bash_logout<br />
-rwx------ 1 sol g-usuarios 3637 Mai 7 09:45 .bashrc<br />
-rwx------ 1 sol g-usuarios 8980 Mai 7 09:45 examples.desktop<br />
-rwx------ 1 sol g-usuarios 675 Mai 7 09:45 .profile<br />
<br />
'''sol@dserver00:~$ su - pia<br />
'''Password: <br />
<br />
'''pia@dserver00:~$ pwd<br />
/home/iescalquera/alumnos/dam2/pia<br />
'''pia@dserver00:~$ ls -la<br />
total 32<br />
drwxr-x--- 2 pia g-dam2-profes 4096 Mai 7 09:45 .<br />
drwxr-x--- 3 root g-usuarios 4096 Mai 7 11:26 ..<br />
-rwxr-x--- 1 pia g-dam2-profes 220 Mai 7 09:45 .bash_logout<br />
-rwxr-x--- 1 pia g-dam2-profes 3637 Mai 7 09:45 .bashrc<br />
-rwxr-x--- 1 pia g-dam2-profes 8980 Mai 7 09:45 examples.desktop<br />
-rwxr-x--- 1 pia g-dam2-profes 675 Mai 7 09:45 .profile<br />
<br />
*Vemos que os permisos están correctamente, os grupos, os ficheiros, etc.<br />
*'''Que o lector/a probe a crear carpetas en distintos carpetas do esqueleto con distintos usuarios'''.<br />
<br />
<br />
*Pero que pasa dende os clientes que non teñen esa coincidencia?, pois que teñen que montar esas carpetas por '''NFS'''.<br />
<br />
<br />
<br />
-- [[Usuario:antonio| Antonio de Andrés Lema]] e [[Usuario:Carrion| Carlos Carrión Álvarez]]</div>Carrion