servidor - Obscurecer la contraseña del proxy de red en archivos de texto sin formato en Linux/UNIX
curl linux ejemplos (9)
¿La autenticación de clave pública es una alternativa válida para usted?
Normalmente, en una red grande, una computadora necesita operar detrás de un proxy autenticado; cualquier conexión con el mundo exterior requiere un nombre de usuario / contraseña que a menudo es la contraseña que usa un usuario para iniciar sesión en el correo electrónico, la estación de trabajo, etc.
Esto significa tener que poner la contraseña de la red en el archivo apt.conf
, así como las variables de entorno http_proxy, ftp_proxy
y https_proxy
definidas en ~/.profile
Me doy cuenta de que con apt.conf
puede establecer chmod 600
(que no es por defecto en Ubuntu / Debian) pero en nuestro sistema hay personas que necesitan privilegios de raíz.
También me doy cuenta de que es técnicamente imposible obtener una contraseña de alguien que tenga acceso de root, sin embargo, me preguntaba si había alguna forma de ocultar la contraseña para evitar el descubrimiento accidental. Windows opera con usuarios como administradores pero de alguna manera almacena contraseñas de red (probablemente almacenadas en el fondo del registro oscurecidas de alguna manera) para que en el uso típico no se tope con el texto sin formato
Solo pregunto desde el otro día, descubrí completamente por casualidad que alguien más usa la contraseña de esta manera cuando comparo los archivos de configuración en los sistemas.
@monjardin - Me temo que la autenticación de clave pública no es una alternativa en esta red. Además, dudo que sea compatible con la mayoría de las herramientas de línea de comandos.
@Neall: no me importa que los otros usuarios tengan acceso a Internet, pueden usar mis credenciales para acceder a la web, simplemente no quiero que pasen por mi contraseña en texto plano.
A menos que las herramientas específicas que está utilizando permitan un formato ofuscado, o puede crear algún tipo de flujo de trabajo para pasar de ofuscado a simple bajo demanda, probablemente no tenga suerte.
Una cosa que he visto en casos como este es crear credenciales dedicadas por servidor, por usuario o por servidor / por usuario que solo tienen acceso al proxy desde una IP específica. No resuelve el problema de ofuscación principal pero mitiga los efectos de que alguien vea la contraseña porque vale muy poco.
En cuanto a la última opción, se nos ocurrió una codificación de contraseña "crypt inversa" en el trabajo que utilizamos para cosas como esta. Es solo ofuscación porque todos los datos necesarios para decodificar el pw se almacenan en la cadena codificada, pero evita que las personas vean accidentalmente las contraseñas en texto plano. Por lo tanto, puede almacenar, por ejemplo, una de las contraseñas anteriores en este formato y luego escribir un contenedor para apt que compila apt.conf dinámicamente, llama al apt real y, al salir, elimina apt.conf. Todavía terminas con el pw en texto plano por un tiempo, pero minimiza la ventana.
Mientras estas tres cosas sean ciertas, no tienes suerte:
- El servidor necesita acceso a la web
- Los usuarios necesitan control absoluto sobre el servidor (raíz)
- No quieres que los usuarios tengan acceso a la web del servidor
Si no puede eliminar el n. ° 2 o n. ° 3, su única opción es eliminar n. ° 1. Configure un servidor interno que aloje todas las actualizaciones de software. Mantenga ese bloqueado de sus otros usuarios y no permita que otros servidores tengan acceso a la web.
Cualquier otra cosa que intentes hacer es solo engañarte a ti mismo.
Prefiere las aplicaciones que se integran con Gnome Keyring . Otra posibilidad es usar un túnel SSH para una máquina externa y ejecutar aplicaciones a través de eso. Eche un vistazo a la opción -D
para crear una interfaz de proxy SOCKS local, en lugar de una sola porción -L
hacia adelante.
Hay muchas formas de ocultar una contraseña: puede almacenar las credenciales en formato rot13, o BASE64, o usar el mismo algoritmo de aleatorización que usa CVS. El verdadero truco es hacer que sus aplicaciones tomen conciencia del algoritmo de aleatorización.
Para las variables de entorno en ~/.profile
, puede almacenarlas codificadas y luego decodificarlas antes de establecer las variables, por ejemplo:
encodedcreds="sbbone:cnffjbeq"
creds=`echo "$encodedcreds" | tr n-za-mN-ZA-M a-zA-Z`
Eso establecerá creds
en foobar:password
, que luego puede incrustar en http_proxy
etc.
Supongo que sabes esto, pero vale la pena repetirlo: esto no agrega ningún tipo de seguridad. Simplemente protege contra ver involuntariamente la contraseña de otro usuario.
Solucionamos este problema al no solicitar contraseñas de proxy en rpm, apt u otras actualizaciones similares (bases de datos de virus, elementos de Windows, etc.). Es una pequeña lista blanca de repositorios conocidos para agregar al proxy.
Supongo que podría crear un proxy local, señalar estas herramientas a través de eso, y luego hacer que el proxy local le pregunte interactivamente al usuario la contraseña del proxy externo que luego se aplicaría. Opcionalmente, podría recordar esto durante unos minutos en el almacenamiento interno ofuscado.
Un vector de ataque obvio sería que un usuario privilegiado modifique este proxy local para hacer otra cosa con la contraseña ingresada (como lo haría con cualquier otra cosa, como un cliente de correo electrónico que lo solicite o el propio sistema de ventanas), pero al menos usted Estar a salvo de la visión inadvertida.
Con el siguiente enfoque, nunca tendrá que guardar su contraseña de proxy en texto sin formato. Solo tiene que escribir una contraseña interactivamente tan pronto como necesite acceso http / https / ftp:
- Use openssl para encriptar su contraseña de proxy de texto plano en un archivo, con por ejemplo encriptación AES256:
openssl enc -aes-256-cbc -in pw.txt -out pw.bin
- Use una contraseña (diferente) para proteger el archivo codificado
- Eliminar texto sin formato pw.txt
- Cree un alias en, por ejemplo ~ / .alias para establecer sus variables de entorno http_proxy / https_proxy / ftp_proxy (establezca los valores apropiados para $ USER / proxy / $ PORT)
alias myproxy = ''PW = `openssl aes-256-cbc -d -in pw.bin`; PROXY = "http: // $ USER: $ PW @ proxy: $ PORT"; exportar http_proxy = $ PROXY; exportar https_proxy = $ PROXY; exportar ftp_proxy = $ PROXY ''
- deberías encontrar este archivo en tu entorno de shell normal (en algunos sistemas esto se hace automáticamente)
- escriba ''myproxy'' e ingrese su contraseña de openssl que usó para encriptar el archivo
- hecho.
Nota: la contraseña está disponible (y se puede leer) dentro del entorno de los usuarios durante la sesión de shell. Si desea limpiarlo del entorno después del uso, puede usar otro alias:
alias clearproxy = ''exportar http_proxy =; exportar https_proxy =; exportar ftp_proxy = ''
Hice una solución modificada:
edite /etc/bash.bashrc
y agregue las siguientes líneas:
alias myproxy=''read -p "Username: " USER;read -s -p "Password: " PW
PROXY="$USER:[email protected]:80";
export http_proxy=http://$PROXY;export Proxy=$http_proxy;export https_proxy=https://$PROXY;export ftp_proxy=ftp://$PROXY''
Desde el próximo inicio de sesión, ingrese myproxy
e ingrese su combinación de usuario / contraseña. Ahora trabaja con sudo -E
-E, --preserve-env Indica a la política de seguridad que el usuario desea reservar sus variables de entorno existentes.
por ejemplo, sudo -E apt-get update
Observación: la configuración del proxy solo es válida durante la sesión del shell