Jak zmienić użytkownika, na którym działa Transmisja?

10

Zainstalowałem Transmission za pośrednictwem PPA, a demon uruchamia się podczas rozruchu. Chcę zmienić użytkownika, który uruchamia demona, ponieważ chcę, aby pobrane pliki były przypisane do tego samego użytkownika, co moja instalacja XBMC, i nie mogę znaleźć miejsca, w którym mogę to edytować.

Demon używa funkcji upstart, więc nie ma nic o tym, którzy użytkownicy go uruchamiają, /etc/init.d/transmission-daemonani nie ma nic w /etc/default/transmission-daemontym użytkowniku

Używam tych ppas do transmisji:

/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
źródło
Czy możesz podać PPA i wersję Ubuntu? Gdziekolwiek spojrzałem, pakiet demona transmisji ma plik /etc/init.d/transmission-daemon.
umów się
Przepraszam, jeśli nie byłem jasny, miałem na myśli to, że nie ma nic o tym, który użytkownik uruchamia demona w tym pliku
BvdBijl
Na początku pliku /etc/init.d/transmission-daemon powinieneś zobaczyć wiersz „USER = debian-transmisja”; to powinno być to.
umów się
Mój wygląda następująco: gist.github.com/boukevanderbijl/04c7d6a322a08e9629cb
BvdBijl
Dodałem PPA, których używam w początkowym poście
BvdBijl,

Odpowiedzi:

4

Począwszy od wersji 1.4 setuidi setgidsą obsługiwane natywnie w pliku konfiguracyjnym:

setgid <groupname>

i

setuid <username>

Przed wersją 1.4 możesz użyć tego ( jak opisano tutaj ):

exec start-stop-daemon --start -c {user} --exec {command}
Rinzwind
źródło
2
Muszę edytować /etc/init/transmission-daemon.conf
BvdBijl
1
Miałem też sudo chown -R użytkownik: grupa / var / lib / transmisja-demon / jak powiedział askubuntu.com/questions/290943/...
Philippe Gachoud
15

Ponieważ wszystkie pozostałe odpowiedzi dotyczą wstępnie Ubuntu, oto zaktualizowany przewodnik dla Ubuntu 16.04 ( z sensecodons.com ). Zasadniczo utwórz dodatkową jednostkę dla „transmission-daemon.service”, aby zmienić User=...ustawienie, a następnie zaktualizuj plik „~ / .config / Transmission-daemon / settings.json” tego użytkownika.

Zatrzymaj transmisję (jeśli już działa).

sudo systemctl stop transmission-daemon

Utwórz katalog plików uzupełniających do przesłania:

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

Utwórz nowy plik dodatku o nazwie „run-as-user.conf”.

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

i umieść w nim następujący tekst.

[Service]
User=codon

Oczywiście używaj żądanej nazwy użytkownika, a nie „kodonu”.

Powiedz systemdowi, aby przeładował swoje jednostki.

sudo systemctl daemon-reload

Następnie będziesz chciał rozpocząć, a następnie zatrzymać transmisję, aby utworzyć ~/.config/transmission-daemon/katalog dla nowego użytkownika.

Rozpocznij transmisję, a następnie zatrzymaj transmisję.

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

Powinieneś teraz mieć następujący katalog w katalogu domowym użytkownika: .config/transmission-daemon/

Odtąd powinieneś być w stanie ~/.config/transmission-daemon/settings.jsonnormalnie aktualizować .

Po zakończeniu rozpocznij transmisję.

sudo systemctl start transmission-daemon
Douglas Manley
źródło
3
Zamiast ręcznie tworzyć ten katalog i plik, użyj systemctl edit transmission-daemon.service, który automatycznie 1. utworzy ten katalog i plik oraz 2. kiedy zapiszesz i zamkniesz, uruchom systemctl daemon-reloadtakże.
muru
7

