web-dev-qa-db-fra.com

Comment exécuter MongoDB en tant qu'utilisateur non root sous Linux?

Je peux démarrer MongoDB en tant que $Sudo service mongod start. Quand je commence sans Sudo cela me donne cette erreur:

/etc/init.d/mongod: line 58: ulimit: open files: cannot modify limit: Operation not permitted
/etc/init.d/mongod: line 60: ulimit: max user processes: cannot modify limit: Operation not permitted
Starting mongod: runuser: may not be used by non-root users

1) Maintenant, j'ai changé la propriété de l'utilisateur non root sur tous les mongo directores que j'ai pu trouver, c'est-à-dire /var/lib/mongo, var/log/mongodb, data/db, var/run/mongodb

$Sudo chown -R nonRootUser:nonRootUser [directory]

2) J'ai supprimé mongod.lock des dossiers

3) J'ai exécuté --repair aussi

Cela me donne toujours la même erreur.

J'ai aussi essayé

$mongod --fork --logpath /var/log/mongodb.log

about to fork child process, waiting until server is ready for connections.
forked process: 18566
ERROR: child process failed, exited with error number 1

le fichier mongod.log dit ceci:

2016-03-17T15:03:49.053+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
2016-03-17T15:03:54.144+0000 I CONTROL  [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends

C'est Amazon Linux. Je peux le démarrer comme ceci $ mongod, mais je veux l'exécuter en tant que démon afin qu'il fonctionne en continu.

Le nonRootUser est un nouvel utilisateur que j'ai créé en plus de ec2-user. Peut-être qu'il y a des problèmes de configuration liés à l'exécution de processus démon si vous n'êtes pas utilisateur ec2?

MISE À JOUR: Changement de propriétaire de tout pour ec2-user, obtenant toujours exactement les mêmes erreurs qu'auparavant.

4
ed-ta

Vous mentionnez que vous avez utilisé le programme d'installation rpm pour installer MongoDB sur l'AMI Amazon Linux. Lorsque vous effectuez cette opération, l'utilisateur mongod est créé sur le système et tous les fichiers appropriés sont créés et détenus par l'utilisateur mongod. Lors du démarrage de MongoDB installé par rpm, la commande doit être exécutée par root ou exécutée à l'aide de Sudo. En effet, le script init doit exécuter une commande change user pour que le processus mongod puisse être forké en tant qu'enfant de l'utilisateur mongod.

Le fait de ne pas utiliser root ou Sudo pour démarrer le service entraîne les erreurs que vous avez citées ci-dessus.

/etc/init.d/mongod: line 58: ulimit: open files: cannot modify limit: Operation not permitted
/etc/init.d/mongod: line 60: ulimit: max user processes: cannot modify limit: Operation not permitted
Starting mongod: runuser: may not be used by non-root users

Donc, pour fonctionner en tant que service, vous devez utiliser Sudo ou root. Il n'y a pas de moyen simple de contourner cela, sauf en accordant à l'utilisateur mongod un shell, en lui attribuant un mot de passe, en se connectant en tant qu'utilisateur, puis en exécutant le service. Cela entraînera toujours des erreurs lors de la tentative de modification de ulimits et n'est généralement pas recommandé.

Pour démarrer MongoDB sans l'exécuter en tant que service, puisque vous avez utilisé le rpm, le binaire mongod doit se trouver dans votre chemin, donc ce qui suit devrait fonctionner

mongod --dbpath /path/to/data --logpath /path/to/mongod.log --fork

Notez que cette opération l'exécutera en tant qu'utilisateur actuellement connecté, ce qui signifie que tous les fichiers de données ainsi que mongod.log doit être accessible en écriture par cet utilisateur. Idéalement, ces fichiers devraient appartenir à cet utilisateur.

3
Pete Garafano

Après avoir modifié les autorisations sur les répertoires et les fichiers, n'oubliez pas de déconnecter et reconnectez-vous.

Je ne peux toujours pas l'exécuter en tant que

$ service mongod start

il ne peut être exécuté qu'en tant que root.

Mais vous pouvez également l'exécuter en tant que démon comme ceci:

 $ mongod --fork --logpath to/logpath

Juste pour être sûr, j'ai créé un répertoire data/log pour logpath. Et oui, vous pouvez créer d'autres utilisateurs en plus de l'utilisateur ec2 sur Amazon Linux et ils peuvent également exécuter mongodb

2
ed-ta

Une autre alternative est de tiliser l'archive tar au lieu d'un programme d'installation :

  1. téléchargement depuis https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.3.tgz (utilisez wget)

  2. extrait (tar xaf mongodb-linux...tgz) et déplacer éventuellement vers un autre répertoire

  3. créer un répertoire de données (mkdir ~/data)

  4. commencer comme mongod --dbpath ~/data --fork
1
serv-inc