View a markdown version of this page

Permisos POSIX en archivos de S3 - Amazon Simple Storage Service

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:root con permisos 0644 (-rw-r--r--)

  • Directorios: propiedad root:root con permisos 0755 (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.