Mostrando las entradas con la etiqueta sudo. Mostrar todas las entradas
Mostrando las entradas con la etiqueta sudo. Mostrar todas las entradas

¿Cómo ejecutar con "sudo" cuando el usuario "is not in the sudoers file".

Hoy tuve que hacer un malabar en un sistema Mageia de la UTU que yo mismo administro.
Los sistemas Linux que pasan por mí, son endurecidos a un nivel bastante paranoico, y una de las primeras cosas que hago, es quitar a los usuarios del grupo "wheel" para que no puedan hacer "sudo"; o sos root, o no sos root: nada de filosofía Linux, acá lo que corre es filosofía UNIX.
Lo que esto significa, es que si no sabés la contraseña de root y hacés sudo, no podrás seguir adelante porque el sistema, lo que te pedirá, será tu contraseña (un contrasentido total heredado del mundo de fantasía en el que está viviendo Linux desde hace muchos años) y no la de root.
Observá los 2 ejemplos en las siguientes 2 imágenes. ¿Te ha sucedido algo así?


Pues bien, hay veces en las cuales hacer "su" y registrarse como root en la terminal (aunque poseas la contraseña de root) no es suficiente, ya que la ejecución de un programa o script puede necesitar "los privilegios de sudo pero en el contexto del usuario que inició sesión en el sistema". Por ejemplo, si el usuario es "estudiante" y el script tiene que correr para "estudiante", no podés hacer "su" en la terminal y "pasarte a sudo completamente", porque el contexto del usuario "estudiante" se perdería.
Tampoco podés hacer "sudo ALGO" siendo usuario "estudiante sin wheel" porque te pasaría lo que se muestra en las imágenes de arriba.

Pues, en Linux hay solución para casi todo, y esta no es la excepción.

Podés agregar a cualquier usuario al grupo wheel, o al archivo de sudoers.
Pero esto rompería la filosofía UNIX en donde "root es root" y "user es user"

Podés "pasarte a root", como dijimos antes, pero eso rompería el contexto del usuario que realmente necesita correr el script "para él y no para root".

Entonces... parecería que no hay solución... ¿o sí?

Estarás pensando... "Páh... Soy yo el administrador; soy yo el que prohíbe hacer "sudo". En mis equipos, si no sabés la contraseña root, no podés elevar privilegios usando tu contraseña... Tiene que haber manera. Soy el "admin", sé la contraseña de root, solo debo hacer que el sistema lo entienda sin reconfigurar nada, haciendo algo al vuelo... 

Esto es posible. La "línea salvadora" es esta:

su -c "SUDO_USER=<NOMBRE_USUARIO> bash /ruta_al_script" root

Esto no solamente soluciona el problema, sino que también ejecuta al script como root, pero con SUDO_USER configurado para el usuario real, procedimiento que será utilizado por el script para saber a quién pertenece el entorno: solo tenés que sustituir <NOMBRE_USUARIO> por el nombre del usuario real.

Ejemplo con el usuario "estudiante":
su -c "SUDO_USER=estudiante bash /ruta_al_script" root

Prácticas con sistemas Linux para curso de introducción a redes y servidores.

Prácticas con sistemas Linux para curso de introducción a redes y servidores.

Asignatura: Redes II, Bachillerato Tecnológico, UTU, año 2019 en adelante.

Trabajo de autoría del profesor Hugo Napoli.


Instalación de paquetes (ejemplos con firewalld).

 Sistemas basados en Debian:

    sudo apt install firewalld

Sistemas basados en Arch:

    sudo pacman -S firewalld

OpenSUSE:

    sudo zypper install firewalld

NOTA: para instalar firewalld bajo OpenRC, por ejemplo, la sintaxis no es "firewalld", sino "firewalld-openrc". Lo mismo puede suceder con otros init y otros paquetes.

Manejo de demonios y servicios (ejemplos con firewalld).

    Visualizar estado del cortafuegos:
        systemd : systemctl status firewalld
        openrc  : rc-service firewalld status
        sysvinit: service firewalld status
        Windows : netsh advfirewall show currentprofile

Listar.

    Activos/inactivos:
        systemd : systemctl list-units
        sysvinit: service --status-all # +: activos; -:inactivos (¿ se podrá hacer "grep +" ?)
        openrc  : rc-update -v show

    Fallidos:
        systemd : systemctl --failed
        sysvinit:
        openrc  : rc-status --crashed
        
Encender.
    systemd : sudo systemctl start firewalld
    openrc  : sudo rc-service firewalld start
    sysvinit: sudo service firewalld start

Detener.
    systemd : sudo systemctl stop firewalld
    openrc  : sudo rc-service firewalld stop
    sysvinit: sudo service firewalld stop

Reiniciar.
    systemd : sudo systemctl restart firewalld
    openrc  : sudo rc-service firewalld restart
    sysvinit: sudo service firewalld restart

Habilitar.
    systemd : sudo systemctl enable firewalld
    openrc  : sudo rc-update add firewalld
    sysvinit: sudo update-rc.d firewalld defaults
    Windows : netsh advfirewall set currentprofile state on

