
root
usuariopoderescribir en un archivo incluso si sus write
permisos no están establecidos.
root
usuariopoderleer un archivo incluso si sus read
permisos no están establecidos.
root
usuariopoder cd
en un directorio incluso si sus execute
permisos no están establecidos.
root
usuariono puedoejecutar un archivo cuando sus execute
permisos no están establecidos.
¿Por qué?
user$ echo '#!'$(which bash) > file
user$ chmod 000 file
user$ ls -l file
---------- 1 user user 12 Jul 17 11:11 file
user$ cat file # Normal user cannot read
cat: file: Permission denied
user$ su
root$ echo 'echo hello' >> file # root can write
root$ cat file # root can read
#!/bin/bash
echo hello
root$ ./file # root cannot execute
bash: ./file: Permission denied
Respuesta1
En definitiva, porque el bit de ejecución se considera especial; si no está configuradoen absoluto, entonces se considera que el archivo no es ejecutable y, por lo tanto, no se puede ejecutar.
Sin embargo, si se establece incluso UNO de los bits de ejecución, el root puede ejecutarlo y lo ejecutará.
Observar:
caleburn: ~/ >cat hello.sh
#!/bin/sh
echo "Hello!"
caleburn: ~/ >chmod 000 hello.sh
caleburn: ~/ >./hello.sh
-bash: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh
sudo: ./hello.sh: command not found
caleburn: ~/ >chmod 100 hello.sh
caleburn: ~/ >./hello.sh
/bin/sh: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh
Hello!
Respuesta2
En los viejos tiempos, las herramientas de administración de sistemas vivían en /etc
tales como /etc/restore
, /etc/rrestore
, /etc/init
, /etc/halt
, etc. Imagínese lo que pasaría si root
's PATH
estuviera configurado /etc:/bin
y root
ejecutado passwd
.
No funcionaría bien.
Para empeorar las cosas, en los viejos tiempos, los ejecutables binarios no tenían encabezados mágicos, por lo que verificar si el binario era un ejecutable no era realmente posible excepto verificando los bits de permiso. Por lo tanto, hicieron que los archivos no fueran objetivos válidos de exec
* a menos que en realidad fueran archivos (sin directorios, etc.) y tuvieran al menos un bit de ejecución establecido.
*La verificación podría haber sido en execvp, que es una función en modo de usuario.
Sigue siendo una comprobación útil ya que, en teoría, cualquier cosa podría ser un script de shell, entonces, ¿por qué eliminarlo?