Por que cambia unha varredura de portos cando se executa con sudo
Cando os sockets raw non están dispoñibles, Nmap substitúe en silencio a varredura SYN por unha varredura TCP connect, así que root e un usuario normal miden rutas distintas.
Nmap non sempre envía o paquete que cree que pediu. Cando os sockets raw non están dispoñibles, substitúe a varredura SYN predeterminada por unha varredura TCP connect, así que unha execución como usuario normal e outra con sudo poden responder preguntas distintas sobre o mesmo porto. Os resultados parecen un problema de permisos, e normalmente son un cambio de método. Facer explícito o método é a única forma de comparar as dúas execucións.
Dúas sondas, un porto, rutas de código distintas
Unha varredura SYN constrúe a cabeceira TCP por si mesma, énviaa desde un socket raw e le a resposta da rede antes de que a pila TCP do núcleo rexistre nunca unha conexión completada. Unha varredura connect pide ao sistema operativo abrir un socket ordinario e informa do que devolve connect(). As dúas poden cualificar un porto como aberto, pero só unha deixa un intento semiaberto e só unha está suxeita á política de nivel de socket asociada ao proceso emisor.
A ruta raw necesita CAP_NET_RAW, e por iso a varredura predeterminada degrada en silencio cando falta esa capacidade. A propia referencia de técnicas de varredura de Nmap documenta a substitución: a varredura connect é o recurso porque non necesita ningún privilexio especial. O cambio ocorre sen aviso na maioría das execucións, e iso é o que o fai tan fácil de malinterpretar. Unha vez sabe que o recurso existe, “aberto como root, pechado como usuario” deixa de soar a fallo de permisos e comeza a soar a dúas medicións distintas.
Que cambia realmente sudo na varredura
Elevar os privilexios restaura a ruta do socket raw, e iso cambia máis que o veredicto. A selección do porto de orixe, o tempo dos paquetes, o comportamento de retransmisión e a forma de clasificar unha resposta filtrada veñen todos de código distinto. Un equipo intermedio que limita a taxa de SYN trata as dúas execucións de forma desigual mesmo cando o host de destino é idéntico.
O rexistro no lado do destino tamén diverxe. Un handshake completado é visible para o servizo e para calquera contabilidade de sockets, mentres que unha sonda semiaberta reiniciada a miúdo non o é. Se compara execucións contra un host cuxos rexistros tamén le, parte da diferenza que observa é a propia observación.
Manteña o método constante nas dúas execucións
Force a mesma técnica nas dúas invocacións e a comparación comeza a significar algo. O indicador -sT solicita explicitamente a varredura connect, -Pn elimina o descubrimento de hosts, -n elimina a resolución de nomes e un único -p elimina as diferenzas de lista de portos.
nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77
Cambie o enderezo e o porto por un host que teña autorización para probar; o rango de documentación de arriba é un marcador, non un obxectivo. Se as dúas execucións agora coinciden, a diferenza orixinal viña do método de varredura. Se seguen sen coincidir, algo máis está clasificando o tráfico, e a sección seguinte é onde mirar.
O contexto da conta non é só un indicador de privilexios
Un despregamento de VPN pode clasificar paquetes por UID, por cgroup ou por unha regra asociada ao proceso que abriu o socket. Entón o tráfico de root e o do usuario saen por táboas de encamiñamento distintas ou chocan con conxuntos de regras distintos, e ningunha disciplina de método de varredura os concilia.
Inspeccione a política en lugar do privilexio. En Linux, nftables exprésao con meta skuid e iptables coa coincidencia de propietario, e calquera dos dous pode enviar un único UID por un túnel mentres o outro segue usando a ruta física predeterminada.
sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77
Confirme a sonda antes de comparar resultados
Antes de sacar conclusións, demostre que sonda se executou. Nmap nomea a técnica na súa propia saída, e --reason engade a evidencia tras cada estado, que é a parte que lle di se un handshake se completou realmente.
nmap --reason -sT -Pn -n -p 8443 198.51.100.77
sudo nmap --reason -sS -Pn -n -p 8443 198.51.100.77
getcap "$(command -v nmap)"
capsh --print | grep -i net_raw
Dúas execucións que informan do mesmo estado por razóns distintas non son unha contradición, e dúas execucións que informan de estados distintos pola mesma razón apuntan ao encamiñamento ou á política, non á varredura. Manteña idénticos o destino, o porto, o espazo de nomes e o tempo, e logo cambie unha variable cada vez. Executar o servizo como root non é a reparación dunha discrepancia de política; a reparación é expresar a política desexada mediante o propietario do servizo.