Estado
Estas páginas describen fileshare v0.29.1.
Lo que añadió cada versión
| v0.7.0 | un recurso compartido restringido por NFS, con un bloque kerberos |
| v0.8.0 | la API de administración sobre gRPC; recursos compartidos de directorio; /healthz, /readyz, /metrics |
| v0.9.0 | TLS para WebDAV, S3 y NFS, a partir de archivos o de ACME; WebDAV con contraseñas rechazado sin cifrar |
| v0.10.0 | volver a leer el directorio: reload = "5m", SIGHUP, ReloadDirectory |
| v0.11.0 | SFTP para las personas que el proveedor de identidad avala: su CA SSH, y opkssh |
| v0.12.0 | revocación: una KRL para los certificados SSH del proveedor, una CRL para las identidades NFS a partir de certificados |
| v0.13.0 | señales compartidas: un session-revoked de CAEP invalida todo lo que el proveedor emitió antes, en todos los protocolos |
| v0.14.0 | las 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.0 | una KRL procedente de ssh_krl_url debe estar firmada y fechada |
| v0.16.0 | las 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.1 | requiere Go 1.26.6: nueve avisos alcanzables de la biblioteca estándar en 1.26.4 |
| v0.16.2 | la firma de una CRL de NFS se comprueba antes de analizarla |
| v0.16.3 | nadie queda nombrado por un correo electrónico no verificado |
| v0.16.4 | solo pruebas |
| v0.16.5 | solo pruebas (#36: una prueba interpretaba un error de transporte como un éxito) |
| v0.16.6 | el rechazo de NFS nombra las dos salidas: un bloque kerberos, o identity = "certificate" |
| v0.16.7 | go-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.0 | las 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.1 | go-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.2 | go-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.0 | la CI fija Go 1.27.1 en lugar de stable |
| v0.18.1 | fileshare 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.0 | go-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.0 | local_names: los nombres del proveedor solo son nombres locales cuando el bloque oidc lo indica (auditoría de seguridad F4) |
| v0.21.0 | volú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.1 | un recurso compartido lleno lo indica por SMB (STATUS_DISK_FULL) y por NFS (NFS3ERR_NOSPC / NFS3ERR_DQUOT) |
| v0.22.0 | ssh_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.1 | go-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.2 | solo 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.0 | un 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.0 | lecturas 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.1 | seguridad: 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.0 | SFTP 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.0 | copia 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.0 | ACME: 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.0 | la 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.1 | seguridad: 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.1 | una 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.0 | WebDAV: 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
curlescribe 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 da403; una contraseña errónea da401. - 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
MNTsin cifrar y las trampas detlshd. - 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/interfaceno 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-pluginpor 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 denogrpc. - 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