Założenia:

  • Użyłeś tego PPA: ppa:transmissionbt/ppa
  • Chcesz uruchomić Transmisję z użytkownikiem: some_useri grupą:some_group

W przypadku systemu inicjującego System V (SysV) (np .: Ubuntu 10.04 LTS):

  1. Zatrzymaj demona transmisji:

    sudo service transmission-daemon stop
    
  2. Edytuj skrypty init.d

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

    ... i zmień USER=debian-transmissionnaUSER=some_user

W przypadku systemu inicjującego Upstart (np .: Ubuntu 14.04 LTS):

  1. Zatrzymaj demona transmisji:

    sudo service transmission-daemon stop
    
  2. Edytuj skrypty inicjujące:

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

    ... i edytuj w następujący sposób:

    • zmień setuid debian-transmissionnasetuid some_user

    • i zmień setgid debian-transmissionnasetgid some_group

W przypadku systemdowego systemu init (np .: Ubuntu 16.04 LTS):

  1. Zatrzymaj demona transmisji:

    sudo systemctl stop transmission-daemon.service
    
  2. Utwórz plik systemd override.conf:

    sudo systemctl edit transmission-daemon.service
    

    ... i edytuj w następujący sposób:

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

    Uwagi:

    • Spowoduje to utworzenie następującego pliku: /etc/systemd/system/transmission-daemon.service.d/override.conf

    • Puste przypisania zmiennych (np . User=:) są używane do kasowania / resetowania wartości w istniejącej zmiennej. Wygląda na to, że tak się dzieje w przypadku wymiany drop-up pliku systemowego. Patrz: „Przykład 2. Przesłanianie ustawień dostawcy” w podręczniku systemd.unit :

      „... w przypadku plików rozwijanych, jeśli chce się usunąć wpisy z ustawienia, które jest analizowane jako lista (i nie jest zależnością),… najpierw należy wyczyścić listę przed ponownym dodaniem wszystkich wpisów oprócz ten, który ma zostać usunięty ... ”

  3. Systemd ponownie ładuje i uruchamia demona transmisji:

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

    Uwaga: W przeciwieństwie do systemów inicjujących Upstart i SysV, demon transmisji zapisuje całą konfigurację i ustawienia /home/some_user/.config/transmission-daemon/zamiast /etc/transmission-daemon/settings.jsoni/var/lib/transmission-daemon

Uwagi i referencje


Opcjonalne / dodatkowe informacje dotyczące uprawnień i aktualizacji pakietów:

Uwaga: Poniższe informacje dotyczą tylko systemów inicjujących Upstart i SysV

Zmiana uprawnień do plików konfiguracyjnych Transmission

Jeśli nie używasz systemowego systemu inicjującego, być może teraz będziesz musiał zmienić uprawnienia do plików konfiguracyjnych Transmission z user=debian-transmissiondo user=some_useri od group=debian-transmissiondo group=some_group.

  1. Sprawdź lokalizację katalogu konfiguracji transmisji. Można go znaleźć w /etc/default/transmission-daemonpliku jako taką linię:

    CONFIG_DIR="/var/lib/transmission-daemon/info"
    
  2. Zakładając, że katalog konfiguracji to /var/lib/transmission-daemon/info: zmień własność plików konfiguracyjnych:

    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. Zmień własność innych plików:

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

Informacje dodatkowe (aktualizacja transmisji):

Ponieważ zmieniłeś domyślnego użytkownika, może się okazać, że po zaktualizowaniu Transmission przy użyciu repozytorium (np .: apt-get upgrade) demon transmisji już nie działa.

Uruchomienie „sudo apt-get -f install” powoduje następujący błąd:

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)

