Comment modifier l'utilisateur sous lequel la transmission s'exécute?

10

J'ai installé Transmission via un PPA et le démon démarre au démarrage. Je veux changer l'utilisateur qui exécute le démon parce que je veux que les fichiers téléchargés soient sous le même utilisateur que mon installation XBMC, et je n'arrive pas à trouver où le modifier.

Le démon utilise upstart donc il n'y a rien sur les utilisateurs qui l'exécutent /etc/init.d/transmission-daemonet il n'y a rien /etc/default/transmission-daemonsur l'utilisateur non plus

J'utilise ces ppas pour la transmission:

/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list:deb //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main

/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list:deb-src //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main

/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list.save:deb //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main

/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list.save:deb-src //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main
BvdBijl
la source
Pouvez-vous s'il vous plaît fournir le PPA et la version d'Ubuntu? Partout où j'ai regardé, le paquet transmission-daemon a le fichier /etc/init.d/transmission-daemon.
organiser le
Désolé si je n'ai pas été clair, je voulais dire qu'il n'y a rien sur l'utilisateur qui exécute le démon dans ce fichier
BvdBijl
Au début du fichier /etc/init.d/transmission-daemon, vous devriez voir la ligne "USER = debian-transmission"; ça devrait être ça.
organiser le
Le mien ressemble à ceci: gist.github.com/boukevanderbijl/04c7d6a322a08e9629cb
BvdBijl
J'ai ajouté les PPA que j'utilise dans le post de départ
BvdBijl

Réponses:

4

À partir de upstart v1.4, setuidet setgidsont pris en charge nativement dans le fichier de configuration:

setgid <groupname>

et

setuid <username>

Avant la v1.4, vous pouvez utiliser ceci ( comme décrit ici ):

exec start-stop-daemon --start -c {user} --exec {command}
Rinzwind
la source
2
Je dois modifier /etc/init/transmission-daemon.conf
BvdBijl
1
Je devais aussi sudo chown -R user: group / var / lib / transmission-daemon / like said askubuntu.com/questions/290943/…
Philippe Gachoud
15

Étant donné que toutes les autres réponses concernent Ubuntu pre-systemd, voici un guide mis à jour pour Ubuntu 16.04 ( de sensecodons.com ). Essentiellement, créez une unité supplémentaire pour "transmission-daemon.service" pour modifier le User=...paramètre, puis mettez à jour le fichier "~ / .config / transmission-daemon / settings.json" de cet utilisateur.

