İletim altında çalışan kullanıcıyı nasıl değiştirebilirim?


10

İletimi bir PPA aracılığıyla yükledim ve arka plan programı önyüklemede başlar. İndirilen dosyaların XBMC kurulumumla aynı kullanıcı altında olmasını istediğimden, daemon'u çalıştıran kullanıcıyı değiştirmek istiyorum ve bunu nerede düzenleyeceğimi göremiyorum.

Daemon upstart kullanıyor, bu yüzden hangi kullanıcıların onu çalıştırdığı hakkında hiçbir şey yok ve kullanıcı hakkında da hiçbir /etc/init.d/transmission-daemonşey /etc/default/transmission-daemonyok

Bu PPA'ları iletim için kullanıyorum:

/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

Lütfen PPA'yı ve Ubuntu sürümünü sağlayabilir misiniz? Her yerde iletim-daemon paketinde /etc/init.d/transmission-daemon dosyası var.
düzenleme

Anlaşılmadı, üzgünüm, hangi kullanıcının bu dosyada daemon'u çalıştırdığı hakkında bir şey olmadığı anlamına geliyordu
BvdBijl

/Etc/init.d/transmission-daemon dosyasının başında "USER = debian-transmission" satırını görmelisiniz; bu olmalı.
düzenlemek


Yanıtlar:


4

Upstart v1.4 itibarıyla setuidve setgidyapılandırma dosyasında yerel olarak desteklenir:

setgid <groupname>

ve

setuid <username>

V1.4'ten önce bunu kullanabilirsiniz ( burada açıklandığı gibi ):

exec start-stop-daemon --start -c {user} --exec {command}

2
Ben düzenleme /etc/init/transmission-daemon.conf zorunda
BvdBijl

1
Ayrıca sudo chown -R kullanıcı vardı: grup / var / lib / iletim-daemon / gibi dedi askubuntu.com/questions/290943/…
Philippe Gachoud

15

Diğer tüm cevaplar Ubuntu pre-systemd için olduğundan, Ubuntu 16.04 için güncellenmiş bir kılavuz ( sensecodons.com'dan ). Esasen, User=...ayarı değiştirmek için "transmission-daemon.service" için ek bir birim oluşturun ve ardından kullanıcının "~ / .config / transmission-daemon / settings.json" dosyasını güncelleyin.

İletimi durdur (zaten çalışıyorsa).

sudo systemctl stop transmission-daemon

İletim için ek dosya dizini oluşturun:

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

"Run-as-user.conf" adlı yeni bir ek dosya oluşturun.

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

ve içine aşağıdaki metni koyun.

[Service]
User=codon

Açıkçası, "kodon" değil, istediğiniz kullanıcı adını kullanın.

Systemd'e birimlerini yeniden yüklemesini söyleyin.

sudo systemctl daemon-reload

Ardından, ~/.config/transmission-daemon/yeni kullanıcınızın dizinini oluşturmasını sağlamak için iletimi başlatmak ve sonra durdurmak istersiniz .

Aktarımı başlatın ve ardından aktarımı durdurun.

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

Artık kullanıcınızın ana dizininde şu dizine sahip olmalısınız: .config/transmission-daemon/

Buradan ~/.config/transmission-daemon/settings.jsonnormal şekilde güncelleyebilmeniz gerekir .

İşiniz bittiğinde iletimi başlatın.

sudo systemctl start transmission-daemon

3
Bu dizini ve dosyayı el ile oluşturmak yerine, bu dizini ve dosyayı systemctl edit transmission-daemon.serviceotomatik olarak oluşturacak olan 1. kullanın ve 2. kaydedip çıktığınızda da çalıştırın systemctl daemon-reload.
muru

8

Varsayımlar:

  • Bu PPA'yı kullandınız: ppa:transmissionbt/ppa
  • İletimi kullanıcı: some_userve grup ile çalıştırmak istiyorsunuz :some_group

System V (SysV) başlangıç ​​sistemi için (örn: Ubuntu 10.04 LTS):

  1. İletim Daemon'u durdurun:

    sudo service transmission-daemon stop
    
  2. İnit.d komut dosyalarını düzenleyin

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

    ... ve değişim USER=debian-transmissioniçinUSER=some_user

Upstart başlatma sistemi için (örn: Ubuntu 14.04 LTS):

  1. İletim Daemon'u durdurun:

    sudo service transmission-daemon stop
    
  2. İnit komut dosyalarını düzenleyin:

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

    ... ve aşağıdaki gibi düzenleyin:

    • değişim setuid debian-transmissioniçinsetuid some_user

    • ve değiştirmek setgid debian-transmissioniçinsetgid some_group

Systemd başlangıç ​​sistemi için (örn: Ubuntu 16.04 LTS):

  1. İletim Daemon'u durdurun:

    sudo systemctl stop transmission-daemon.service
    
  2. Systemd override.conf dosyası oluşturun:

    sudo systemctl edit transmission-daemon.service
    

    ... ve aşağıdaki gibi düzenleyin:

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

    Notlar:

    • Bu, aşağıdaki dosyayı oluşturur: /etc/systemd/system/transmission-daemon.service.d/override.conf

    • Boş değişken atamaları (örneğin User=:) mevcut değişkendeki değeri temizlemek / sıfırlamak için kullanılır. Bu, systemd birim dosyasının drop-in değiştirilmesi kullanılırken işlerin nasıl yapıldığı gibi görünüyor. Bkz. Systemd.unit kılavuzundaki "Örnek 2. Satıcı ayarlarını geçersiz kılma" :

      "... açılan dosyalar için, bir liste olarak ayrıştırılan (ve bağımlılık olmayan) bir ayardan girdileri kaldırmak istiyorsa, ... hariç tüm girişleri yeniden eklemeden önce listeyi temizlemeniz gerekir kaldırılacak olan ... "

  3. Systemd yeniden yükleme ve iletim arka plan programı başlatma:

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

    Not: Sonradan görme ve SysV aksine init sistemleri iletim-daemon tüm yapılandırma ve ayarları kaydeder /home/some_user/.config/transmission-daemon/yerine /etc/transmission-daemon/settings.jsonve/var/lib/transmission-daemon

Notlar ve Referanslar


İzinler ve paket güncellemeleri hakkında İsteğe Bağlı / Ek Bilgiler:

Not: Aşağıdakiler yalnızca yalnızca Upstart ve SysV init sistemleri için geçerlidir

İletimin yapılandırma dosyalarındaki İzinleri Değiştirme

Eğer systemd init sistemi kullanmıyorsanız Bundan Transmission'ın Yapılandırma dosyaları için izinleri değiştirmeniz gerekebilir user=debian-transmissioniçin user=some_userve gelen group=debian-transmissionetmek group=some_group.

  1. İletim Yapılandırma Dizininizin konumunu kontrol edin. /etc/default/transmission-daemonDosyada bahsedildiği gibi bir satır olarak bulabilirsiniz :

    CONFIG_DIR="/var/lib/transmission-daemon/info"
    
  2. Dolayısıyla, Yapılandırma Dizininizin olduğu varsayıldığında /var/lib/transmission-daemon/info, yapılandırma dosyalarının sahipliğini değiştirin:

    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. Diğer dosyaların sahipliğini değiştirme:

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

Ekstra Bilgi (İletimin güncellenmesi):

Varsayılan kullanıcıyı değiştirdiğiniz için, İletimi depoyu kullanarak güncelledikten sonra (örneğin: apt-get yükseltme) iletim arka plan programının artık çalışmadığını görebilirsiniz.

"Sudo apt-get -f install" komutunu çalıştırmak aşağıdaki hatayı verir:

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)

