¿Puede root / superusuario leer mis archivos protegidos contra lectura?

35

En el alojamiento compartido de Unix, si tengo un archivo sensitive-data.txt y emito:

chmod 600 sensitive-data.txt

¿Puede el usuario root seguir leyendo mi archivo? Específicamente, me pregunto si es seguro almacenar mi contraseña en un archivo mercurial hgrc.

ACTUALIZAR

Decidí usar la extensión de llavero mecurial ya que era muy fácil de configurar:

pip install mercurial_keyring

y luego agregar a hgrc:

[extensions]
mercurial_keyring =

Sin embargo, todavía estoy interesado en la respuesta a esta pregunta.

Usuario
fuente

Respuestas:

62

Sí, la raíz puede:

$ echo Hello you\! > file
$ chmod 600 file
$ ls -l file
-rw------- 1 terdon terdon 11 Feb 27 02:14 file
$ sudo -i
# cat file
Hello you!

En cualquier caso, incluso si root no puede leer sus archivos como root, siempre pueden iniciar sesión como usted sin una contraseña:

$ whoami
terdon
$ sudo -i
[sudo] password for terdon: 
# whoami 
root
# su - terdon
$ whoami
terdon

Por lo tanto, rootpuede cambiar a cualquier otro nombre de usuario usando su(o sudo -iu username) y luego podrá hacer cualquier cosa como si fuera usted.

terdon
fuente
23

Siempre asuma que root(y cualquier otro usuario / proceso con CAP_DAC_OVERRIDEy CAP_DAC_READ_SEARCH) puede hacer todo a menos que un LSM (SELinux, AppArmor o similar) le impida hacerlo.

Eso significa también que debe suponer que se pueden leer todas las pulsaciones de teclas. Las contraseñas no son realmente seguras. Si desea un nivel de seguridad serio, debe utilizar un sistema que esté completamente controlado por usted (y que nadie más lo use).

Hauke ​​Laging
fuente
Este es realmente mi problema con las capacidades, ya que están implementadas actualmente. Como no especifican objetivos, debe tener una aplicación de tipo que sustituya las capacidades (como SELinux) solo para evitar que eso suceda. Dar a un usuario CAP_DAC_OVERRIDEles da de una sola vez todo el privilegio que necesitan para anular cualquier otro mecanismo de seguridad en el sistema. CAP_DAC_OVERRIDEes básicamente CAP_DO_WHATEVER_YOU_WANT.
Bratchley
10

Si root tiene todos los privilegios para hacer cualquier cosa

Aquí puede ver que he creado una prueba de nombre de directorio y toqué un archivo lonston.txt y enumeré los archivos

root@system99:/tmp# mkdir test && touch lonston.txt && ls -l
total 4
-rw-r--r-- 1 root root    0 Feb 27 16:35 lonston.txt
drwxr-xr-x 2 root root 4096 Feb 27 16:35 test

Luego, he cambiado el permiso de archivo y directorio a permiso nulo usando 000 y enumerado para ver el permiso

root@system99:/tmp# chmod 000 lonston.txt && chmod 000 test && ls -l
total 4
---------- 1 root root    0 Feb 27 16:35 lonston.txt
d--------- 2 root root 4096 Feb 27 16:35 test

Entonces, incluso puedo escribir en el archivo y leer el archivo con cat

root@system99:/tmp# echo "Yes root have all Privileges than other user's, let we see the permission of user's too" > lonston.txt 

root@system99:/tmp# cat lonston.txt 
Yes root have all Privilages than other user's, let we see the permission of user's too

Incluso puedo entrar en el directorio que tiene el permiso d --------- (nulo) 000, incluso la raíz no tiene permiso de lectura o escritura.

root@system99:/tmp# cd test/
root@system99:/tmp/test# pwd
/tmp/test

Incluso puedo crear los archivos y carpetas después del cambio de permiso de cualquier

root@system99:/tmp/test# touch /tmp/test/lonston/testdir/babin.txt

root@system99:/tmp/test# ls -l /tmp/test/lonston/testdir/
total 0
-rw-r--r-- 1 root root 0 Feb 27 16:39 babin.txt

Ahora aquí podemos ver Permiso con 400

root@system99:/tmp/test# chmod 400 babin.txt

Lista para ver el permiso de archivo

root@system99:/tmp/test# ls -l
total 8
-r-------- 1 root root   34 Feb 27 16:42 babin.txt
drwxr-xr-x 3 root root 4096 Feb 27 16:38 lonston

Usando vim im, he agregado 1 línea al archivo babin.txt

root@system99:/tmp/test# vim babin.txt

Pero mientras esté en modo vim, nos notará W10: Advertencia: Cambiar un archivo de solo lectura Pero aún puede escribirse

Ahora podemos cat el archivo para la salida

root@system99:/tmp/test# cat babin.txt 
hi this is the write persmission 
this is added while the file have 400 permission

Luego tengo que cerrar sesión de usuario root a usuario normal y enumeré el archivo que tiene permiso nulo también en root

root@system99:/tmp# exit
exit

Navegue al directorio / tmp

sysadmin@system99:~$ cd /tmp/
sysadmin@system99:/tmp$ ls -l
total 8
---------- 1 root root   88 Feb 27 16:36 lonston.txt
d--------- 2 root root 4096 Feb 27 16:35 test

