D'abord un peu d'informations sur ma configuration:
pool/mydataset
appartenant à user1
Maintenant, j'ai besoin de l'un des conteneurs pour accéder aux fichiers/dossiers dans pool/mydataset
. J'ai essayé ce qui suit:
user1
à l'intérieur du conteneurEdité pool/lxc/mycontainer/config
et ajouté:
lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
Lorsque je démarre le conteneur, le jeu de données est monté, mais ls -la /mnt/mydataset
dans le conteneur affiche nobody:nogroup
au lieu de user1:user1
, ce qui signifie que tous les fichiers sont en lecture seule.
Avez-vous une idée de la façon d’obtenir les autorisations appropriées dans le répertoire monté?
Si, en effet, mycontainer
n'est pas privilégié, son propriétaire pourrait ne pas avoir accès au chemin /pool/mydataset
. Les utilisateurs des conteneurs non privilégiés ont leur uid décalé sur l'hôte par l'uid du propriétaire du conteneur. Ainsi, user1
à l'intérieur du conteneur n'est pas identique à user1
sur l'hôte.
Vous pouvez vérifier quel utilisateur de l'hôte du conteneur appartient à l'hôte avec Sudo ls -l /pool/lxc | grep mycontainer
(_ (Sudo
) n'est peut-être pas nécessaire, selon les autorisations de /pool/lxc
, mais ls
devrait être suffisamment sûr pour s'exécuter en tant que Dans l’avenir, omettez Sudo
si vous le souhaitez si les autorisations le permettent. Par exemple, je reçois
drwxr-xr-x 4 100000 100000 5 Apr 22 11:37 mycontainer
montrant que l'ID utilisateur et le gid du propriétaire du conteneur sont 100000 (nous voyons un ID utilisateur au lieu d'un nom, car l'utilisateur n'existe pas sur l'hôte).
Testez les autorisations de /pool/mydataset
avec Sudo ls -l /pool | grep mydataset
(ou Sudo ls -l /pool/mydataset
pour son contenu).
Si vous voulez que les fichiers puissent être écrits à partir du conteneur, vous devez simplement vous assurer que l'utilisateur situé dans mycontainer
que vous souhaitez pouvoir écrire sur /pool/mydataset
dispose des autorisations nécessaires pour le faire sur l'hôte. Par exemple, root
sur mycontainer
a un ID utilisateur 100000 sur l’hôte, et si user1
dans mycontainer
a un ID utilisateur 1001 (à tester avec id user1
dans le conteneur) alors sur l'hôte son uid serait 101001.
Vous pouvez le faire en permettant à tout le monde sur l'hôte d'écrire sur /pool/mydataset
avec
Sudo chmod -R o+w /pool/mydataset
(Remarque: ceci ajoutera des autorisations de manière récursive dans /pool/mydataset
), ou peut-être mieux pour vous assurer que les utilisateurs du groupe user1
ont des autorisations en écriture (définissez-le récursivement avec Sudo chmod -R g+w /pool/mydataset
si pas), puis ajoutez le paramètre suivant. propriétaire du conteneur à grouper user1
avec
Sudo usermod -a -G user1 <username>
(Dans mon cas ci-dessus, nous avons vu qu'aucun utilisateur de l'hôte ne possède le conteneur. Nous devons donc d'abord créer un utilisateur avec uid et gid 100000 avec
adduser --no-create-home --uid 100000 --disabled-password --disabled-login <username>
Bien sûr, vous pouvez souhaiter donner des autorisations uniquement à user1
à l'intérieur du conteneur. Créez donc un utilisateur avec son hôte uid et ajoutez-le au groupe user1
sur l'hôte, par exemple, 101001.)
Vous pouvez aussi vous lancer dans le nucléaire et donner la propriété de la racine de /pool/mydataset
à mycontainer
avec
Sudo chown -R 100000:100000 /pool/mydataset
mais cela pourrait déranger d'autres utilisateurs de l'hôte accédant aux données.
Une fois que vous avez terminé, le montage que vous avez défini doit autoriser les autorisations d'écriture dans mycontaier
, comme vous le souhaitez.