Permisos POSIX en archivos de S3
Los sistemas de archivos POSIX requieren la propiedad y los permisos de cada archivo. Amazon S3 almacena los datos como objetos cuyo acceso está controlado por las políticas de IAM y las políticas de bucket, y no almacena de forma nativa los atributos de propiedad o permiso de los archivos. Los archivos de S3 resuelven esta diferencia al almacenar los metadatos de POSIX, incluidos los permisos de propietario, grupo y archivo, como metadatos definidos por el usuario en cada objeto de S3. Al crear o modificar un archivo a través de archivos de S3, el servicio escribe todos los metadatos de los permisos automáticamente. Cuando se escribe un objeto en el bucket de S3 fuera del sistema de archivos, por ejemplo, a través de la consola, la CLI de AWS o el AWS SDK de Amazon S3, no existen metadatos de POSIX en ese objeto. Los archivos de S3 asignan a esos objetos un valor predeterminado de propiedad root:root y permisos 644, lo que permite a los usuarios que no sean raíz leer el archivo pero no escribir en él. Si estos valores predeterminados cumplen con los requisitos de acceso, no es necesario realizar ninguna acción. Si la aplicación lo requiere, puede invalidar los permisos predeterminados para esos objetos. En este tutorial, se explica cómo aplicar permisos personalizados.
Cómo almacenan los archivos de S3 los metadatos de POSIX
Los archivos de S3 almacenan la información de POSIX como metadatos definidos por el usuario en cada objeto. Las claves de metadatos siguientes controlan la propiedad y los permisos:
| Clave de metadatos | Descripción | Ejemplo de valor |
|---|---|---|
x-amz-meta-file-owner |
ID de usuario de POSIX (UID) | 1000 |
x-amz-meta-file-group |
ID de grupo de POSIX (GID) | 1000 |
x-amz-meta-file-permissions |
Tipo de archivo y bits de permiso (octal) | 0100644 |
Cuando un objeto no tiene metadatos de POSIX, los archivos de S3 aplican los siguientes valores predeterminados:
Archivos: propiedad
root:rootcon permisos0644(-rw-r--r--)Directorios: propiedad
root:rootcon permisos0755(drwxr-xr-x)
Con estos valores predeterminados, todos los usuarios pueden leer archivos y recorrer directorios, pero solo el propietario (raíz) puede escribir. Los archivos no son ejecutables de forma predeterminada.
Configuración de metadatos de POSIX en objetos existentes
Utilice el siguiente procedimiento para aplicar la propiedad y los permisos de POSIX a los objetos que ya existen en el bucket.
Paso 1: identificación del UID y el GID del usuario de destino
En este ejemplo, el usuario de destino es ec2-user con UID 1000:
$ id ec2-user uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user)
Paso 2: actualización de los metadatos del objeto mediante copy-object
El comando aws s3api copy-object copia el objeto en su lugar con los metadatos actualizados. Sustituya BUCKET_NAME y OBJECT_KEY por sus valores.
La opción --metadata-directive REPLACE sustituye todos los metadatos definidos por el usuario en el objeto. Incluya --content-type para conservar el tipo de contenido del objeto, ya que REPLACE lo restablece al valor predeterminado (binary/octet-stream). Si usa otros campos de metadatos, inclúyalos en el parámetro --metadata.
aws s3api copy-object \ --bucket BUCKET_NAME \ --key OBJECT_KEY \ --copy-source BUCKET_NAME/OBJECT_KEY \ --metadata-directive REPLACE \ --content-type CONTENT_TYPE \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
Paso 3: verificación de que los metadatos se hayan aplicado
Ejecute el siguiente comando para confirmar los metadatos:
aws s3api head-object --bucket BUCKET_NAME --key OBJECT_KEY
La respuesta incluye los metadatos de POSIX:
{ "AcceptRanges": "bytes", "LastModified": "Mon, 18 May 2026 14:43:00 GMT", "ContentLength": 7214, "ETag": "\"abc123...\"", "ContentType": "image/png", "Metadata": { "file-owner": "1000", "file-group": "1000", "file-permissions": "0100644" } }
Paso 4: verificación de los permisos en el sistema de archivos de S3
$ ls -ltr /mnt/s3files/ -rw-r--r--. 1 ec2-user ec2-user 7214 May 18 14:43 s3.png
El archivo ahora es propiedad de ec2-user y ya no necesita raíz para acceder a él.
Configuración de metadatos de POSIX en nuevas cargas
Puede incluir metadatos de POSIX al cargar objetos en el bucket.
Uso de aws s3 cp
aws s3 cp localfile.txt s3://BUCKET_NAME/localfile.txt \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
Uso de aws s3api put-object
aws s3api put-object \ --bucket BUCKET_NAME \ --key localfile.txt \ --body localfile.txt \ --metadata '{"file-owner":"1000", "file-group":"1000", "file-permissions":"0100644"}'
Verificación de los metadatos del objeto cargado
aws s3api head-object --bucket BUCKET_NAME --key localfile.txt
Referencia de valores de permisos
En la tabla siguiente, se muestran los valores de permiso de POSIX comunes y sus casos de uso.
| Valor octal | Modo de archivo | Caso de uso |
|---|---|---|
0100644 |
-rw-r--r-- |
Archivo estándar: propietario de lectura o escritura, otros solo lectura |
0100664 |
-rw-rw-r-- |
Archivo compartido: propietario y grupo de lectura o escritura, otros solo lectura |
0100755 |
-rwxr-xr-x |
Ejecutable: propietario tiene acceso completo, los demás leen y ejecutan |
0100666 |
-rw-rw-rw- |
Archivo de escritura universal: todos los usuarios pueden leer y escribir |
0040755 |
drwxr-xr-x |
Directorio estándar: el propietario tiene acceso completo, otros leen y recorren |
Prácticas recomendadas
Cargue los archivos a través del sistema de archivos de S3 siempre que sea posible. Los archivos de S3 almacenan automáticamente la propiedad y los permisos del archivo como metadatos de objetos, por lo que no es necesario realizar ningún paso adicional. Cuando los cargue directamente en el bucket de S3, incluya los metadatos de POSIX en el comando de carga para asegurarse de que la propiedad y los permisos estén configurados correctamente desde el principio.