¿Cómo puedo configurar una contraseña para el comando 'rm'?

29

Mis amigos siguen borrando mis archivos usando el terminal. Entonces, por favor, ayúdame explicando cómo hacer una contraseña para el rmcomando

aswin
fuente
50
Deberá proteger con contraseña la cuenta de usuario para que esos "amigos" no accedan a ella en primer lugar.
Andrea Lazzarotto
14
Realmente debería intentar aprender cómo funciona el sistema y utilizar su funcionalidad.
AlexP
13
Es probable que tus amigos estén tratando de "darte una lección" jugando con tu computadora cuando la dejes sin protección. Aprenda esa lección protegiendo su cuenta y rechazando el acceso de invitados, o proporcionando acceso de invitados con permisos reducidos.
Ken Williams
44
Por favor, recuerde también sobre el unlinkcomando. También sobre el mvcomando, porque puede sobrescribir efectivamente archivos con él. También ...
Kos
17
¿Con amigos como éstos, quién necesita enemigos?
kasperd

Respuestas:

46

No hay una manera fácil de configurar dicha contraseña en el rmcomando en sí, no sin una gran cantidad de piratería de código que probablemente rompa cosas como apt-getinstalar paquetes y eliminar archivos, y hacer que tenga que ingresar la contraseña miles de veces, o potencialmente interrumpir acceso al comando a las personas que lo necesiten (como usted, para eliminar sus propios archivos). Puede hacer esto al tener múltiples cuentas de usuario y múltiples conjuntos de permisos de acceso, y restringir el acceso a diferentes secciones de datos, como su directorio de inicio para que no puedan acceder a él.

(La otra opción son las cuentas de usuario individuales para cada usuario y luego las Listas de control de acceso, como se detalla en la otra respuesta publicada por Videonauth )

Aquí está el problema central: estás dejando que tus amigos usen tu sistema. Esto tiene numerosas implicaciones de seguridad: el concepto de "cualquier persona con acceso físico a la caja podrá controlar el sistema y realizar cualquier tarea" es un mantra de seguridad de TI, razón por la cual no 'comparte' el acceso a los sistemas físicos excepto con personal autorizado de confianza.


La única forma realmente sensata de hacer esto es no darles a sus amigos acceso a su computadora, y darles un 'sistema dedicado' Invitado 'que puedan usar, que realmente no les importen tanto los archivos. Esta es la forma más 'segura' de mantener sus archivos seguros.


Por supuesto, si esa no es una opción, entonces su única opción realmente segura es configurar varias cuentas de usuario, una para cada usuario, con diferentes carpetas de inicio, y no les permite acceder a su propio directorio de inicio o acceso a la página de inicio de cualquier otro usuario directorios. Y luego mantenga todo lo que no desea que toquen en su directorio personal, y no les dé sudoacceso, la rootcontraseña, ni comparta su contraseña con ellos.

Así es como lo harías:

Digamos que mi nombre es "Foo" y quiero que el usuario "Bar", un amigo, use mi sistema pero no acceda a mis archivos. El primer paso es negar el acceso a cualquier persona que no sea yo a mi directorio personal. Esto es para permitir que otros usuarios no eliminen sus archivos, pero también para evitar que otros usuarios husmeen en su directorio de inicio y vean qué tipos de cosas tiene en su directorio de inicio:

chmod 750 /home/Foo

El segundo paso es crear una cuenta de usuario para "Bar" (NO escriba lo que está entre paréntesis a continuación, es solo para fines informativos). De esta manera, podemos asegurarnos de que tenga su propio conjunto separado de derechos de acceso:

sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)

El tercer paso es restringir también su directorio de inicio para que nadie pueda inmiscuirse en sus archivos tampoco. Esto solo hace que las cosas sean iguales.

sudo chmod 750 /home/Bar

Lávese las manos, enjuáguelas bien, luego repita estos pasos para la cantidad de usuarios que tenga en el sistema. No podrán acceder a sus archivos, y dado que no les va a dar privilegios de administrador, no pueden eliminar sus archivos sin intentar sudohacerlo, ya que no lo permite, no pueden toca tus cosas Y tampoco podrán ver sus archivos, sin convertirse en superusuario, lo que no sucederá aquí.


