web-dev-qa-db-fra.com

Autoriser un utilisateur de conteneur LXC à écrire en tant qu'utilisateur externe dans un répertoire monté

Toutes mes excuses pour le titre, la configuration est en fait assez simple. J'ai un hôte avec un utilisateur appelé oli et un répertoire appelé /media/steve/incoming dans lequel oli peut lire, écrire et exécuter. À l'intérieur de celui-ci, un conteneur LXC privilégié s'exécute sous root. /media/steve/incoming est monté dans le conteneur en tant que /incoming/ avec:

lxc.mount.entry = /media/steve/incoming incoming none bind 0 0

Dans le conteneur, un serveur Web s'exécute en tant que www-data. Il doit être capable d'écrire sur /incoming/.

Quelles sont mes options ici? Je peux penser à quelques idées mais elles présentent des inconvénients assez graves ou je ne sais pas comment les mettre en œuvre:

  • Je pouvais changer mon démon pour qu'il fonctionne en tant que root dans le conteneur, mais je préférerais que ce ne soit pas le cas. Les fichiers d’écriture de la racine sont étrangement dans le répertoire (ils apparaissent comme appartenant à root:oli- sur l’hôte).

  • Puis-je mapper le conteneur -www-data pour avoir l'hôte -oli privs sur le système de fichiers? Est-ce que cela leur donnerait accès à l'hôte? oli n'est pas un compte sans concurrence. Cela peut faire de vrais dégâts.

  • Puis-je simplement lier-monter-le de manière à ce que tout le monde dans le conteneur puisse écrire sur/incoming et que l'accès semble provenir de Host -oli?

  • ACL de l'aide ici?

6
Oli

ACL peut le faire avec succès car il permet de partager des fichiers pour plusieurs utilisateurs en fonction du nom d'utilisateur plutôt que numéro d'utilisateur .

Il est converti en numéro d'utilisateur à l'intérieur de l'attribut du fichier.

Puis-je mapper container-www-data pour avoir Host-oli privs sur le système de fichiers? Est-ce que cela leur donnerait accès à l'hôte? oli n'est pas un compte sans concurrence. Cela peut faire de vrais dégâts.

Vous pouvez exécuter la commande suivante sur l'hôte pour que l'utilisateur lxc du conteneur www-data du conteneur puisse écrire le dossier /incoming.

$ Sudo chown oli /media/steve/incoming
$ Sudo setfacl -m u:www-data:rwx /media/steve/incoming

/media/steve/incoming est lié un pour /incoming du conteneur lxc.

Et le propriétaire de /media/steve/incoming appartient déjà à oli.

Ainsi, l'hôte oli de l'hôte peut l'écrire directement et l'utilisateur www-data du conteneur peut également l'écrire directement.

Et si la commande setfacl n'existe pas sur l'hôte, vous pouvez l'installer à l'aide de la commande suivante.

$ Sudo apt-get install acl

www-data de l'hôte et www-data du conteneur peuvent utiliser un numéro d'identifiant d'utilisateur différent , de sorte que vous puissiez partager/media/steve/incoming pour Container L'identifiant utilisateur www-data est le suivant.

D'abord, obtenez le numéro d'utilisateur de www-data sur le conteneur.

$ cat /etc/passwd | grep "^www-data:" | awk -F ":" '{print $3}'

Ensuite, il affichera un numéro si le conteneur a un utilisateur nommé www-data, userid sur www-data. À la seconde, définissez l'attribut de fichier avec acl comme suit sur l'hôte.

$ Sudo setfacl -m u:<got_number_above>:rwx /media/steve/incoming

Ensuite, ça va travailler pour conteneur.

Vous pouvez obtenir davantage d’aide pour ACL auprès de FilePermissionsACL

3
xiaodongjie