¿Es posible evitar que cualquier usuario no use comandos como ls, rm y otros comandos del sistema que podrían dañar el sistema? Pero los usuarios deberían poder ejecutar programas de shell.
ls
orden peligrosa !
¿Es posible evitar que cualquier usuario no use comandos como ls, rm y otros comandos del sistema que podrían dañar el sistema? Pero los usuarios deberían poder ejecutar programas de shell.
ls
orden peligrosa !
Respuestas:
Tu pregunta debe ser:
No confío en mis usuarios. Los tontos ven algo en Internet y lo prueban sin entender lo que hace. A los tortuosos les gusta curiosear y mirar los archivos de otras personas y robar sus ideas. Y los flojos, no me hagas empezar con los flojos.
¿Cómo protejo mi sistema y mis usuarios de mis usuarios?
Primero, Unix tiene un sistema de permisos de sistema de archivos muy completo. Este parece ser un tutorial decente sobre los permisos del sistema de archivos Unix . La esencia de esto es que los directorios se pueden configurar de modo que un usuario pueda ingresar a un directorio y ejecutar programas fuera de ese directorio pero no pueda ver el contenido de ese directorio. Si hace esto, por ejemplo, en / home, si el usuario ejecuta ls en / home, recibirá un error de permiso denegado.
Si realmente le tienes miedo a tus usuarios y quieres pegarlos en un entorno restringido de tipo supermax , usa algo como las cárceles de freebsd o las zonas de solaris: cada usuario obtiene su propio entorno a medida. Para obtener puntos adicionales, use ZFS para poder tomar una instantánea del entorno cuando inicien sesión, por lo que si eliminan sus archivos, simplemente puede sacarlos de la instantánea.
Hay tres cosas que deben estar en su lugar para hacer completamente lo que está pidiendo:
Cinturón, tirantes y una pistola de grapas para una buena medida. Difícil equivocarse allí.
AppArmor es interesante ya que todos sus hijos heredan el MAC para un ejecutable específico. Establezca el inicio de sesión de un usuario /bin/bash-bob
, establezca el perfil de AppArmor para ese derecho binario específico, y la única forma en que está saliendo de esa cárcel de permisos es a través de las vulnerabilidades del kernel. Si alguna secuencia de comandos de instalación diferida se puede escribir de forma /var/opt/vendor/tmp
global por alguna razón estúpida, el usuario que use /bin/bash-bob
su shell no podrá escribir allí . Configure el perfil bash-bob para que solo permita la escritura en su directorio de inicio /tmp
y dichos errores de permisos no se pueden aprovechar. Incluso si de alguna manera encuentran la contraseña de root, el perfil de AppArmor /bin/bash-bob
todavía se aplicará incluso después de que se su
activen desde entonces su
y el bash
proceso del que se genera son hijos /bin/bash-bob
.
La parte difícil es construir ese perfil de AppArmor.
En mi opinión, solo necesita los pasos 2 y 3, ya que en combinación ambos evitan la capacidad de hacer algo dañino fuera de la caja cuidadosamente construida que configuró en ambos pasos.
Bueno, puedes configurar el shell del usuario en un programa que hayas escrito que solo les permita ejecutar ciertos scripts de shell.
Por supuesto, esto solo sería tan seguro como el programa y los scripts de shell; en la práctica, este tipo de shell restringido generalmente no es seguro contra un atacante inteligente.
No intente limitar los comandos, limite los permisos de archivo. Prácticamente no se puede limitar el acceso de las personas a las llamadas al sistema, por lo que todo lo que alguien tiene que hacer es proporcionar su propia copia de los comandos "peligrosos" que no desea que ejecuten, y está lleno.
Si desea que el usuario solo pueda ejecutar ciertos scripts / binarios, puede usar un shell restringido . Esto (como menciona el artículo de Wikipedia) no es completamente seguro, pero si puede garantizar que ninguna aplicación que se le permita ejecutar sea capaz de ejecutar un nuevo shell, entonces es una buena alternativa.
Para configurar un shell restringido de usuarios, establezca /bin/rbash
(o similar, la mayoría de los shells entran en modo restringido cuando el binario se denomina r *** name *) como shell de usuarios. Luego, edite **. Bashrc (o equivalente) y configúrelo $PATH
en un directorio donde se almacenen todos los archivos binarios / scripts permitidos.
Sí, es posible, pero en la práctica requeriría mucho trabajo y planificación. Puede crear scripts y hacer que se ejecuten como un uso privilegiado, luego elimine todos los privilegios del usuario en cuestión. O bien, puede configurar el shell del usuario en algo de su propia creación que le permita hacer solo lo que usted permite explícitamente.
Sin embargo, los permisos estándar en Linux hacen que sea casi imposible para un usuario normal "dañar el sistema". ¿Qué tipo de daño estás tratando de prevenir? Es trivial evitar que los usuarios puedan instalar software o ejecutar programas fuera de su directorio de inicio, y puede usar chroot para bloquear el sistema aún más.
Es posible que desee probar [lshell] [1] (shell limitado).
lshell es un shell codificado en Python, que le permite restringir el entorno de un usuario a conjuntos limitados de comandos, elegir habilitar / deshabilitar cualquier comando sobre SSH (por ejemplo, SCP, SFTP, rsync, etc.), registrar los comandos del usuario, implementar la restricción de tiempo, y más.
[1]: http://lshell.ghantoos.org/Overview lshell
La forma en que suelo implementar este tipo de restricciones requiere que se cumplan varias condiciones; de lo contrario, la restricción se puede eludir fácilmente:
wheel
grupo, el único autorizado para usar su
(impuesto a través de PAM).Al usuario se le proporciona una seguridad adecuada rbash
con un solo lectura que PATH
apunta a un privado ~/bin
, este ~/bin/
directorio contiene enlaces a utilidades simples:
$ ll ~/bin
total 0
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
al usuario se le da una, de sólo lectura entorno restringido (pensar en cosas por el estilo LESSSECURE
, TMOUT
, HISTFILE
las variables).
staff_u
y se le otorgan derechos para ejecutar comandos como otro usuario según sea necesario a través de sudo
.del usuario /home
, /tmp
y posiblemente /var/tmp
están poliinstantiados a través de /etc/security/namespace.conf
:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
/var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
$HOME $HOME/$USER.inst/ tmpdir:create root
Además, /etc/security/namespace.init
hace que todos los archivos esqueléticos sean de solo lectura para el usuario y de su propiedad root
.
De esta manera, puede elegir si $USER
puede ejecutar cualquier comando en su propio nombre (a través de un enlace en el ~/bin
directorio privado , provisto a través de /etc/skel
, como se explicó anteriormente), en nombre de otro usuario (a través de sudo
) o ninguno.