Saltar al contenido

Estado

Qué versión de fileshare describen estas páginas, qué añadió cada versión, qué se ha verificado con clientes reales y qué no está implementado todavía.

Estas páginas describen fileshare v0.29.1.

Lo que añadió cada versión

v0.7.0un recurso compartido restringido por NFS, con un bloque kerberos
v0.8.0la API de administración sobre gRPC; recursos compartidos de directorio; /healthz, /readyz, /metrics
v0.9.0TLS para WebDAV, S3 y NFS, a partir de archivos o de ACME; WebDAV con contraseñas rechazado sin cifrar
v0.10.0volver a leer el directorio: reload = "5m", SIGHUP, ReloadDirectory
v0.11.0SFTP para las personas que el proveedor de identidad avala: su CA SSH, y opkssh
v0.12.0revocación: una KRL para los certificados SSH del proveedor, una CRL para las identidades NFS a partir de certificados
v0.13.0señales compartidas: un session-revoked de CAEP invalida todo lo que el proveedor emitió antes, en todos los protocolos
v0.14.0las correcciones de la revisión de seguridad: nombres de recurso compartido que un protocolo puede transportar, ningún recurso compartido que contenga la configuración o sus secretos, source_roots comprobado de nuevo al arrancar, max_age de SSF ≥ 1m y retain ≥ 169h
v0.15.0una KRL procedente de ssh_krl_url debe estar firmada y fechada
v0.16.0las listas de revocación nunca retroceden, tampoco tras un reinicio, con ssh_krl_state_file / crl_state_file; los anclajes de confianza y los archivos de lista no pueden estar dentro de un recurso compartido
v0.16.1requiere Go 1.26.6: nueve avisos alcanzables de la biblioteca estándar en 1.26.4
v0.16.2la firma de una CRL de NFS se comprueba antes de analizarla
v0.16.3nadie queda nombrado por un correo electrónico no verificado
v0.16.4solo pruebas
v0.16.5solo pruebas (#36: una prueba interpretaba un error de transporte como un éxito)
v0.16.6el rechazo de NFS nombra las dos salidas: un bloque kerberos, o identity = "certificate"
v0.16.7go-authn/oidc v0.2.2: el tamaño de una clave RSA se cuenta en bits. Antes, una clave de 1024 bits rellenada con octetos a cero verificaba un token de WebDAV o un PK Token de opkssh
v0.17.0las correcciones de una auditoría de seguridad: un recurso compartido no puede contener otro; los archivos de acceso (authorized_keys_file, dsn_file, …) no pueden estar en un recurso compartido; WebDAV nunca pasa a anónimo porque la lectura de un directorio haya vuelto vacía; S3 respeta protocols; una conexión que no se ha autenticado en 30 s se cierra; una sesión opkssh termina en opkssh_max_age; una sesión revocada sigue revocada y se cierra
v0.17.1go-authn/oidc v0.2.4 (ningún conjunto de claves tras una redirección a http), servercert v0.3.0 (la ruta de la caché ACME comprobada como hace el StrictModes de sshd), krl v0.5.0, revocation v0.3.0
v0.17.2go-filesystems/s3 v0.3.0: S3 ya no indica a un llamante no autenticado qué claves de acceso existen; las URL prefirmadas funcionan, duran una semana como máximo y se rechazan antes de su propia fecha
v0.18.0la CI fija Go 1.27.1 en lugar de stable
v0.18.1fileshare check advierte cuando un bloque oidc no tiene domains: el nombre a secas de un proveedor llega a la cuenta local de ese nombre
v0.19.0go-authn/directory v0.11.0: un bloque users "ldap" rechaza un bind sin cifrar hacia otra máquina; las contraseñas se comparan como resúmenes, en tiempo constante
v0.20.0local_names: los nombres del proveedor solo son nombres locales cuando el bloque oidc lo indica (auditoría de seguridad F4)
v0.21.0volúmenes: un fileshare provisioner con privilegios crea datasets ZFS, subvolúmenes btrfs y directorios con cuota de proyecto XFS/ext4, y la API de administración sirve recursos compartidos a partir de ellos; un recurso compartido de directorio lleno da una misma respuesta en todos los protocolos; los allowed_uids del socket de administración
v0.21.1un recurso compartido lleno lo indica por SMB (STATUS_DISK_FULL) y por NFS (NFS3ERR_NOSPC / NFS3ERR_DQUOT)
v0.22.0ssh_domains: un certificado SSH solo se acepta donde su concesión de dominio (ssh-domain-grant@core.aai.geant.org, el perfil de CA SSH de EuroHPC) nombra este host, en modo cerrado ante el fallo; ssh_accept_ungranted deja entrar certificados sin concesión
v0.22.1go-filesystems/sftp v0.5.1: un certificado vinculado a una dirección (source-address) se acepta desde esa dirección con ssh_domains, y en los certificados del proveedor y de OpenPubkey; antes, se rechazaba desde cualquier dirección
v0.22.2solo pruebas y documentación: source-address se prueba desde ::1 y desde una segunda dirección IPv4 (127.0.0.2), con ssh_domains, y en un certificado OpenPubkey; en Linux, con FILESHARE_REQUIRE_JUDGE, un juez ausente hace fallar la prueba en lugar de omitirla
v0.23.0un volumen btrfs tiene el tamaño de su cuota por NFS, SMB y WebDAV (go-filesystems/nfs v0.7.0, smb v0.5.0, webdav v0.3.0 informan del tamaño en cada consulta); antes, btrfs mostraba el sistema de archivos entero. Un servidor cuyos recursos compartidos vienen de la API de administración ya no se detiene al arrancar cuando sirve NFS y aún no tiene ningún recurso
v0.24.0lecturas más rápidas: un GET WebDAV de un recurso compartido de directorio o de volumen sale con sendfile(2) en HTTP sin cifrar (no bajo TLS), NFS lee y escribe en bloques de 1 MiB (rtmax/wtmax), y los clientes SMB leen más de 64 KiB por petición (CAP_LARGE_MTU). En el runner de CI, un archivo de 256 MiB: WebDAV 6,6 GB/s, SMB 0,84, NFS 1,47 (un cliente)
v0.24.1seguridad: una conexión NFS inactiva ya no guarda los 3 MiB de su llamada más grande (24 conexiones inactivas retenían 59 MiB); una cabecera de trama SMB ya no hace que el servidor reserve los 8 MiB que anuncia antes de que lleguen los bytes; una petición SMB ya no puede pagar un crédito por 4 GiB (go-filesystems/nfs v0.8.1, smb v0.6.1 y v0.6.2)
v0.25.0SFTP responde a limits@openssh.com, así que el sftp de OpenSSH lee hasta 255 KiB (+25 %); una sesión mantiene como mucho 1024 handles abiertos (go-filesystems/sftp v0.6.0)
v0.26.0copia en el servidor en cada protocolo que la tiene: un COPY de WebDAV, un copy-data de SFTP (el sftp cp de OpenSSH) y un COPYCHUNK de SMB (Explorador, copy_file_range en Linux) se hacen en el servidor, con copy_file_range(2) entre archivos del host — un reflink en btrfs y XFS, medido en la CI: 0 bytes usados para una copia de 8 MiB. Seguridad: un COPY de WebDAV y cada GET/HEAD de S3 ya no leen el archivo entero en memoria; S3 transmite objetos de cualquier tamaño. Corrección: el sendfile de los GET WebDAV de la v0.24.0 solo ocurría en recursos de solo lectura — un envoltorio lo ocultaba en los de escritura; ocurre en ambos desde la v0.26.0
v0.27.0ACME: el certificado se pide al arrancar, no en la primera conexión — se reintenta tras 1 min, duplicando hasta 1 h, mientras el servidor sigue sirviendo; un cliente que no envía SNI (conexión por dirección IP) recibe el certificado del primer dominio en lugar de un saludo fallido (go-authn/servercert v0.5.0). HARICA: solo una cuenta Enterprise Admin (OV) emite sin desafío, y el CAA debe autorizar harica.gr
v0.28.0la API de administración se sirve también por HTTPS para tokens OIDC — Connect, gRPC-Web y gRPC en un solo puerto, una audiencia por servidor, quienes llaman nombrados por sujeto o grupo para cada emisor — el primer paso hacia las interfaces web y nativas
v0.28.1seguridad: compilado con Go 1.27.2 y golang.org/x/net v0.60.0, que corrigen GO-2026-6617 (una carrera en el codificador HPACK de HTTP/2 que podía tumbar un servidor), GO-2026-6613, -6612, -6611, -6610 y -6603. La API de administración por HTTPS habla HTTP/2. go install exige ahora Go 1.27.2, y cambia a él por sí solo
v0.29.1una recarga trata un grupo vaciado en el directorio como uno eliminado: no concede nada, y las notas de la recarga dicen group @x has no members: it grants nothing (go-authn/directory v0.12.0, que distingue un grupo vacío de uno inexistente)
v0.29.0WebDAV: un PROPFIND de la raíz lista los recursos compartidos (207; profundidad infinity 403, escrituras 405), así que un gestor de archivos puede montar todo el servidor; una subida puede hacerse por partes, cada Content-Range añadido donde terminó el anterior (go-filesystems/webdav v0.6.0) — lo que necesita el explorador de archivos

Actualizar a la v0.21.0

Un recurso compartido de directorio lleno responde de otra forma. EDQUOT (una cuota) y ENOSPC son ahora un mismo error, “no space left on device (the share is full)”, en todos los recursos compartidos de directorio, no solo en los volúmenes: un EDQUOT que era 500 en WebDAV y NFS3ERR_IO en NFS es ahora 507 y NFS3ERR_NOSPC, y el texto de SFTP es esa frase, sin la ruta. SMB sigue respondiendo acceso denegado. Consulte un recurso compartido lleno.

Actualizar a la v0.20.0

El alice del proveedor ya no recibe los recursos compartidos del alice local. Un sitio cuyos nombres en el proveedor son sus nombres locales añade local_names = true al bloque oidc (y establece domains); el servidor registra esa línea para cada nombre que rechaza por falta de ella.

Actualizar a la v0.19.0

Un bloque users "ldap" que apunta a ldap:// en otra máquina sin start_tls = true ya no arranca: use ldaps://, o StartTLS.

Actualizar a la v0.17.0

Una configuración con un recurso compartido dentro de otro, dos recursos compartidos sobre un mismo origen, o un archivo de acceso (authorized_keys_file, dsn_file, bind_password_file, el ca_file de ssf) dentro de un recurso compartido ya no arranca; el error nombra el recurso compartido y la ruta.

Actualizar más allá de la v0.9.0

Una configuración que sirve WebDAV sin TLS en una dirección que otras máquinas pueden alcanzar, con alguien a quien autenticar, ya no arranca. Añada tls = true y un bloque tls, o plaintext = true detrás de un proxy que termine TLS. Consulte TLS.

Verificado

Son cosas que se hizo hacer a un cliente que este proyecto no escribió, no afirmaciones sobre el código.

  • macOS monta un recurso compartido por SMB mientras curl escribe en la misma imagen por WebDAV, y vuelve a leer lo que WebDAV escribió. La escritura de bob por WebDAV en un recurso compartido que solo puede leer da 403; una contraseña errónea da 401.
  • go-smb2 —un cliente que este proyecto no escribió— realiza veinte lecturas concurrentes por SMB mientras otras veinte pasan por WebDAV, con -race, en la CI.
  • Las reglas de acceso se comprueban a través de cada protocolo y no solo en la configuración: alice escribe y bob no, por SMB y por WebDAV, y a NFS ni siquiera se le ofrece el recurso compartido.
  • Los certificados SFTP se verifican frente al propio cliente de OpenSSH, que también rechaza la misma clave en cuanto su certificado se aparta.
  • Las identidades NFS a partir de certificados se midieron con un cliente Linux real (núcleo 6.17, ktls-utils 0.9) en la CI de go-filesystems/nfs; así es como se encontraron MNT sin cifrar y las trampas de tlshd.
  • La forma sin firmar de la KRL es una medición: OpenSSH 9.6 y 10.3 leen una KRL firmada y se saltan la firma (go-authn/krl, contra ambos).
  • El carril de interoperabilidad de go-authn/bridge (#12, #17) evalúa fileshare v0.13.0 frente al bridge real: la KRL, la CRL sobre NFS, tokens de WebDAV revocados mediante señales compartidas, un IdP desactivado por ámbito, y opkssh con señales compartidas.

Todavía no

Escrituras por S3. PUT y DELETE responden 403. La biblioteca sabe escribir, pero un recurso compartido que una persona solo puede leer tiene que rechazar en el mismo punto en que lo hace SFTP, y eso no está conectado. Rechazar es mejor que un objeto escrito a medias.

Un token OIDC por S3. Los tokens funcionan por WebDAV y en ningún otro sitio. La vía habitual para S3 es STS AssumeRoleWithWebIdentity, que canjea el token por credenciales temporales con las que luego firma el cliente: un mecanismo distinto de aceptar un token bearer, y no implementado.

--isolate con un bloque admin o metrics. Rechazado: no hay un único proceso al que se pueda aplicar un cambio de la API. Consulte un proceso por protocolo.

Una persona por usuario en un cliente NFS Linux compartido, a partir de un certificado. Un cliente Linux asocia el certificado a un montaje, así que todos los usuarios del montaje son la persona que este nombra. Es una propiedad del cliente, y la respuesta ahí es sec=krb5. Consulte lo que no puede prometer.

S3 en sí ya está publicado: un recurso compartido es un bucket, servido sobre el mismo árbol por usuario que usa SFTP.

Medido, y presentado como medido

Afirmaciones de estas páginas que son un seguro o una medición, y no la reproducción de un defecto, y que también están escritas así en el código fuente:

  • Ocho goroutines que escriben a través de un controlador fat32 sin envolver, con -race, no producen hoy ninguna condición de carrera. El bloqueo compartido es un seguro sobre un contrato —go-filesystems/interface no promete nada sobre llamadas concurrentes basadas en rutas—, no la corrección de un fallo observado.
  • Los tamaños según las etiquetas de compilación se midieron, incluidos los 13,2 MB que cuesta hashicorp/go-plugin por sí solo, lo que decidió en contra de un framework de plugins, y los 11,7 MB que cuesta gRPC ahora que la API de administración lo trae, que es la razón de ser de nogrpc.
  • Se diseñó una extensión de certificado propia para etiquetas de grupo y se midió frente al analizador X.509 de Go, que rechazó el certificado entero; los grupos viajan en su lugar como URI de etiqueta.

Creada el por tannevaled

Modificada el por tannevaled