Powodem, dla którego demon nie uruchamia się („invoke-rc.d: initscript-demon-transmisja, działanie„ start ”nie powiodło się.”), Ponieważ zmieniliśmy uprawnienia z „debian-transmisja” na „jakiś_użytkownik” i po aktualizacji zostały zresetowane . Aby to naprawić, wykonaj następujące czynności:

  1. Zatrzymaj demona i edytuj plik konfiguracyjny:

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

    ... i zmień USER=some_usernaUSER=debian-transmission

  2. Ponownie spróbuj naprawić aktualizację, uruchamiając:

    sudo apt-get -f install
    
  3. Jeśli aktualizacja się powiedzie, demon transmisji powinien teraz działać. Możesz teraz wykonać powyższe kroki, aby ponownie zmienić użytkownika / grupę.

muczeć
źródło
6

To nie jest pełna historia. Oprócz zmiany

setgid <groupname>

i

setuid <username>

w

/etc/init/transmission-daemon.conf

musisz także zmienić uprawnienia do pliku konfiguracyjnego demona transmisji. W przeciwnym razie nie będzie w stanie przepisać ustawień do tego pliku, a demon uruchomi się ponownie, dopóki upstart nie uzna, że ​​ma wystarczającą szansę (init: demon transmisji odradza się zbyt szybko, zatrzymany)

sudo chown <user>:<group> /etc/transmission-daemon/settings.json
sudo chown -R <user>:<group> /var/lib/transmission-daemon/ 
mrClass
źródło
Dziękujemy za trochę zmiany uprawnień settings.json. Przegapiłem to.
nighthawk454
2

W systemach używających systemd plikiem, który chcesz edytować, może być:

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

Kontynuuj edycję za pomocą:

sudo systemctl daemon-reload

Epskampie
źródło
To mi pomogło. Zrobiłem wszystkie inne kroki, ale nie działałem. Dziękuję Ci!
Martijn Smidt,
2

W Ubuntu 16.04 usługa uruchamiania została zmieniona z upstart na systemd, dzięki czemu poprzednie odpowiedzi stały się nieaktualne. Aby zmienić użytkownika-demona transmisji, uruchom polecenie:

Zatrzymaj demona:

sudo service transmission-daemon stop

Zmień własność plików konfiguracyjnych i „home”:

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

Następnie edytuj plik za /lib/systemd/system/transmission-daemon.servicepomocą:

[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

Uwaga User, --config-diri --log-debugzmiany.

Załaduj ponownie konfigurację systemową:

sudo systemctl daemon-reload

Uruchom ponownie demona:

sudo service transmission-daemon start

Po ustawieniu opcji --log-debug(która zapewni więcej informacji na temat dowolnego problemu) możesz uzyskać dziennik demona:

sudo journalctl -u transmission-daemon.service

Gotowy.

Ważne uwagi:

Możesz zignorować pliki:

/etc/default/transmission-daemon: Wygląda na to, że nikt nie pozyskuje go w systemach systemowych.

/etc/init.d/transmission-daemon: Wygląda na to, że był to stary skrypt startowy systemu 5.

/etc/init/transmission-daemon.conf: Wygląda na to, że jest to stary skrypt początkowy.

Carolina Aguilar
źródło
2
Nie edytuj /lib/systemd/system/transmission-daemon.serviceręcznie. Użyj systemctl edit transmission-daemon.servicezamiast tego, w przeciwnym razie zmiany zostaną utracone podczas aktualizacji pakietu.
muru
0

Zrobiłem następujące, co wydaje mi się mniej inwazyjne niż inne odpowiedzi.

  1. Usuń uruchomienie demona transmisji:

    sudo update-rc.d -f transmission-daemon remove
    
  2. Dodaj następujące elementy /etc/profile:

    if [ -f "$HOME/.autostart" ]; then
      $HOME/.autostart
    fi
    
  3. Utwórz ~/.autostart:

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

Być może jest to nieco bardziej przenośne, działa dla mnie na zwykłym Debianie i minibianie.

nicholas.alipaz
źródło
nie jest to zły pomysł, ale wymaga, aby użytkownik zalogował się za pomocą powłoki, która wykonuje /etc/profile(na przykład zsh go nie wykonuje)
elboletaire