Daemon uygulamasının başarısız olmasının nedeni ("invoke-rc.d: initscript transmission-daemon, eylem" start "başarısız oldu.)" İzinleri "debian-transmission" dan "some_user" olarak değiştirmemiz ve güncellemeden sonra bunların sıfırlanmasıdır. . Düzeltmek için aşağıdakileri yapın:

  1. Daemon ve Edit yapılandırma dosyasını durdur:

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

    ... ve değişim USER=some_useriçinUSER=debian-transmission

  2. Güncellemeyi çalıştırarak düzeltmeyi tekrar deneyin:

    sudo apt-get -f install
    
  3. Güncelleme başarılı olursa İletim arka plan programı şimdi çalışıyor olmalıdır. Artık kullanıcıyı / grubu tekrar değiştirmek için yukarıdaki adımları takip edebilirsiniz.


Harika bir cevap, ama SysV'deki grubu değiştirmeyi biliyor musunuz ? Görüyorum ama /etc/init.d/transmission-daemoniçeriyor . USER=GROUP=
mpen

1
Bunu şimdi test etmem zor ama düzenlemeyi /etc/init.d/transmission-daemonaşağıdaki gibi deneyebilirsiniz . Başka bir değişken ekleyin GROUP=some_groupmevcut değişkene ek olarak USER=some_userve daha sonra değiştirmek --chuid $USERiçin --chuid $USER:$GROUP. Ayrıca start-stop-daemon man sayfasını
moo

Hmm, denedim ve şimdi göre her iki grup olarak çalışıyor gibi görünüyor grep '^Groups' /proc/$(pgrep transmission)/status, ama hala yeni dosyalar oluşturuyor debian-transmission:debian-transmission.
mpen

Aslında bunun önemli olduğunu düşünmüyorum. Gruba benim kullanıcıyı ekledi debian-transmissionyerine ve değiştirilen settings.json/ umasketmek 2demek ben bir aksamadan etrafında dosya taşıyabilirsiniz.
mpen

6

Bu tam bir hikaye değil. Değişmek dışında

setgid <groupname>

ve

setuid <username>

içinde

/etc/init/transmission-daemon.conf

Ayrıca transmission-daemon dosyasının yapılandırma dosyasının izinlerini de değiştirmeniz gerekir. Aksi takdirde, ayarları bu dosyaya yeniden yazamaz ve sonradan başlatma yeterli şansı olduğunu düşünene kadar arka plan programı yeniden başlatılır (init: iletim-daemon çok hızlı yeniden doğma, durdu)

sudo chown <user>:<group> /etc/transmission-daemon/settings.json
sudo chown -R <user>:<group> /var/lib/transmission-daemon/ 

Kullanıcısının izinlerini değiştirme konusunda biraz teşekkür ederiz settings.json. Bunu kaçırdım.
nighthawk454

2

Systemd kullanan sistemlerde, düzenlemek istediğiniz dosya aslında şunlar olabilir:

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

Düzenleme takibi:

sudo systemctl daemon-reload


Bu bana yardımcı oldu. Diğer tüm adımları yaptım ama işe yaramadı. Teşekkür ederim!
Martijn Smidt

2

Ubuntu 16.04'te, başlangıç ​​hizmeti sistem başlangıcından sistemd'e değiştirildi ve önceki yanıtların eskimiş olması gerekiyordu. Kullanıcı iletim-arka plan programı çalıştırır yürütmek için yürütmek:

Arka plan programı durdur:

sudo service transmission-daemon stop

Yapılandırma dosyalarının ve "home" öğesinin sahipliğini değiştirin:

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

Ardından dosyayı şu /lib/systemd/system/transmission-daemon.serviceşekilde düzenleyin :

[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

Lütfen User, --config-dirve --log-debugdeğişikliklere dikkat edin .

Systemd yapılandırmasını yeniden yükle:

sudo systemctl daemon-reload

Arka plan programını tekrar başlatın:

sudo service transmission-daemon start

Eğer ayarladıktan sonra --log-debug(size bir konunun daha ayrıntılı bilgi verecektir) seçeneğini size Cinin günlüğünü alabilirsiniz:

sudo journalctl -u transmission-daemon.service

Bitti.

Dikkat edilmesi gerekenler:

Dosyaları yok sayabilirsiniz:

/etc/default/transmission-daemon: Görünüşe göre kimse bunu sistemd sistemlerinde kullanmıyor.

/etc/init.d/transmission-daemon: Bu eski sistem 5 başlangıç ​​komut dosyası gibi görünüyor.

/etc/init/transmission-daemon.conf: Görünüşe göre bu eski bir start-up start betiği.


2
/lib/systemd/system/transmission-daemon.serviceManuel olarak düzenlemeyin . systemctl edit transmission-daemon.serviceBunun yerine kullanın , aksi takdirde paketi yükselttiğinizde değişiklikleriniz kaybolacaktır.
muru

0

Aşağıdakileri yaptım, ki bu bana diğer cevaplardan daha az invaziv geliyor.

  1. İletim-arka plan programının başlatılmasını kaldırma:

    sudo update-rc.d -f transmission-daemon remove
    
  2. Aşağıdakileri şuraya ekleyin /etc/profile:

    if [ -f "$HOME/.autostart" ]; then
      $HOME/.autostart
    fi
    
  3. Oluşturun ~/.autostart:

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

Bu biraz daha taşınabilir, benim için düz Debian ve minibian üzerinde çalışıyor.


kötü bir fikir değil ama kullanıcının yürüten bir kabuk ile oturum /etc/profile
açmasını gerektirir (
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.