Inhabilitar.
    systemctl: sudo systemctl disable firewalld
    openrc   : sudo rc-update del firewalld
    sysvinit : update-rc.d -f firewalld remove
    Windows  : netsh advfirewall set currentprofile state off

Habilitar e inhabilitar icmp en Linux/Windows


WINDOWS
    netsh advfirewall firewall add rule name="NOMBRE_DE REGLA" protocol=icmp4:8,any dir=in action=allow/block
    netsh advfirewall firewall add rule name="NOMBRE_DE REGLA" protocol=icmp6:8,any dir=in action=allow/block

    netsh advfirewall firewall show rule name=all

LINUX
    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    iptables -A INPUT -p icmpv6 --icmp-type echo-request -j DROP

Encender, detener, habilitar, inhabilitar y consultar estado de ssh.


misma sintaxis que para el cortafuegos, sustituyendo por 'sshd'.

Práctica con la cual solamente habilitando ssh en Linux se pueda acceder a un usuario determinado del sistema (ssh <USUARIO>@<IP>)

Probar qué sucede con Windows. ¿Cómo activar ssh en Windows?


Abrir puertos en el firewall (sin permanencia).

Observar la zona que se está utilizando en el firewall.

sudo firewall-cmd --list-all

sudo firewall-cmd --zone <ZONA> --add-port=8000/tcp
sudo firewall-cmd --zone <ZONA> --add-port=8000/udp

sudo firewall-cmd --reload

Donde <ZONA> representa el nombre de una zona válida (la zona se escribe sin los signos de menor y mayor).

Para que la regla quede guardada (permanencia), agregar el parámetro:

--permanent

Consultar zonas existentes:

firewall-cmd --get-zones

Cambiar de zona:

firewall-cmd --set-default-zone public

                                        Ver cómo abrir puertos en Windows.

Gestionar usuarios conectados por ssh

1. Visualizar qué equipos están conectados por ssh:
    who
    (también probar "who -u")
    (tomar nota del renglón con el "pts" correspondiente)
2. Enviar un mensaje a la terminal del equipo conectado, antes de expulsarlo:
    echo "ATENCIÓN: en 60 seguntos, finalizará su conexión con el servidor." | write prueba_redes pts/<ID> && sleep 60
3. Listar el IDentificador del proceso que está permitiendo que dicho equipo esté conectado:
    ps -t pts/<ID>
4. Finalizar la conexión, según el ID correspondiente:
    sudo kill <ID>

Iniciar aplicaciones gráficas por ssh en máquina destino.

Lo primero a tener en cuenta, es que es necesario iniciar con el parámetro "-X" para poder controlar el servidor gráfico:

ssh -X usuario@ip

Luego:

export DISPLAY=:0

kolourpaint

Ejecutar iperf en modo cliente y servidor:

Máquina SERVIDOR:
iperf3 -s -p yyyy
siendo "yyyy" el número de puerto. Ejemplo:
iperf3 -s -p 5201

Máquina CLIENTE:
iperf3 -c xxx.xxx.xxx.xxx -p yyyy
siendo "xxx.xxx.xxx.xxx" la IP de la máquina servidor, e "yyyy", nuevamente, el número de puerto de la máquina servidor. Ejemplo:
iperf3 -c 192.168.44.155 -p 5201

ping

Averiguar ip de sitio:
ping www.google.com

Hacer ping a nivel individual:
ping <IP>

Hacer ping a nivel de broadcast:
ping -b X.X.X.255

Hacer ping con el máximo tamaño de paquete posible:
ping 192.168.1.1 -s 65507

ip

Agregar una dirección IP secundaria a un dispositivo:
sudo ip address add 192.168.1.254/24 dev wlan0

mtr

Consultar la ruta utilizada hasta llegar a un sitio específico (no funciona sin privilegios root):
sudo mtr www.google.com
sudo mtr www.wikipedia.org

Misma consulta, pero mostrando las IPs de todos los hosts involucrados:
sudo mtr -b www.wikipedia.org

tcpdump

Listar las interfases disponibles para el comando:
sudo tcpdump -D

Capturar tráfico de una determinada interfaz:
sudo tcpdump -i wlan0

Capturar tráfico de un determinado host:
sudo tcpdump -i wlan0 host 10.30.175.36

Capturar tráfico de una determinada red:
sudo tcpdump -i wlan0 net 10.30.172.0 mask 255.255.255.0

Capturar tráfico de un determinado puerto:
sudo tcpdump -i wlan0 port 80

Capturar tráfico de un determinado puerto de un determinado host:
sudo tcpdump -v -i wlan0 host 10.30.175.36 and port 48478
("v" = "verbose")

ss

Para que "ss" funcione, hay que revisar que esté instalado el paquete iproute2, o en su defecto, iproute.

Visualizar todas las conexiones de un host en particular:
ss src 10.30.175.36

Visualizar todos los PIDs (útil con ssh):
ss -p

nmap y arp-scan

Obtener IPs de la LAN:
nmap -sP X.X.X.0/24

Un método más agresivo:
sudo arp-scan --localnet
sudo arp-scan --interface wlan0 --localnet