Arrêtez la transmission (si elle est déjà en cours d'exécution).

sudo systemctl stop transmission-daemon

Créez le répertoire des fichiers supplémentaires pour la transmission:

sudo mkdir -p /etc/systemd/system/transmission-daemon.service.d

Créez un nouveau fichier de supplément appelé "run-as-user.conf".

sudo vi /etc/systemd/system/transmission-daemon.service.d/run-as-user.conf

et y mettre le texte suivant.

[Service]
User=codon

De toute évidence, utilisez votre nom d'utilisateur souhaité et non "codon".

Dites à systemd de recharger ses unités.

sudo systemctl daemon-reload

Ensuite, vous voudrez démarrer puis arrêter la transmission pour lui faire créer le ~/.config/transmission-daemon/répertoire de votre nouvel utilisateur.

Démarrez la transmission, puis arrêtez la transmission.

sudo systemctl start transmission-daemon; sudo systemctl stop transmission-daemon

Vous devriez maintenant avoir le répertoire suivant dans le répertoire personnel de votre utilisateur: .config/transmission-daemon/

À partir d'ici, vous devriez pouvoir mettre à jour ~/.config/transmission-daemon/settings.jsonnormalement.

Lorsque vous avez terminé, lancez la transmission.

sudo systemctl start transmission-daemon
Douglas Manley
la source
3
Au lieu de créer manuellement ce répertoire et ce fichier, utilisez systemctl edit transmission-daemon.service, qui 1. crée automatiquement ce répertoire et ce fichier, et 2. lorsque vous enregistrez et quittez, exécutez systemctl daemon-reloadégalement.
muru
7

Hypothèses:

  • Vous avez utilisé ce PPA: ppa:transmissionbt/ppa
  • Vous souhaitez exécuter la transmission avec l'utilisateur: some_useret le groupe:some_group

Pour le système d'initialisation System V (SysV) (par exemple: Ubuntu 10.04 LTS):

  1. Arrêtez le démon de transmission:

    sudo service transmission-daemon stop
    
  2. Modifiez les scripts init.d

    sudo nano /etc/init.d/transmission-daemon
    

    ... et passez USER=debian-transmissionàUSER=some_user

Pour le système d'initialisation Upstart (par exemple: Ubuntu 14.04 LTS):

  1. Arrêtez le démon de transmission:

    sudo service transmission-daemon stop
    
  2. Modifiez les scripts d'initialisation:

    sudo nano /etc/init/transmission-daemon.conf
    

    ... et modifiez comme suit:

    • changer setuid debian-transmissionpoursetuid some_user

    • et changer setgid debian-transmissionpoursetgid some_group

Pour le système d'initialisation systemd (par exemple: Ubuntu 16.04 LTS):

  1. Arrêtez le démon de transmission:

    sudo systemctl stop transmission-daemon.service
    
  2. Créez le fichier override.conf de systemd:

    sudo systemctl edit transmission-daemon.service
    

    ... et modifiez comme suit:

    [Service]
    User=
    User=some_user
    Group=
    Group=some_group
    

    Remarques:

    • Cela crée le fichier suivant: /etc/systemd/system/transmission-daemon.service.d/override.conf

    • Les affectations de variables vides (par exemple:) User=sont utilisées pour effacer / réinitialiser la valeur dans la variable existante. Cela semble être la façon dont les choses sont faites lors de l'utilisation du remplacement direct du fichier d'unité systemd. Voir: "Exemple 2. Remplacement des paramètres du fournisseur" dans le manuel systemd.unit :

      "... pour les fichiers de dépôt, si l'on veut supprimer des entrées d'un paramètre qui est analysé comme une liste (et qui n'est pas une dépendance), ... il faut d'abord effacer la liste avant de rajouter toutes les entrées sauf celui qui doit être supprimé ... "

  3. Systemd recharger et démarrer la transmission démon:

    sudo systemctl daemon-reload
    sudo systemctl start transmission-daemon.service
    

    Remarque: contrairement aux systèmes de démarrage Upstart et SysV, le démon de transmission enregistre toutes les configurations et tous les paramètres au /home/some_user/.config/transmission-daemon/lieu de /etc/transmission-daemon/settings.jsonet/var/lib/transmission-daemon

Notes et références


Informations facultatives / supplémentaires concernant les autorisations et les mises à jour des packages:

Remarque: ce qui suit n'est probablement pertinent que pour les systèmes d'initialisation Upstart et SysV uniquement

Modification des autorisations sur les fichiers de configuration de Transmission

Si vous n'utilisez pas le système init systemd vous devrez peut - être maintenant modifier les autorisations pour les fichiers de configuration de transmission de user=debian-transmissionla user=some_useret de group=debian-transmissionla group=some_group.

  1. Vérifiez l'emplacement de votre répertoire de configuration de transmission. Vous pouvez le trouver mentionné dans le /etc/default/transmission-daemonfichier sous la forme d'une ligne comme ceci:

    CONFIG_DIR="/var/lib/transmission-daemon/info"
    
  2. En supposant que votre répertoire de configuration soit /var/lib/transmission-daemon/info, changez la propriété des fichiers de configuration:

    sudo chown some_user:some_group /var/lib/transmission-daemon/downloads
    sudo chown some_user:some_group /var/lib/transmission-daemon/info
    sudo chown some_user:some_group /var/lib/transmission-daemon/info/blocklists
    sudo chown some_user:some_group /var/lib/transmission-daemon/info/dht.dat
    sudo chown some_user:some_group /var/lib/transmission-daemon/info/resume
    sudo chown some_user:some_group /var/lib/transmission-daemon/info/torrents
    
  3. Changer la propriété des autres fichiers:

    sudo chown :some_group /etc/transmission-daemon
    sudo chown some_user:some_group /etc/transmission-daemon/settings.json
    

Informations supplémentaires (mise à jour de la transmission):

Étant donné que vous avez modifié l'utilisateur par défaut, vous pouvez constater qu'après la mise à jour de Transmission à l'aide du référentiel (par exemple: apt-get upgrade), le démon de transmission ne fonctionne plus.

L'exécution de "sudo apt-get -f install" donne l'erreur suivante:

Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up transmission-daemon (2.84-0ubuntu0.12.04.1) ...
 * Starting bittorrent daemon transmission-daemon
invoke-rc.d: initscript transmission-daemon, action "start" failed.
dpkg: error processing transmission-daemon (--configure):
 subprocess installed post-installation script returned error exit status 255
Errors were encountered while processing:
 transmission-daemon
E: Sub-process /usr/bin/dpkg returned an error code (1)

La raison pour laquelle le démon ne démarre pas ("invoke-rc.d: démon de transmission initscript, l'action" start "a échoué.") Est parce que nous avons changé les autorisations de "debian-transmission" en "some_user" et après la mise à jour, celles-ci ont été réinitialisées . Pour résoudre ce problème, procédez comme suit:

  1. Arrêtez le démon et modifiez le fichier de configuration:

    sudo service transmission-daemon stop
    sudo nano /etc/init.d/transmission-daemon
    

    ... et passez USER=some_useràUSER=debian-transmission

  2. Réessayez de corriger la mise à jour en exécutant:

    sudo apt-get -f install
    
  3. Si la mise à jour réussit, le démon de transmission devrait maintenant être en cours d'exécution. Vous pouvez maintenant suivre les étapes ci-dessus pour modifier à nouveau l'utilisateur / groupe.

meuglement
la source
6

Ce n'est pas l'histoire complète. En plus de changer

setgid <groupname>

et

setuid <username>

dans

/etc/init/transmission-daemon.conf

vous devez également modifier les autorisations du fichier de configuration de transmission-daemon. Sinon, il ne pourra pas réécrire les paramètres dans ce fichier et le démon redémarrera jusqu'à ce que le débutant pense qu'il a eu suffisamment de chances (init: transmission-daemon réapparition trop rapide, arrêté)

sudo chown <user>:<group> /etc/transmission-daemon/settings.json
sudo chown -R <user>:<group> /var/lib/transmission-daemon/ 
mrClass
la source
Merci pour le peu de modification des autorisations de settings.json. Ça m'a manqué.
nighthawk454
2

Sur les systèmes utilisant systemd, le fichier que vous souhaitez modifier peut en fait être:

/etc/systemd/system/multi-user.target.wants/transmission-daemon.service

Suivi de l'édition avec:

sudo systemctl daemon-reload

Epskampie
la source
C'est ça qui m'a aidé. J'ai fait toutes les autres étapes mais n'ai pas fonctionné. Je vous remercie!
Martijn Smidt
2

Dans Ubuntu 16.04, le service de démarrage est passé de upstart à systemd, rendant obsolète le must des réponses précédentes. Pour modifier les exécutions du démon de transmission utilisateur, exécutez:

Arrêter le démon:

sudo service transmission-daemon stop

Changer la propriété des fichiers de configuration et "home":

sudo chown -R USER:USER /var/lib/transmission-daemon/*
sudo chown -R USER:USER /etc/transmission-daemon/settings.json

Modifiez ensuite le fichier /lib/systemd/system/transmission-daemon.serviceavec:

[Unit]
Description=Transmission BitTorrent Daemon
After=network.target

[Service]
User=USER
Type=notify
ExecStart=/usr/bin/transmission-daemon -f --log-debug --config-dir /var/lib/transmission-daemon/info
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

S'il vous plaît noter la User, --config-diret les --log-debugchangements.

Recharger la configuration systemd:

sudo systemctl daemon-reload

Redémarrez le démon:

sudo service transmission-daemon start

Une fois que vous avez défini l' --log-debugoption (qui vous donnera plus d'informations sur tout problème), vous pouvez obtenir le journal du démon:

sudo journalctl -u transmission-daemon.service

Terminé.

A noter:

Vous pouvez ignorer les fichiers:

/etc/default/transmission-daemon: Il semble que personne ne l'approvisionne dans les systèmes systemd.

/etc/init.d/transmission-daemon: Il semble que ce soit l'ancien script de démarrage du système 5.

/etc/init/transmission-daemon.conf: Il semble que ce soit l'ancien script de démarrage parvenu.

Carolina Aguilar
la source
2
Ne modifiez pas /lib/systemd/system/transmission-daemon.servicemanuellement. Utilisez-le à la systemctl edit transmission-daemon.serviceplace, sinon vos modifications seront perdues lors de la mise à niveau du package.
muru le
0

J'ai fait ce qui suit, ce qui me semble moins invasif que les autres réponses.

  1. Supprimez le démarrage de transmission-daemon:

    sudo update-rc.d -f transmission-daemon remove
    
  2. Ajoutez ce qui suit à /etc/profile:

    if [ -f "$HOME/.autostart" ]; then
      $HOME/.autostart
    fi
    
  3. Créer ~/.autostart:

    #!/bin/bash
    if [ -z "$(pidof transmission-daemon)" ]; then
     /usr/bin/transmission-daemon --config-dir /home/[USERNAME]/.config/transmission-daemon &
    fi
    

C'est peut-être un peu plus portable, cela fonctionne aussi pour moi sur Debian ordinaire et sur minibian.

nicholas.alipaz
la source
pas une mauvaise idée mais cela nécessite que l'utilisateur se connecte avec un shell qui s'exécute /etc/profile(zsh ne l'exécute pas, par exemple)
elboletaire