SIEMPRE RECUERDE ESTO: Al darle a alguien acceso físico a la máquina, o acceso en general, pondrá en riesgo sus archivos y datos. Este es un hecho ampliamente aceptado en el mundo de la seguridad de TI, y uno que sigue siendo cierto. Darle a sus amigos acceso a su computadora siempre pondrá en riesgo sus datos, por lo que les dará su propio sistema con el que jugar o simplemente no les dará acceso a su máquina.


Solo una nota sobre el cifrado de disco

Si bien el cifrado de disco funciona bien para proteger sus datos de un tercero, existen limitaciones.

  1. Si el sistema está encendido, el disco ya está descifrado, por lo que está en riesgo.
  2. Algunos sistemas tienen enfoques de cifrado de disco rotos . Por ejemplo, algunos sistemas Acer usan su contraseña para autorizar solo el cifrado / descifrado y usan contraseñas codificadas, o usan un cifrado débil que se descifra fácilmente.
  3. Siempre hay métodos para entrar en las 'claves', o tratar de extraerlas de la memoria justo después de que un sistema se apaga pero antes de que los datos de la RAM se hayan 'ido' o deteriorado. (No voy a entrar en profundidad sobre estos, pero estos riesgos hacerlo existir).
  4. El acceso físico a la máquina, ya sea que el sistema esté encriptado o no, siempre pondrá en riesgo sus datos. No otorgue acceso físico (o acceso remoto a la red) a personas a las que no desea otorgar acceso total a su sistema.

Si bien Disk Encryption no resuelve estos problemas, genera capas adicionales de dolores de cabeza para un actor de amenazas. Alguien que es un tipo malo podría darse por vencido si está encriptado, o puede torturarlo (hacer cola obligatoria en la tira cómica de seguridad de XKCD ).

Por lo tanto, si su sistema está encriptado, pero está permitiendo que otros usuarios lo usen, o ellos tienen una contraseña para desencriptar, o está dejando su computadora portátil desencriptada para que puedan ingresar SSH o tener acceso físico. En ambos casos, es malo.

Dicho esto, si su sistema no está encriptado, entonces esta sección no tiene relevancia para usted.

Thomas Ward
fuente
Mi laptop tiene un disco duro encriptado. ¿Permitir el acceso de otros sigue siendo un riesgo?
Tim
2
@Tim Sí, si el sistema está encendido y descifrado. E incluso cuando está apagado, todavía es posible con la tecnología, el tiempo y la dedicación adecuados para encontrar las claves de descifrado que potencialmente aún están almacenadas en la RAM. El cifrado de disco no es 100% de protección: hay formas de evitarlo, es más una cuestión de "¿Está el malo dispuesto a dedicar tanto tiempo y esfuerzo?". Y a juzgar por la pregunta del OP, su sistema está encendido y no encriptado (total o parcialmente), por lo que existe el riesgo de eliminación.
Thomas Ward
3
@Tim Para agregar a la respuesta de Thomas, algunas computadoras portátiles tienen una implementación de cifrado de disco rota (si confía en FDE de hardware). Los portátiles Acer AFAIR realmente no usan su contraseña para el cifrado, solo la usan para autorizar el cifrado / descifrado con contraseña codificada.
gronostaj
Los datos siempre están en riesgo si una persona no confiable tiene acceso a un sistema, encriptado o no
Sergiy Kolodyazhnyy
1
@LightnessRacesinOrbit se apt-getejecutadpkg , que ejecuta secuencias de comandos que suelen utilizar rm. En mi cuadro Xenial, cd /var/lib/dpkg/info; grep -P '\brm\b' *instgenera 344 líneas , de las cuales 333 parecen usos reales del rmcomando, solo en los scripts de instalación . grep -P '\brm\b' *rmmuestra aún más en los scripts de eliminación (para eliminar archivos de configuración, no archivos de paquete).
Eliah Kagan
19

Esto puede no ser realmente sobre el rmcomando, 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 rmcomando, 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 rmcomando 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:

  1. 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.

  2. Podrían estar haciéndolo por error.En este escenario, tus amigos son extremadamente propensos a los accidentes y siguen ejecutando rmcomandos 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 rmcomando 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 , 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 filefile

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 rmun alias de shell que realmente se ejecute rm -i. Pasar el -iindicador a rmhace 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_aliaseso .bashrcarchivo. 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/rmo desaliasándolo ( unalias rm).
  • Hay muchas situaciones en las que no se produce la expansión de alias y en estas situaciones rmno 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 rmcomando proporcionado por el sistema :

  • Aliasing rma rm -ies 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 rmserá 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 rma rm -ies 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 sudopermite ejecutar programas como otro usuario, después de verificar para asegurarse de que tiene permiso para hacerlo. passwdedita 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/sudoy /usr/bin/passwdpuede hacerlo porque tienen el bit setuid establecido, como se muestra en el sque 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/rmcuenta que no tiene s: sus permisos son -rwxr-xr-x, while /usr/bin/passwdy /usr/bin/sohave en su -rwsr-xr-xlugar. Esto hace que, sin importar quién lo ejecute passwdo 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), sudoy passwdson 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/rmno 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 sudoy passwdcomprueban quién las está ejecutando realmente y comprueban que algo esté permitido antes de hacerlo; rmno 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 rmen 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.txten 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 pythonlugar de python3en 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 rmcomando (para que requiera una contraseña, o de cualquier otra manera) o restringir el acceso para rmno impedirlo en absoluto.

Eliah Kagan
fuente
2
Para uso real, me gusta rmla -Iopción de GNU . Solo solicita la eliminación de 4 o más archivos, o la eliminación recursiva. Por lo tanto, no tiene el hábito de usar siempre -f, \rmpara evitar la expansión de alias o escribir ysin leer. Pero aún así lo salvará de errores tipográficos incorrectos en los que presionó regresar antes de lo que pretendía, o su glob coincidió con muchos archivos.
Peter Cordes
2
Otra forma interesante de desvincular archivos: mv foo.txt /tmp/.goneluego reiniciar, descartando los tmpfs que estaba respaldando /tmp. O simplemente use mvpara renombrar varios archivos con el mismo nombre, de modo que solo quede el último. O simplemente oculte los archivos renombrándolos con nombres oscuros. Como señala la primera parte de esta respuesta, si está tratando de defenderse de la malicia en lugar de la incompetencia, solo necesita bloquear a las personas de su cuenta.
Peter Cordes
16

Puede cambiar los permisos en el /bin/rmcomando a través de la siguiente línea que evitará que se ejecute sin acceso a sudo:

sudo chmod 750 /bin/rm

Esto específicamente les impide usar el rmcomando proporcionado por el sistema. Debe tener en cuenta que no impide que eliminen archivos de otras formas.

Para evitar que usen el rmdircomando, que es una forma común de eliminar directorios, puede establecer los permisos de la misma manera en su ruta ejecutable:

sudo chmod 750 /bin/rmdir

Recuerde que también solo puede usar estos comandos con derechos de sudo.

Para cambiarlo de nuevo si no se quiera o se producen otros problemas utilización 755dechmod


Como señaló @muru, lo anterior es una solución muy cruda e incluso podría romper los servicios del sistema que no se ejecutan en la cuenta raíz . Por lo tanto, agrego aquí otra opción usando ACL (listas de control de acceso) para hacer lo mismo y probablemente mucho más seguro (también es bueno leerlo y puede omitir la parte habilitadora porque ACL generalmente está instalado en los sistemas Ubuntu actualmente):

Por lo tanto, hacer lo mismo solo para los usuarios que desea bloquear sería

sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir

Simplemente reemplace <user-name>con los nombres de usuario reales que desea evitar el uso de los archivos.

Al igual que con chmod, usar setfacl -mpara evitar que usuarios específicos se ejecuten rmy se rmdiraplica solo a los comandos proporcionados por el sistema. No evita que eliminen sus archivos y carpetas en Nautilus o mediante el uso de otros comandos de terminal.