Pero mientras leemos el archivo del usuario normal no podemos

sysadmin@system99:/tmp$ cat lonston.txt 
cat: lonston.txt: Permission denied

sysadmin@system99:/tmp$ cd test/
cat: test/: Permission denied

Eso es todo, espero que tengas el poder de usuario root

Si está en Usuario Normal, si necesita privilegios de root, necesitamos usar sudo, le pedirá sudo password

ejemplo:

sysadmin@system99:/tmp$ sudo cat lonston.txt 
[sudo] password for sysadmin: 
Yes root have all Privilages than other user's, let we see the permission of user's too

El usuario de sudo tiene colaboración con el grupo de usuarios raíz, por lo que sudo tiene el privilegio de raíz.

Para saber más sobre sudo

# man sudoers

Aquí podemos ver que se han definido como el usuario normal puede tener derechos de Sudo. Solo hay menos líneas que he mencionado aquí.

sysadmin@system99:/tmp$ sudo cat /etc/sudoers

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Totalmente podemos leer o editar o eliminar los archivos, incluso la raíz no tiene el permiso de lectura.

Babin Lonston
fuente
2
¿Por qué esta respuesta tiene tan pocos votos a favor? Cubre casi todos los casos que pueden ocurrir con ejemplos.
Foo Bar
8

En Unix tradicional, la raíz es todopoderosa. En particular, root puede leer cualquier archivo, e incluso espiar lo que sus programas están haciendo internamente. Si los datos son realmente confidenciales, mantenga solo copias cifradas (considere, por ejemplo, GNU Privacy Guard para esto, pero lea cuidadosamente su documentación antes) y nunca lo descifre en una máquina que no esté bajo su control total.

(La paranoia es maravillosa, nunca hay suficiente ;-)

En serio, piensa cuidadosamente acerca de los costos de la filtración de los datos podría causar, y por lo tanto cuánto va a estar dispuestos a pagar por la seguridad. La seguridad perfecta es imposible, obtener un poco más el costo de seguridad comienza a aumentar rápidamente. Pero tenga cuidado de no caer en la trampa de una medida costosa que realmente no aumentar la seguridad ...

vonbrand
fuente
3

También se debe suponer que cualquier persona que pueda tener la oportunidad de estar en la misma habitación que el hardware puede leer o escribir lo que quieran. Si son muy paciente, con el tiempo pueden comprender los datos cifrados. No necesitan métodos de canal lateral si se puede reemplazar el software de cifrado.

usuario130144
fuente
2

Sí, la raíz puede leer el archivo protegido incluso cuando el dueño no puede (obviamente, mientras que el propietario puede eliminar la protección y luego leer el contenido):

echo "123" > abc.txt
chmod 000 abc.txt
cat abc.txt

cat: abc.txt: Permiso denegado

su
cat abc.txt

123

Sin embargo, bajo la configuración normal, la raíz no puede acceder a los archivos protegidos en los sistemas de archivos remotos como NFS ( "calabaza raíz").

h22
fuente
+1 por mencionar la calabaza raíz NFS. Sin embargo, siempre que la raíz pueda suponerle al usuario propietario del directorio montado en NFS, la compresión raíz aún no protege.
Jenny D
2

Para evitar que root o cualquiera pueda leer sus archivos, debe cifrarlos. File Encryption es una opción muy conveniente para considerar si desea evitar tener que lidiar con manipulaciones complejas del sistema de archivos.

Opciones de encriptación:

  1. Cifre archivos ordinarios y evite que todos menos usted puedan verlos
  2. Cifre las secuencias de comandos de Shell y haga que las versiones cifradas sean ejecutables, pero también evite que todos puedan modificarlas o verlas

Si elige la Opción 1, esta es una forma de cifrar sus archivos:

cat (your-file) | openssl aes-128-cbc -a -salt -k "(specify-a-password)" > (your-file).enc

Para descifrar el archivo anterior, ejecuta un comando como este:

cat (your-file).enc | openssl aes-128-cbc -a -d -salt -k "(specify-the-password)" > (your-file).dec

- Es posible que desee poner lo anterior en un script para que no aparezca en su historial. O bien, puede eliminar el parámetro " -k ", que solicitará a openssl que le solicite una contraseña.

Si elige la Opción 2, simplemente copie y pegue su script en el siguiente sitio:

http://www.kinglazy.com/shell-script-encryption-kinglazy-shieldx.htm

Al enviar su script a ese sitio, se creará instantáneamente un archivo zip para usted. Copie el enlace al archivo zip, luego vaya a su casilla UNIX y realice estos pasos:

  1. wget enlace al archivo zip
  2. descomprima el archivo zip recién descargado
  3. cd / tmp / KingLazySHIELD
  4. ./install.sh / var / tmp / KINGLAZY / SHIELDX- (your-script-name) / home / (your-username) -force

Una vez que complete los pasos anteriores, puede ejecutar su secuencia de comandos cifrada desde donde esté especificada para instalarla en el paso 4 ... es decir / home / (su-nombre de usuario) / (su-secuencia de comandos cifrada). sh

CalmanteT
fuente