Esto puede no ser realmente sobre el rm
comando, ya que hay formas fáciles de eliminar archivos sin usarlo . Si el problema es que sus amigos están haciendo un mal uso involuntario del rm
comando, entonces las soluciones que restringen el uso de ese comando específicamente o hacen que funcione de una manera diferente pueden ser de alguna ayuda. Por el contrario, si el problema es que sus amigos están tratando deliberadamente sus datos de una manera que no desea, entonces debe implementar medidas de seguridad reales y ninguna solución que se centre en el rm
comando en sí (o en cualquier conjunto discreto de comandos) te mantendrá a salvo.
¿Necesita controlar el acceso o simplemente evitar errores honestos?
Asumiendo que tus amigos saben que no quieres que eliminen tus archivos, hay dos posibilidades:
Podrían estar haciéndolo a propósito. En este escenario, tus amigos están eliminando deliberadamente tus archivos, y ni siquiera puedes confiar en ellos para tratar de cumplir con tus deseos sobre cómo tratan tus datos cuando usan tu computadora. La única solución a este problema es utilizar una medida de seguridad efectiva real , como Thomas Ward ha explicado en detalle . A menudo, la mejor medida es evitar que usen su computadora. Pero hacer que usen sus propias cuentas de usuario puede proporcionar cierta protección.
Podrían estar haciéndolo por error.En este escenario, tus amigos son extremadamente propensos a los accidentes y siguen ejecutando rm
comandos que desearían no tener. Quieren tratarlo a usted y a sus datos con respeto, pero son muy malos en la práctica porque siguen ejecutando el comando incorrecto, eliminando el archivo incorrecto ... o algo así. Aunque sería bueno creer que esto es lo que está sucediendo, le advierto que no asuma que las personas que continúan eliminando sus datos después de que les haya dicho que dejen de funcionar están operando sin mala voluntad.
Además, incluso si sus intenciones son buenas, darles cuentas de usuario separadas sigue siendo la forma más infalible de evitar que eliminen sus archivos, además de no permitirles usar su computadora.
Si la situación es realmente n. ° 2: sus amigos no están tratando de eliminar sus archivos, pero solo necesitan ayuda para no eliminarlos accidentalmente , y la única forma en que los eliminan accidentalmente es a través del mal uso involuntario de un pequeño número de comandos (como rm
) que tienen problemas particulares para usar correctamente, entonces las técnicas en la respuesta de Videonauth pueden ser de alguna utilidad. Pero debes entender que no son medidas de seguridad, porque el rm
comando es solo uno de muchos formas fáciles de eliminar archivos . Ver abajo para más detalles.
Le recomiendo que se pregunte: "¿Es mi situación básicamente la misma que si yo, en lugar de las otras personas que usan mi computadora, fuera la que estaba usando rm
incorrectamente?
Si la respuesta es no , entonces esto es una cuestión de seguridad de la información y debe evitar que sus amigos usen su cuenta de usuario. Si la respuesta es sí , entonces usted puede utilizar el mismo enfoque que tendría que utilizar si es que eras el mal uso de rm
:
- Educación.Tus amigos necesitan saber qué están haciendo y cómo evitarlo.
- Cambios de interfaz Sin eliminar la capacidad real de eliminar archivos (que requiere cuentas de usuario separadas), puede dificultar la eliminación accidental de archivos al hacer que simplemente se ejecute solo, sin ninguna otra acción, no se eliminará de inmediato . La respuesta de Videonauth le da un enfoque a esto. En esta respuesta, presento otra.
rm file
file
Pero incluso si tus amigos no están tratando de hacer el mal cualquier cosa, usted debe todavía considerar tener a utilizar sus propias cuentas de usuario separadas . Esto aún resolverá el problema: las mismas medidas de seguridad que protegen los datos de la destrucción deliberada también los protegerán de la destrucción no intencional. Incluso sin intención maliciosa, si alguien sigue haciendo algo que usted no quiere que haga, entonces no puede confiar en que se abstendrá de hacer eso.
Fabricación rm
aviso antes de la eliminación puede ayudar a prevenir algunos errores.
Para ayudar a las personas a evitar la eliminación accidental de archivos rm
, puede crear rm
un alias de shell que realmente se ejecute rm -i
. Pasar el -i
indicador a rm
hace que solicite al usuario antes de eliminar cada archivo (consulteman rm
).
Usted puede hacer esto (para su cuenta de usuario) mediante la adición alias rm='rm -i'
a su .bash_aliases
o .bashrc
archivo. Vea esta pregunta y aquella para más detalles. Esto entrará en vigencia para tus shells shells recién abiertos.
Esto no proporciona seguridad real y tampoco es infalible para evitar errores, porque:
- Pueden elegir continuar con la eliminación, cuando se les solicite.
- Pueden omitir el alias de numerosas maneras, incluso ejecutándolo
/bin/rm
o desaliasándolo ( unalias rm
).
- Hay muchas situaciones en las que no se produce la expansión de alias y en estas situaciones
rm
no se ejecutará -i
.
- Todavía pueden eliminar archivos mediante el uso de cualquiera de las técnicas para hacerlo que no requieren
rm
(como es el caso con el enfoque de Videonauth - ver más abajo).
- Todavía pueden dañar los datos sin eliminar ningún archivo, como sobrescribirlos o cambiar su contenido (como también es el caso con el enfoque de Videonauth).
Pero si no necesita seguridad real (ver arriba), entonces este podría ser el camino a seguir. En comparación con el enfoque de evitar que sus amigos usen el rm
comando proporcionado por el sistema :
Aliasing rm
a rm -i
es menos eficaz en la prevención de errores - hasta que se mueven a usar alguna otra técnica para eliminar archivos. En ese punto, evitar que lo usen rm
será completamente ineficaz, incluso si no están tratando de hacer algo malo, ya que presumiblemente usarán unlink
(o cualquiera de los innumerables otros comandos que eliminan un archivo) con igual descuido.
Por otro lado, debido a que la expansión de alias solo ocurre en algunas situaciones, en términos generales, uso interactivo ordinario del shell, sus amigos podrían pensar que se les solicitará cuando no se les solicite realmente (porque el comando está en un script, por ejemplo, o emitido desde un shell diferente). La forma de Videonauth no tiene este problema, que es una ventaja objetiva de ese método alias rm='rm -i'
.
Cuando se ejecuta un script, a menos que esté escrito deliberadamente para usar alias, sus alias no se expanden en él. Esto significa que el aliasing rm
a rm -i
es muy poco probable que romper nada. Esta es una ventaja objetiva de alias rm='rm -i'
.
rm
no puede hacer nada que ningún otro programa perfectamente normal pueda hacer.
Realmente no hay nada especial rm
. Es una forma conveniente y autodocumentada de eliminar archivos, por lo que restringir el acceso a él corre el riesgo de romper numerosos scripts que dependen de él. Pero está lejos de ser la única forma de eliminar archivos: es solo un programa ordinario.
Algunos comandos realizan alguna tarea que un usuario limitado (no root ) no puede realizar sin ejecutarlos. Por ejemplo, le sudo
permite ejecutar programas como otro usuario, después de verificar para asegurarse de que tiene permiso para hacerlo. passwd
edita la base de datos donde se almacenan las contraseñas de los usuarios, pero solo le permite cambiar su propia contraseña (a menos que sea root, en cuyo caso puede cambiar la contraseña de cualquiera).
/usr/bin/sudo
y /usr/bin/passwd
puede hacerlo porque tienen el bit setuid establecido, como se muestra en el s
que aparece en la columna más a la izquierda cuando ejecuta ls -l
:
ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root 60272 Feb 18 2016 /bin/rm
-rwsr-xr-x 1 root root 54256 Mar 29 2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo
Tenga en /bin/rm
cuenta que no tiene s
: sus permisos son -rwxr-xr-x
, while /usr/bin/passwd
y /usr/bin/so
have en su -rwsr-xr-x
lugar. Esto hace que, sin importar quién lo ejecute passwd
o sudo
, realmente se ejecute como usuario root, ya que root es el propietario del ejecutable. (También hay un bit setgid que, cuando se establece, hace que los ejecutables se ejecuten con la identidad del grupo del propietario del grupo en lugar de la del llamante).
A excepción de las vulnerabilidades de seguridad que aún no se han descubierto (o que se han descubierto pero que aún no se han parcheado), sudo
y passwd
son seguras porque esas utilidades están escritas con mucho cuidado para que solo puedan hacer cosas que la persona que llama debería estar autorizada. que hacer.
/bin/rm
no funciona de esta manera No es setuid porque no necesita serlo. Los permisos de directorio (y ocasionalmente los permisos de archivo ) controlan qué archivos puede eliminar un usuario, y no necesitan convertirse en root para hacerlo. Para ser perfectamente claro, por favor, nunca active el bit setuidrm
. Las implicaciones de seguridad serían desastrosas, desde entonces, no importa quién lo ejecute rm
, ¡es como si root lo ejecutara! (A las utilidades les gusta sudo
y passwd
comprueban quién las está ejecutando realmente y comprueban que algo esté permitido antes de hacerlo; rm
no hace tal cosa).
Verificar si el bit setuid (o setgid) está configurado en un ejecutable le dirá si restringir quién puede ejecutarlo tiene la posibilidad de mejorar la seguridad. Los ejecutables que no son setuid (o setgid) no tienen ningún estado especial, y cualquiera puede simplemente copiarlos y ejecutar la copia, traer su propia copia desde otra máquina, escribir un script o programa que haga lo mismo, o usar otro programa para hacerlo.
Eliminar archivos sin rm
La forma obvia de eliminar un archivo sin rm
en Ubuntu es navegar a su ubicación en el navegador de archivos gráficos (Nautilus, si está utilizando Unity o GNOME Shell) y eliminar el archivo. También hay numerosos comandos que se pueden usar para eliminar un archivo de un terminal, sin usarlo nunca rm
.
Por ejemplo, para eliminar un archivo llamado foo.txt
en el directorio actual, los siguientes comandos, que funcionan desde el primer momento en Ubuntu y no requieren acceso rm
, lo lograrán. (Solo para estar seguro, los probé en un sistema mínimo de 16.04 instalado con solo las utilidades estándar del sistema, después de eliminarlo /bin/rm
).
unlink foo.txt
busybox rm foo.txt
perl -e 'unlink("foo.txt")'
python3 -c 'import os; os.remove("foo.txt")'
(en python
lugar de python3
en versiones anteriores)
Esa lista, por supuesto, no está completa. No es posible una lista completa de dichos comandos. La prevención de la eliminación de archivos es una de las cosas que las cuentas de usuario separadas y los permisos de archivos y directorios existen para lograr. Funcionan muy bien para prevenirlo. Por el contrario, cambiar el rm
comando (para que requiera una contraseña, o de cualquier otra manera) o restringir el acceso para rm
no impedirlo en absoluto.