Menos ético:
sudo arp-scan --interface wlan0 --localnet | grep Apple/Xiaomi/Samsung/HUAWEI, etc.

Obtener fingerprint e información del sistema a través de su IP:
sudo nmap -O <IP>
Si el equipo no responde, probar:
sudo nmap -O <IP> -Pn

Obtener información de puertos y dirección MAC de un host:
nmap -sV <IP>
sudo nmap -sV <IP>
Si el equipo no responde, probar:
sudo nmap -sV <IP> -Pn

El comando nmap, ¿escanea todos los puertos? (¿Qué sucede con los 1000 puertos "raíz")


Comprobar si un determinado puerto está abierto, aunque no esté activo:
nmap -p 8000 127.0.0.1
nmap -p 8000 localhost


Probar con la propia IP de la máquina y también con la IP de localhost. ¿Qué puede deducirse?

sudo nmap -p 0-65535 127.0.0.1
sudo nmap -p 0-65535 <IP>

Los servicios que solo están vinculados a "localhost" solo se muestran con el comando nmap en 127.0.0.1 (muchas veces sucede con motores de bases de datos, tales como mariaDB, etc.), y los asociados a la IP del mismo host, haciendo nmap a ésta.

lsof

sudo lsof -i:<PUERTO>
sudo lsof -i -P -n | grep LISTEN

Cerrar puertos.
sudo ss --kill state listening src :8000

Listar proceso corriendo en un determinado puerto:
fuser 8080/tcp
Matar proceso corriendo en un determinado puerto:
fuser -k 8080/tcp

nslookup

Obtener IP WAN:
nslookup myip.opendns.com resolver1.opendns.com
cual-es-mi-ip.net

Obtener ip de sitio:
nslookup www.wikipedia.org

Ejemplos nslookup:
https://www.thegeekstuff.com/2012/07/nslookup-examples/

Encender y apagar tarjeta de red.
ip link set <NOMBRE_TARJETA> up
ip link set <NOMBRE_TARJETA> down

Obtener MAC ADDRESS
arp-scan a <IP>

Revisar (I), abrir (II) y cerrar (III) puertos.

I)

Con lsof.

Para 1 puerto específico (el 3891).

sudo lsof -nP -i:3891
sudo lsof -nP -iTCP:3891
sudo lsof -nP -iUDP:3891

Para todos los puertos.

sudo lsof -nP -iTCP -sTCP:LISTEN

-n: sin "host names"
-P: sin "port names"
-i: IP v4 o v6
-s: "size"

Con ss.

sudo ss -tunpl

-t: TCP
-u: UDP
-n: "numeric"
-p: "process"
-l: "listening"

Con nmap.

nmap localhost -p 38911
sudo nmap -n -PN -sT -sU -p- localhost

-n:
evita resolución de DNS.
-PN: se saltea la fase de "descubrimiento".
-sT and -sU - "scan" modo TCP y UDP.
-p: todos los puertos.

Con netcat.

nc -z -u -v localhost 1-65535 

-z: modo "zero-I/O".
-u: UDP | -t: TCP.
-v: "verbose", verborragia.

Con netstat (en desuso).

sudo netstat -tunpl

-t: TCP
-u: UDP.
-n: evita búsqueda de DNS y muestra solo direcciones IP, haciendo más rápida la ejecución.
-p: despliega el ID del proceso y el nombre del programa que está utilizando el puerto.
-l: puertos en estado "listening".

II)

sudo iptables -A INPUT -p tcp --dport 3891 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 3891 -j ACCEPT

-A: "append", agregar.
INPUT: regla de entrada.
-p: "protocol", protocolo (tcp/udp).
--dport: "destination port", puerto de destino.
-j: "jump target", saltar hacia el objetivo, hacer inmediatamente.
ACCEPT: aceptar el tráfico.

En lugar de INPUT, se pueden utilizar para otras acciones: OUTPUT y FORWARD.
En lugar de ACCEPT, se pueden utilizar para otras acciones: DROP y RETURN.

III)

Para 1 puerto específico.

sudo ss --kill state listening src :3891

fuser -k -n tcp 3891
fuser -k -n udp 3891

iptables -I INPUT -p tcp --dport 3891 -j DROP

sudo netstat -ap | grep :3891
kill <PID_SALIDA_NETSTAT>

Si la línea anterior no funciona, utilizar "kill -9" en lugar de "kill".

Para todos los puertos (2 maneras).

iptables -F INPUT;iptables -P INPUT REJECT

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

-F equivale a "--flush", y sirven ambos atributos para eliminar todas las reglas preexistentes.
-P: "policy", política predeterminada.

ACCEPT: permite el paso de paquetes sin realizar acciones adicionales.
DROP: descarta paquetes sin enviar notificaciones.
REJECT: descarta paquetes, enviando mensajes de rechazo al remitente.

Se recomienda leer:

https://phoenixnap.com/kb/linux-check-open-ports
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux

Flag Counter Visitas previas a la existencia de este contador: 3433

Artículos aleatorios

    Páginas: