Noticias

La magia detrás de las interfaces instantáneas

Los snaps son aplicaciones limitadas e independientes diseñadas pensando en la portabilidad y la seguridad. De forma predeterminada, las instantáneas estrictamente limitadas se ejecutan de forma aislada, con un ataque exiguo a los capital del sistema. Por ejemplo, no puede aceptar a Inicio, Red, Audio o Pantalla. Para hacer que sus instantáneas sean utilizables, los desarrolladores y editores pueden resolver una serie de interfaces que permiten el ataque granular y relacionado con los capital al sistema subyacente de una guisa segura y controlada.

En el artículo de hoy, hablemos un poco más sobre la mecánica detrás de la interfaz. ¿Qué sucede cuando un desarrollador declara un complemento de interfaz en snapcraft.yaml y este complemento se instala en la computadora de un becario?

Las interfaces constan de dos componentes: ranuras y conectores. Una ranura de interfaz es un proveedor de funcionalidad (y ataque) a un petición del sistema. El conector de una interfaz es parte de un complemento integrado, que luego puede conectarse a la ranura correspondiente y así obtener ataque al petición subyacente. Se pueden conectar varios enchufes a una ranura específica, p. Ej. Por ejemplo: varios pulsadores con el Enchufe de la casa puede conectar con eso Tragamonedas de inicio, y así obtener ataque al directorio de inicio del becario.

Por razones de seguridad, algunas interfaces se pueden conectar automáticamente; con una instalación instantánea en una computadora cliente, los conectores declarados se pueden conectar a las ranuras sin intervención manual. De forma predeterminada, esto no es posible en otros escenarios. El becario debe conectar manualmente su Snap o solicitar una anulación al equipo de Snap Store. En algunos casos, esta funcionalidad se puede otorgar, especialmente si es parte de la funcionalidad de la aplicación requerida. Los ejemplos típicos serían el control de la red o las funciones de impresión de audio.

En algunos casos, Snaps le notificará que se requiere una conexión específica. En otros casos, deberá determinarlo usted mismo si puede encontrar un problema pragmático. Incluso puede conectar o desconectar interfaces manualmente como desee. Sin bloqueo, tenga en cuenta que hacerlo puede cambiar el comportamiento esperado de la aplicación.

snap connections vlc
Interface               Plug                        Slot                     Notes
audio-playback          vlc:audio-playback          :audio-playback          -
audio-record            vlc:audio-record            -                        -
avahi-control           vlc:avahi-control           -                        -
camera                  vlc:camera                  -                        -
desktop                 vlc:desktop                 :desktop                 -
desktop-legacy          vlc:desktop-legacy          :desktop-legacy          -
dvb                     vlc:dvb                     -                        -
home                    vlc:home                    :home                    -
jack1                   vlc:jack1                   -                        -
mount-observe           vlc:mount-observe           -                        -
mpris                   -                           vlc:mpris                -
network                 vlc:network                 :network                 -   

En el extracto preparatorio, VLC Media Player tiene ataque a una gran cantidad de capital típicos que se requieren para su funcionalidad. Sin bloqueo, la cámara no se conecta automáticamente. Por ejemplo, si necesita VLC para morder una transmisión de video con el dispositivo de la cámara, debe conectar esta interfaz.

sudo snap connect vlc:camera

En un archivo snapcraft.yaml característico, una explicación de sección de complemento podría estar así:

apps:
  segfexample:
    command: segfexample
    plugs:
    - home
    - network

Si está interesado en una descripción universal más amplia de interfaces y casos de uso específicos, lo discutimos en detalle en una publicación de blog hace algún tiempo.

Si instala un complemento en la confín de comandos durante la instalación y observa el resultado en la ventana de su terminal, es posible que vea una serie de mensajes del servicio Snapd sobre montajes, conexiones, etc. La instalación del complemento implica dos pasos principales:

  • Extraiga el Snap (un archivo Squashfs comprimido).
  • Configuración de los perfiles de seguridad.

Una vez que el complemento está instalado, puede efectuar la configuración del sistema. Los perfiles de Snapd AppArmor se guardan en:

/var/lib/snapd/apparmor/profiles

Dependiendo de la complejidad de su Snap, puede tener uno o más perfiles, p. Ej.

-rw-r--r-- 1 root root  4706 Jun  3 12:32 snap-update-ns.segfexample
-rw-r--r-- 1 root root 23379 Jun  3 12:32 snap.segfexample.segfexample

Con los permisos adecuados, ahora puede rasgar estos perfiles en un editor de texto y efectuar el contenido. Debe estar familiarizado con la sintaxis de AppArmor, pero esencialmente las funciones declaradas en su sección de complemento snapcraft.yaml se enumeran y expanden aquí expandido


# Description: Can access the network as a client.
#include <abstractions/nameservice>
/run/systemd/resolve/stub-resolv.conf rk,
/etc/mdns.allow r,     # not yet included in the mdns abstraction
network netlink dgram, # not yet included in the nameservice abstraction
...

Si desea conocer más sobre cómo funciona una interfaz en particular, asimismo puede consultar el petición snapd en GitHub. Por ejemplo, la interfaz de inicio. El código declara las especificaciones de la ranura, incluidos los atributos de recitación y conexión cibernética, y los detalles del perfil de AppArmor que se aplicarán durante la instalación. En este ejemplo, el perfil permite el ataque de recitación / escritura a todos los archivos en el directorio de inicio del becario, excepto la ruta de la aplicación instantánea y los directorios ocultos de nivel superior, permite la creación de nuevos archivos, permite el ataque a los montajes GVFS para los archivos que son propiedad del becario y prohíbe escribir al envase Subdirectorio.


const homeBaseDeclarationSlots = `
  home:
    allow-installation:
      slot-snap-type:
        - core
    deny-connection:
      plug-attributes:
        read: all
    deny-auto-connection:
      -
        on-classic: false
      -
        plug-attributes:
          read: all
`
...

Las interfaces instantáneas pueden parecer un poco confusas al principio, especialmente porque su comportamiento difiere del maniquí clásico de Linux. Sin bloqueo, pueden resultar avíos para certificar que las aplicaciones utilicen solo los capital del sistema que necesitan. Esto puede mejorar tanto la seguridad como la previsibilidad y minimizar las interrupciones a generoso plazo del sistema.

Si desea comprender exactamente qué sucede cuando declara un complemento en su snapcraft.yaml, puede efectuar el código fuente de Snapd y / o los perfiles de AppArmor para el Snap instalado para tener una mejor idea de la implementación específica de la Seguridad. restricción para conseguir método. Con suerte, este artículo facilitará las cosas y revelará el «truco de mago». Háganos conocer si tiene alguna pregunta o sugerencia sobre este tema uniéndose al foro de Snapcraft.

Foto de note thanun en Unsplash.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba