miércoles, 1 de enero de 2025

Liberar espacio ocupado "fantasma" en Linux



Cómo encontrar y liberar espacio ocupado no presente en directorios en Linux.



Me he dado cuenta de que un servidor con un disco de 150 GB tenía 118 GB usados:

HOST # ip-10-250-7-164:/home/ec2-user # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 7.9G 4.0K 7.9G 1% /dev/shm tmpfs 3.2G 8.8M 3.2G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/xvda3 150G 119 32G 80% / /dev/xvda2 20M 146K 20M 1% /boot/efi tmpfs 1.6G 0 1.6G 0% /run/user/1000

Mirando qué estaba ocupando este espacio veo:

HOST # du -h --max-depth=1 | sort -hr du: cannot access './proc/22284/task/22284/fd/4': No such file or directory du: cannot access './proc/22284/task/22284/fdinfo/4': No such file or directory du: cannot access './proc/22284/fd/3': No such file or directory du: cannot access './proc/22284/fdinfo/3': No such file or directory 32G . 19G ./var 5.8G ./srv 3.6G ./usr 2.1G ./home 591M ./opt 524M ./lib 321M ./run 106M ./boot 24M ./etc 15M ./tmp 9.0M ./sbin 8.5M ./lib64 7.3M ./root 744K ./bin 16K ./dev 8.0K ./CPAN 0 ./sys 0 ./selinux 0 ./proc 0 ./mnt

¿Dónde está el resto del espacio usado?

Si un proceso activo mantiene abierto un archivo que ha sido eliminado, el espacio sigue ocupado hasta que el proceso en cuestión se detenga.

Para encontrar estos archivos:

HOST # lsof | grep deleted nscd 628 nscd 10u REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted) nscd 628 nscd 11r REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted) nscd 628 651 nscd nscd 10u REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted) nscd 628 651 nscd nscd 11r REG 0,25 217032 860 /run/nscd/dbEp42mF (deleted) ...

En este caso, se observa que el proceso nscd tiene archivos abiertos.
Para liberar el espacio usado por todos estos archivos, reinicio el servicio:

HOST # systemctl restart nscd

Hecho esto, el espacio usado de forma "fantasma" se ha liberado:

HOST # # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 7.9G 4.0K 7.9G 1% /dev/shm tmpfs 3.2G 8.8M 3.2G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/xvda3 150G 32G 119G 22% / /dev/xvda2 20M 146K 20M 1% /boot/efi tmpfs 1.6G 0 1.6G 0% /run/user/1000

Si esto no hubiera funcionado, se podría reiniciar el servidor para liberar todo el espacio ocupado.
0

miércoles, 25 de diciembre de 2024

Habilitar SSL en switches Aruba



Habilitar acceso HTTPS a switches Aruba.



En este artículo veremos cómo habilitar la gestión web segura (HTTPS) en un switch HPE utilizando un certificado self-signed (autofirmado). Esto es útil para evitar el uso de HTTP sin cifrar.

Paso 1: Configurar el perfil de identidad

Lo primero que debemos hacer es definir el perfil de identidad del certificado que usaremos:

SWITCH2# config SWITCH2(config)# crypto pki identity-profile myid subject Enter Common Name(CN) : 10.10.10.1 Enter Org Unit(OU) : LT Enter Org Name(O) : LT Enter Locality(L) : LT Enter State(ST) : LT Enter Country(C) : LT

En este paso, proporcionamos la información básica del certificado, incluyendo:

- CN (Common Name): Normalmente, la IP o el dominio del switch.
- OU (Organizational Unit), O (Organization), L (Locality), ST (State), C (Country): Datos de la organización.

Paso 2: Generar un certificado autofirmado

Ahora, generamos un certificado autofirmado con el nombre "mycert":

SWITCH2(config)# crypto pki enroll-self-signed certificate-name mycert

Esto creará y almacenará un certificado en el switch.

Paso 3: Habilitar la gestión web segura (HTTPS)

Para asegurarnos de que la gestión web solo esté disponible mediante HTTPS, ejecutamos:

SWITCH2(config)# web-management ssl SWITCH2(config)# no web-management plaintext

- web-management ssl habilita HTTPS.
- no web-management plaintext deshabilita HTTP, asegurando acceso solo vía HTTPS.

