web-dev-qa-db-fra.com

Autoriser l'autorisation à l'aide du répertoire de compartiment S3FS pour d'autres utilisateurs

J'ai des problèmes pour utiliser S3FS. j'utilise 

ubuntu@ip-x-x-x-x:~$ /usr/bin/s3fs --version
Amazon Simple Storage Service File System 1.71

Et j'ai le fichier de mot de passe installé dans le /usr/share/myapp/s3fs-password avec la permission 600.

J'ai réussi à monter le godet S3.

Sudo /usr/bin/s3fs -o allow_other -opasswd_file=/usr/share/myapp/s3fs-password -ouse_cache=/tmp mybucket.example.com /bucket

Et j'ai user_allow_other activé dans le /etc/Fuse.conf

Lorsque j'ai essayé de créer un fichier dans le compartiment sous la forme root, cela a fonctionné.

ubuntu@ip-x-x-x-x:~$ Sudo su
root@ip-x-x-x-x:/home/ubuntu# cd /bucket
root@ip-x-x-x-x:/bucket# echo 'Hello World!' > test-`date +%s`.txt
root@ip-x-x-x-x:/bucket# ls
test-1373359118.txt

J'ai vérifié le contenu du bucket mybucket.example.com et le fichier a été créé avec succès.

Mais j'avais des difficultés à écrire dans le répertoire /bucket en tant qu'utilisateur différent.

root@ip-x-x-x-x:/bucket# exit
ubuntu@ip-x-x-x-x:~$ cd /bucket
ubuntu@ip-x-x-x-x:/bucket$ echo 'Hello World!' > test-`date +%s`.txt
-bash: test-1373359543.txt: Permission denied

J'ai désespérément essayé de chmod-ing pour 777 le test-1373359118.txt. Et je peux écrire dans le fichier

ubuntu@ip-x-x-x-x:/bucket$ Sudo chmod 777 test-1373359118.txt
ubuntu@ip-x-x-x-x:/bucket$ echo 'Test' > test-1373359118.txt
ubuntu@ip-x-x-x-x:/bucket$ cat test-1373359118.txt
Test

Bizarrement, je pouvais créer un répertoire à l'intérieur du compartiment, définir le chmod sur 777 et écrire un fichier à cet endroit.

ubuntu@ip-x-x-x-x:/bucket$ Sudo mkdir -m 1777 test
ubuntu@ip-x-x-x-x:/bucket$ ls
test  test-1373359118.txt
ubuntu@ip-x-x-x-x:/bucket$ cd test
ubuntu@ip-x-x-x-x:/bucket/test$ echo 'Hello World!' > test-`date +%s`.txt
ubuntu@ip-x-x-x-x:/bucket/test$ ls
test-1373360059.txt
ubuntu@ip-x-x-x-x:/bucket/test$ cat test-1373360059.txt
Hello World

Mais ensuite j'ai essayé

ubuntu@ip-x-x-x-x:~$ Sudo chmod 777 /mybucket
chmod: changing permissions of '/mybucket': Input/output error

Ça n'a pas marché.

Initialement, je pensais utiliser ce répertoire /bucket pour stocker des fichiers volumineux et rarement utilisés à partir de mes piles LAMP situées sur plusieurs machines EC2. (Je pense qu'il est suffisant de l'utiliser sans créer de bibliothèque de traitement spéciale utilisant AWS PHP SDK, mais ce n'est pas le problème.)

Pour cette raison, je peux utiliser un répertoire dans le /mybucket pour stocker les fichiers. Mais je suis juste curieux de savoir s'il existe un moyen d'autoriser l'intégralité du /mybucket à d'autres utilisateurs?

11
Petra Barus

L'autorisation était un problème avec les anciennes versions de S3FS. Mettez à niveau vers la dernière version pour le faire fonctionner. 

Comme déjà indiqué dans la question et dans d’autres réponses, lors du montage, vous devrez passer les paramètres suivants: -o allow_other 

Exemple:

s3fs mybucket:/ mymountlocation/ -o allow_other 

Aussi, avant de faire cela, assurez-vous que ce qui suit est activé dans /etc/Fuse.conf

user_allow_other

Il est désactivé par défaut ;)

14
codersofthedark

Cela fonctionne pour moi:

s3fs ec2downloads:/ /mnt/s3 -o use_rrs -o allow_other -o use_cache=/tmp

Il doit avoir été corrigé dans une version récente, j'utilise le dernier clone (1.78) du projet github .

6
Chris

Il peut y avoir plusieurs raisons, et j'énumère une raison possible car j'ai rencontré le même problème. Si vous examinez l’autorisation de votre fichier, il se peut qu’il ait hérité de «---------» - pas d’autorisation/ACL.

Si c'est le cas, vous pouvez ajouter le "x-amz-meta-mode" aux métadonnées du fichier. Allez voir mon post sur comment le faire/le faire dynamiquement. 

1
George

Je voudrais recommander de jeter un coup d'oeil au nouveau projet RioFS (système de fichiers Userspace S3): https://github.com/skoobe/riofs

Ce projet est une alternative «s3fs», les principaux avantages par rapport à «s3fs» sont les suivants: simplicité, rapidité des opérations et code sans bugs. Actuellement le projet est à l'état "testing", mais il est exécuté sur plusieurs serveurs de fichiers très chargés depuis un certain temps.

Nous recherchons plus de personnes pour rejoindre notre projet et aider avec les tests. De notre côté, nous proposons une correction rapide des bugs et écouterons vos demandes d’ajout de nouvelles fonctionnalités.

En ce qui concerne votre problème, pour pouvoir exécuter RioFS en tant qu'utilisateur root et autoriser d'autres utilisateurs à disposer des droits d'accès r/w au répertoire monté:

  1. assurez-vous que /etc/Fuse.conf contient l'option user_allow_other
  2. lancez RioFS avec le paramètre -o "allow_other".

La ligne de commande complète pour lancer RioFS ressemblera à ceci:

Sudo riofs -c /path/to/riofs.conf.xml http://s3.amazonaws.com mybucket.example.com /bucket

(assurez-vous d’avoir exporté les variables AWSACCESSKEYID et AWSSECRETACCESSKEY ou de les définir dans le fichier de configuration riofs.conf.xml).

J'espère que cela vous aidera et nous sommes impatients de vous voir rejoindre notre communauté!

1
Paul

si vous utilisez centos, vous devez activer l'option httpd_use_fusefs sinon, quoi que vous donniez pour l'option s3fs, il ne sera jamais autorisé à accéder via httpd

setsebool -P httpd_use_fusefs on
0