Explicación:

  • la -mbandera significa modificar los archivos ACL.
  • La primera parte del cambio, las usiglas de usuario. Puede tener los siguientes valores upara usuario, gpara grupo y opara todos los demás
  • la parte central <user-name>puede contener el nombre de usuario real o el nombre del grupo de acuerdo con lo que desea cambiar. Para establecer los cambios generales, lo deja vacío.
  • la tercera parte tiene el tipo de permisos que desea establecer. Aquí, en el ejemplo, no queremos establecer ningún permiso, por lo que ponemos -, también puede contener las siguientes letras rpara permisos de lectura, wpara permisos de escritura y xpara ejecución.
Videonauth
fuente
44
Sería mejor usar ACL que eliminar los permisos de ejecución para otros: cualquier servicio del sistema que no se ejecute como root ahora está en desventaja.
muru
2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdirIIRC. Puede probar la ACL congetfacl /bin/rm /bin/rmdir
muru
2
El único inconveniente de las ACL como esta es que es malo / complicado mantenerlas a largo plazo. E imposible de mantener si no hay usuarios individuales en el sistema para cada persona que usa el sistema. De lo contrario, es una buena idea.
Thomas Ward
44
@DavidFoerster Sí. Hay un número ilimitado de formas para eliminar archivos sin rm. La solución que Videonauth ha dado aquí es una posible forma de ayudar a los usuarios propensos a accidentes a dejar de eliminar cosas, pero no proporciona ninguna seguridad real (lo que puede estar bien, si los amigos del OP no están tratando deliberadamente de subvertir los deseos del OP) . Videonauth: sugiero editar esta publicación para que aclare de manera destacada que en realidad no impide que las personas eliminen archivos, ya que no necesitan el rmcomando para hacerlo. (Me abstengo de editarlo yo mismo, en caso de que no quiera decir eso).
Eliah Kagan
1
No olvide que Perl, Python y todos los compiladores del sistema permiten que los demás usuarios también eliminen archivos. Evitar que las personas eliminen archivos requiere algo más que cambiar los permisos del rmcomando.
Jonathan Leffler
8

Esta es una respuesta muy simple y detendrá a alguien casualmente usando el comando rm sin dar una contraseña. No es una solución segura y debe incluir algunas de las sugerencias alternativas en las otras respuestas.

Sin embargo, puede usar un alias para cambiar la forma en que se comporta el comando rm. Tratar:

alias rm="sudo -l >/dev/null && rm"

Lo que esto hace es que cuando alguien ingresa el comando rm, ejecuta el comando sudo -l. Este comando obliga al usuario a ingresar su contraseña. Si lo hacen bien, enumera sus privilegios (descartamos esta salida) y sale con el estado 0, si se equivocan, existe un error.

Luego seguimos el comando sudo con un "&&", que sale del siguiente comando, en este caso "rm" solo si el comando anterior sale con el estado 0, es decir, obtuvieron la contraseña correcta.

Para hacer esto permanente, incluya el comando alias en ~/.bashrc.

Tenga en cuenta que esto es muy fácil de derrotar (por ejemplo, simplemente podrían escribir /bin/rm.

Nick Sillito
fuente
5

A veces no son nuestros amigos, somos nuestros propios peores enemigos.

Escribí un script para proteger con contraseña rmcomo el OP solicitado, pero también realicé ediciones para evitar que elimines accidentalmente:

  • / /
  • /casa
  • /compartimiento

Edición: 5 de marzo de 2017: cambie el método de verificación si se ejecuta en la terminal.


Crea el guión

Use gksu gedit /usr/local/bin/rmy copie en estas líneas:

#!/bin/bash

tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi

if [ $Terminal == "Y" ] ; then
    # Running from terminal don't allow delete of / or /toplevel directory even if sudo
    for i in ${@:1}
    do
        # Skip options -i -r -v -d 
        if [[ ${i:0:1} != "-" ]] ; then
            # if parameter doesn't begin with '-' it's file or directory, so get real path.
            fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
            # We must have at least two `/` in the full path
            levels=$(echo "$fullname" | tr -cd '/' | wc -c)
            if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
                echo "Attempting to remove top level directory '$fullname'"
                echo "Use 'sudo /bin/rm $@' instead."
                exit 1 # error
            fi
        fi
    done
fi


if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
  if [ $Terminal == "Y" ] ; then
  # Only running from a terminal needs password (ie not cron)

    # log rm usage to /var/log/syslog
    PARENT_COMMAND="$(ps -o comm= $PPID)"   
    logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"

    # Get password
    Password=$(zenity --password --title="Password for rm")
    encryptPassword=$(echo -n "$Password" | md5sum)

echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.

    if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi
  fi # non-terminals can't enter password.
fi # root doesn't need to enter password.

# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"

exit 0

Cambie la contraseña "WE2U" a lo que quiera y guarde el archivo.

Marcar nuevo rmscript como ejecutable

Marque el nuevo rmscript como ejecutable usando:

sudo chmod +x /usr/local/bin/rm

Cómo funciona

contraseña de rm

A menos que la contraseña sea WE2U , la primera vez que ejecute el script obtendrá "contraseña no válida" y se mostrará la clave de cifrado de la contraseña que ingresó. Copie y pegue esta clave de cifrado desde el terminal en el script. Luego comente la línea con el eco que muestra la clave de cifrado en el terminal.

Porque la ruta /usr/local/bines más alta en la lista de lo que se llama /binnuestro comando rm. Después de obtener una contraseña válida, llama /bin/rmpara hacer la eliminación real.

Como Thomas Ward señaló en otra respuesta, si hicieras una, se sudo apt-get install ...te podría pedir una contraseña mil veces. El script verifica si sudose usa y no solicita una contraseña. Además, si rmse llama desde la aplicación GUI, no se requiere contraseña.

El script llama loggera grabar cada vez que rmse llamaba manualmente usando el terminal. El uso del comando se registra en /var/log/syslog.

WinEunuuchs2Unix
fuente
1
Puede enmascarar la contraseña simplemente incluyendo una versión hash de la misma en el script, y luego, cada vez que el usuario ingrese una contraseña, simplemente puede usarla para hash y compararla con el hash codificado.
InitializeSahib
@InitializeSahib se ha agregado soporte de contraseña hash (cifrado) al script.
WinEunuuchs2Unix
3

Otra alternativa sería crear copias de seguridad de cualquier archivo importante en un directorio al que los usuarios no root no tengan acceso. Puede usarlos rsynco unisonsincronizarlos automáticamente, solo asegúrese de que al menos un directorio en la ruta al destino de la copia de seguridad sea propiedad de root y el modo 700. Sin embargo, esto tendría como resultado tener dos copias de todos los archivos. Sería más seguro crear un usuario invitado para que lo usen, excepto que debe recordar bloquear siempre o cerrar la sesión antes de darles la computadora o dejarla desatendida.

Aleatorio832
fuente
3
¿Es posible que desee señalar cómo evitar que se propague la eliminación? E idealmente, una forma de apagarlo y encenderlo para que cuando el usuario esté haciendo algo que requiera que la eliminación sea permanente, sea permanente.
ostergaard
@ajostergaard Pensé que cada vez que recupera su computadora de sus amigos, comprueba manualmente que no falta nada y restaura todo lo que está. Pero mi herramienta preferida es el unísono usado en modo interactivo gui, lo que hace que sea fácil ver (y revertir) las eliminaciones.
Random832
2

No es la respuesta directa a la pregunta que estás buscando, pero:

Si tus amigos están borrando tus archivos usando el rmcomando, entonces tus amigos son incompetentes, imbéciles o son aspirantes a BOFH que intentan enseñarte a no dejar tus sesiones conectadas y desatendidas. En todos los casos, la solución es la misma: no deje su sesión iniciada y desatendida .

Esto tiene la ventaja de no tener que acordarse de hacer cambios especiales en el sistema cada vez que actualiza u obtiene un nuevo sistema, y ​​también evita que los scripts y otras cosas que usa que se basan en comandos que se comportan como se espera no funcionen de manera impredecible.

También tiene la ventaja de evitar que los "amigos" pasen al siguiente paso. ¿También querrá "proteger con contraseña" el mvcomando si deciden mover sus archivos a / dev / null cuando descubren que una simple eliminación no hace lo que quieren? Cuando estás en un juego como este, el único movimiento ganador es no jugar.

Rob Moir
fuente
1

Tengo una posibilidad similar que había planeado. En el servidor de archivos, si el almacenamiento principal de fotos es grabable, alguien de la familia (menos técnico o por accidente) podría eliminar algo, arrastrar accidentalmente la interfaz gráfica de usuario que mueve el directorio, o sobrescribir un original con una versión editada en lugar de cambiar el nombre .

Me di cuenta de que puedo protegerme contra eso sin hacer que los permisos no puedan escribirse para los demás. ZFS realiza instantáneas periódicas para que se pueda revertir cualquier eliminación o sobrescritura accidental. (A diferencia de una copia de seguridad, una instantánea es ligera y copia en escritura, por lo que no multiplica su uso de almacenamiento).

ZFS es nativo de FreeBSD. Linux tiene btrfs que también tiene instantáneas.

JDługosz
fuente
0

Una solución muy tonta para un problema muy tonto.

Si no quiere chmod rm, rmdiro mv(para mv filename /dev/null) o ACL uso, se puede crear un usuario simulado con una contraseña, pero nadie lo conoce y alias de comando para cada uno sudo [user], y luego hacer alias para cada comando que sus amigos no saben . De esta manera, cuando sus amigos escriban, rmel sistema les pedirá una contraseña (pero adivinar que la contraseña es incorrecta registrará el intento fallido), y aún puede escribir rmaliaso lo que elija para eliminar realmente los archivos.

O simplemente podría crear una cuenta de invitado que no tiene acceso a su directorio de inicio.

Andy
fuente
Parece que estás en el camino correcto. Su respuesta podría mejorarse al elaborar sobre cómo configurar el alias sudo [user]ydummy user
WinEunuuchs2Unix
0

Si desea proteger con contraseña rm, una solución sería crear un contenedor para rm que requiera privilegios de root y solicitar una contraseña de lo contrario. (NOTA: Este contenedor puede desaparecer cuando el paquete coreutils se actualiza o se reinstala). Además, tenga en cuenta que esto solo asegura rm, todavía hay muchas, muchas otras formas de eliminar un archivo.


Abre una terminal y conviértete en root. Luego corre sudo mv /bin/rm /bin/rmoldpara mover el viejo rm a otro lugar.

Ahora corre sudo nano /bin/rmpara crear un contenedor.

En Nano, escriba lo siguiente:

#!/bin/bash
/bin/rmold "$@"
exit "$?"

Luego sostenga CTRLy presione Xpara salir. Presione Ycuando se le solicite, luego presione ENTERpara guardar el archivo.

Finalmente, debemos otorgarle los permisos apropiados:

sudo chmod a+x /bin/rm

Y ahi tienes.

InitializeSahib
fuente
1
A menos que tenga una muy buena razón, las variables de script siempre se deben citar: $@=> "$@". Aquí, lo que está proponiendo es una versión muy peligrosa del original y seguro rm: ¿qué pasa si hay un archivo llamado foo -i -r *( -iagregado para proteger a los usuarios inocentes)?
xhienne
Además de "-citar $@como dice @xhienne, le insto a que advierta claramente a los lectores que esto no proporciona ninguna seguridad, ya que hay muchas formas de eliminar un archivo. Una es llamar rmold, pero hay muchas otras formas, como se discutió en otras respuestas y comentarios sobre ellas. (Aun así, esto no tendrá el problema de que rmse siente como si elimina los archivos que el usuario actual - se llama sin sudoy normales rmejecución la persona que llama - pero lo hace como root Si han recientemente sudoed, que ganó' t observe que podrían estar eliminando archivos del sistema incluso si saben sobre el cambio.)
Eliah Kagan