Paso 4: Verificar la configuración

Para confirmar que HTTPS está habilitado correctamente, usamos:

SWITCH2(config)# show web-management

Salida esperada:

Web Management - Server Configuration HTTP Access : Disabled HTTPS Access : Enabled SSL Port : 443 Idle Timeout : 600 seconds Management URL : http://h17007.www1.hpe.com/device_help Support URL : https://www.hpe.com/us/en/networking.html User Interface : Improved

Esta salida confirma que HTTP está deshabilitado y que solo se permite acceso por HTTPS.
0

miércoles, 4 de octubre de 2023

Comprobar si un usuario pertenece a un grupo



Cómo verificar si un usuario pertenece a un grupo de Active Directory con PowerShell.



Imaginemos que tenemos un archivo de texto con una lista de usuarios de Active Directory y queremos saber si esos usuarios son miembros de un grupo.

Podemos leer el archivo, en el cual cada usuario debe ocupar una línea, y verificar que el usuario sea miembro del grupo, con un script de PowerShell.

Para ello, podemos ejecutar el siguiente script desde un controlador de dominio:

$groupName = "Grupo"

$userList = Get-Content -Path "C:\Scripts\usuarios-origen.txt"
$outputFilePath = "C:\Scripts\usuarios-en-grupo.txt"

foreach ($user in $userList) {
    $isMember = Get-ADUser $user | Get-ADPrincipalGroupMembership | Where-Object { $_.Name -eq $groupName }
    
    if ($isMember) {
        "$user" | Tee-Object -FilePath $outputFilePath -Append
    }
}

El nombre del grupo es "Grupo" y debe especificarse dentro de la variable "$groupName".

La ruta con el archivo de texto que contiene la lista de usuarios debe especificarse en "$userList".

Asimismo, el script usa el cmdlet "Tee-Object" el cual muestra por pantalla el output al mismo tiempo que lo graba en un archivo de texto, en este caso, el especificado en la variable "$outputFilePath".
0

miércoles, 14 de diciembre de 2022

Eliminar miembros de un grupo de Active Directory



Cómo eliminar automáticamente mimebros de un grupo de Active Directory con PowerShell.



Tenemos un grupo de usuaros de Active Directory con cientos de miembros. Queremos eliminar varios miembros de golpe, por ejemplo 50 miembros, y no queremos hacerlo manualmente.

Para automatizar el eliminado de miembros de un grupo de Active Directory podemos usar un script de PowerShell con la función Remove-ADGroupMember:

$users = Get-Content "C:\Temp\mimebros.csv"

 foreach ($user in $users) {
    $obj = Get-ADUser $user
    Remove-ADGroupMember -ID Nombre_Grupo -Members $obj -Confirm:$false
}

Dentro de miembros.csv se debe escribir un nombre de usuario en cada línea.

Lo que hace el script es leer línea a línea el archivo csv y para cada línea, es decir, para cada usuario, eliminarlo del grupo "Nombre_Grupo" sin pedir confirmación.

Una vez ejecutado el script, los usuarios contenidos en el archivo csv ya no aparecerán en el grupo llamado "Nombre_Grupo".

miércoles, 2 de noviembre de 2022

Unable to open primary script (Permission denied)



Cómo configurar nginx para funcionar como webserver en SLES 15.



Instalé NGINX en un SLES 15 SP4 para hospedar una web, pero al ir a ver el index.php me encontré con el siguiente mensaje de error en el navegador:

An error occurred.

Sorry, the page you are looking for is currently unavailable.
Please try again later.


If you are the system administrator of this resource then you should check the error log for details.

Faithfully yours, nginx.

Al mirar los logs de error de nginx vi:

FastCGI sent in stderr: "Unable to open primary script: /srv/www/htdocs/index.php (Permission denied)" *3 FastCGI sent in stderr: "Unable to open primary script: /srv/www/htdocs/index.php (Permission denied)" while reading response header from upstream, client: 1.1.1.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "web.com"

Después de jugar con permisos durante algunas horas, di con que podría ser un problema de AppArmor, pero deshabilitarlo no surgió efecto.

Lo que sí funcionó fue poner AppArmor en modo "aa-complain" para php-fpm:

HOST # aa-complain php-fpm Setting /usr/sbin/php-fpm to complain mode. Warning: profile php-fpm represents multiple programs Warning: profile php-fpm represents multiple programs

Una vez hecho esto, reinicié el servicio nginx y la web empezó a funcionar :)


Fuentes:

https://documentation.suse.com/sles/15-SP4/html/SLES-all/cha-apparmor-intro.html
0

miércoles, 31 de agosto de 2022

Ver parches instalados en un SUSE Linux



Cómo ver el historial de todos los parches instalados en SLES (SUSE Linux Enterprise Server).



En una auditoría de seguridad me pidieron que presentara un listado que mostrara todos los parches instalados en un sistema SUSE Linux Enterprise Server durante el año en curso. Tras investigar un poco, di con las siguientes maneras de encontrar dicha información.


Histórico


SLES guarda un histórico de actualizaciones en /var/log/zypp/history:

HOST # cat /var/log/zypp/history 2022-08-31 12:08:56 | install | hwinfo | 21.82-150300.3.3.1 | x86_64 ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|4cb0aad9e2148b3290877e3903a9792bfb31bfc7b9cb883a5088b6e04387d682| 2022-08-31 12:08:57 | install | glibc-locale-base | 2.31-150300.37.1 | x86_64 ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|e13d47fd5e6a0cc73f5c469d16360b40c7c77ae560425c34c96e5fd67e8edae6| 2022-08-31 12:08:57 | install | glibc-lang | 2.31-150300.37.1 | noarch ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|17185b24afb65caf58422923d28942ea7dc08efba88fde4608fca106f1b84879| 2022-08-31 12:08:57 | install | Mesa-libglapi0 | 20.2.4-150300.59.3.1 | x86_64 ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|6170c01d46ec4b79feab1a1d5381e4328ca325f9134f73b4d80b01729c32446b| 2022-08-31 12:08:57 | install | libz1-32bit | 1.2.11-150000.3.33.1 | x86_64 ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|fd6f29c14574b6daa8c8af6a17949ac9d9d68c71b7ac143a714eaa4815fee937| 2022-08-31 12:08:57 | install | libudev1-32bit |246.16-150300.7.51.1 | x86_64 ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|39993ba30db3639e359662c4a70333b5f54718622309984e0c6e9a43bd08be00| 2022-08-31 12:08:57 | install | libsystemd0-32bit |246.16-150300.7.51.1 | x86_64 ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|19aef524977d87bf6c4ba27e810c6e0ad849d68389cdbda5469a778895d01095| 2022-08-31 12:08:57 | install | libpcre1-32bit |8.45-150000.20.13.1 | x86_64 ||Basesystem_Module_15_SP3_x86_64:SLE-Module-Basesystem15-SP3-Updates|75a6cf6909f11a956935c6612cbac7509f33e7dca1dee6165c2698122a0be1ca| ...

Usando grep, podemos filtrar los resultados por año:

HOST # cat /var/log/zypp/history | grep 2022 | grep -E 'patch|install'


Listado


Por otro lado, podemos ver una lista con todos los parches instalados usando el siguiente comando:

HOST # zypper search --type patch --installed-only Loading repository data... Reading installed packages... S | Name | Summary | Type --+---------------------------------------------+-----------------------------+------ i | SUSE-SLE-Module-Basesystem-15-SP3-2021-1474 | Security update for ceph | patch i | SUSE-SLE-Module-Basesystem-15-SP3-2021-1481 | Recommended update for lvm2 | patch i | SUSE-SLE-Module-Basesystem-15-SP3-2021-1491 | Security update for p7zip | patch i | SUSE-SLE-Module-Basesystem-15-SP3-2021-1493 | Security update for avahi | patch i | SUSE-SLE-Module-Basesystem-15-SP3-2021-1523 | Security update for libxml2 | patch ...

Si queremos listar los parches por el CVE al que hacen referencia:

HOST # zypper list-patches --cve The following matches in issue numbers have been found: Issue | No. | Patch | Category | Severity | Status ------+---------------+-------------------+-------------+-----------+---------- cve | CVE-2015-0287 | SUSE-SLE-Module.. | recommended | moderate | needed cve | CVE-2014-3566 | SUSE-SLE-SERVER.. | recommended | moderate | not needed ...


Fuentes:

https://documentation.suse.com/sles/15-SP3/pdf/book-sle-admin_color_en.pdf
0