Как изменить пользователя, под которым запускается Transmission?

10

Я установил Transmission через PPA, и демон запускается при загрузке. Я хочу изменить пользователя, который запускает демон, потому что я хочу, чтобы загруженные файлы были под тем же пользователем, что и моя установка XBMC, и я не могу найти, где это редактировать.

Демон использует upstart, поэтому нет ничего о том, в каких пользователях он запускается, и в /etc/init.d/transmission-daemonэтом нет ничего и /etc/default/transmission-daemonо пользователе.

Я использую эти PPA для передачи:

/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
источник
Можете ли вы предоставить PPA и версию Ubuntu? Куда бы я ни посмотрел, у пакета Transmission-Daemon есть файл /etc/init.d/transmission-daemon.
устроить
Извините, если мне неясно, я имел в виду, что нет ничего о том, какой пользователь запускает демон в этом файле
BvdBijl
В начале файла /etc/init.d/transmission-daemon вы должны увидеть строку «USER = debian-transmission»; так и должно быть.
устроить
Моя выглядит так: gist.github.com/boukevanderbijl/04c7d6a322a08e9629cb
BvdBijl
Я добавил, какие PPA я использую в стартовом посте
BvdBijl

Ответы:

4

Начиная с версии upstart v1.4 setuidи setgidподдерживаются в конфигурационном файле:

setgid <groupname>

а также

setuid <username>

До версии 1.4 вы можете использовать это ( как описано здесь ):

exec start-stop-daemon --start -c {user} --exec {command}
Rinzwind
источник
2
Я должен отредактировать /etc/init/transmission-daemon.conf
BvdBijl
1
Я также должен был sudo chown -R user: group / var / lib / translation
Филипп Гачу
15

Поскольку все остальные ответы относятся к Ubuntu pre-systemd, вот обновленное руководство по Ubuntu 16.04 ( по адресу sensecodons.com). ). По сути, создайте дополнительный модуль для "translation-daemon.service", чтобы изменить User=...настройку, а затем обновите файл этого пользователя "~ / .config / transmission-daemon / settings.json".

Остановите передачу (если она уже запущена).

sudo systemctl stop transmission-daemon

Создайте каталог файлов дополнений для передачи:

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

Создайте новый файл дополнения с именем «run-as-user.conf».

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

и поместите в него следующий текст.

[Service]
User=codon

Очевидно, используйте желаемое имя пользователя, а не «кодон».

Скажите systemd перезагрузить свои устройства.

sudo systemctl daemon-reload

Затем вы захотите запустить, а затем остановить передачу, чтобы создать ~/.config/transmission-daemon/ каталог для вашего нового пользователя.

Начните передачу, а затем остановите передачу.

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

Теперь у вас должен быть следующий каталог в домашнем каталоге вашего пользователя: .config/transmission-daemon/

Отсюда вы сможете обновить ~/.config/transmission-daemon/settings.json нормально .

Когда вы закончите, начните передачу.

sudo systemctl start transmission-daemon
Дуглас Мэнли
источник
3
Вместо того, чтобы вручную создавать этот каталог и файл, используйте systemctl edit transmission-daemon.service, который автоматически 1. создаст этот каталог и файл и 2. при сохранении и выходе также запустится systemctl daemon-reload.
Муру
7

Предположения:

  • Вы использовали этот PPA: ppa:transmissionbt/ppa
  • Вы хотите запустить Transmission с пользователем: some_userи группой:some_group

Для системы инициализации System V (SysV) (например: Ubuntu 10.04 LTS):

  1. Остановите демон передачи:

    sudo service transmission-daemon stop
    
  2. Отредактируйте сценарии init.d

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

    ... и изменить USER=debian-transmissionнаUSER=some_user

Для системы инициализации Upstart (например: Ubuntu 14.04 LTS):

  1. Остановите демон передачи:

    sudo service transmission-daemon stop
    
  2. Отредактируйте сценарии инициализации:

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

    ... и отредактируйте следующим образом:

    • изменить setuid debian-transmissionнаsetuid some_user

    • и изменить setgid debian-transmissionнаsetgid some_group

Для systemd init system (например: Ubuntu 16.04 LTS):

  1. Остановите демон передачи:

    sudo systemctl stop transmission-daemon.service
    
  2. Создайте файл systemd override.conf:

    sudo systemctl edit transmission-daemon.service
    

    ... и отредактируйте следующим образом:

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

    Ноты:

    • Это создает следующий файл: /etc/systemd/system/transmission-daemon.service.d/override.conf

    • Пустые назначения переменных (например User=:) используются для очистки / сброса значения в существующей переменной. Похоже, именно так все и делается при использовании замены модуля systemd. Смотрите: «Пример 2. Переопределение настроек вендора» в руководстве systemd.unit :

      «... для вставных файлов, если кто-то хочет удалить записи из параметра, который анализируется как список (и не является зависимостью), ... необходимо сначала очистить список перед повторным добавлением всех записей, кроме тот, который должен быть удален ... "

  3. Системная перезагрузка и запуск демона передачи:

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

    Примечание: В отличие от Upstart и SysV инициализации системы передачи-демон сохраняет все настройки и настройки /home/some_user/.config/transmission-daemon/вместо /etc/transmission-daemon/settings.jsonи/var/lib/transmission-daemon

Примечания и ссылки


Необязательная / дополнительная информация о разрешениях и обновлениях пакетов:

Примечание: следующее, вероятно, относится только к системам инициализации Upstart и SysV

Изменение разрешений для файлов конфигурации Transmission

Если вы не используете systemd init system, вам может потребоваться изменить разрешения для файлов конфигурации Transmission с user=debian-transmissionна user=some_userи с group=debian-transmissionна group=some_group.

  1. Проверьте расположение вашего каталога конфигурации передачи. Вы можете найти это упомянутое в /etc/default/transmission-daemonфайле в виде строки так:

    CONFIG_DIR="/var/lib/transmission-daemon/info"
    
  2. Таким образом, предполагая, что ваш каталог конфигурации - это /var/lib/transmission-daemon/info, измените владельца файлов конфигурации:

    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. Смена владельца других файлов:

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

Дополнительная информация (обновление передачи):

Поскольку вы изменили пользователя по умолчанию, вы можете обнаружить, что после обновления Transmission с использованием репозитория (например, apt-get upgrade) демон передачи больше не работает.

Запуск «sudo apt-get -f install» приводит к следующей ошибке:

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)

Причина, по которой демон не запускается ("invoke-rc.d: initscript translation-daemon, действие" start "fail.") В том, что мы изменили разрешения с "debian-translation" на "some_user" и после обновления они получили сброс , Для исправления просто сделайте следующее:

  1. Остановите демон и отредактируйте файл конфигурации:

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

    ... и изменить USER=some_userнаUSER=debian-transmission

  2. Еще раз попробуйте исправить обновление, запустив:

    sudo apt-get -f install
    
  3. Если обновление прошло успешно, теперь должен работать демон Transmission. Теперь вы можете выполнить действия, описанные выше, чтобы снова изменить пользователя / группу.

мычание
источник
6

Это не полная история. Помимо изменения

setgid <groupname>

а также

setuid <username>

в

/etc/init/transmission-daemon.conf

вам также нужно изменить права доступа к файлу конфигурации демона передачи. В противном случае он не сможет перезаписать настройки в этот файл, и демон будет перезапущен до тех пор, пока upstart не решит, что у него достаточно шансов (init: передача-демон восстанавливается слишком быстро, остановлен)

sudo chown <user>:<group> /etc/transmission-daemon/settings.json
sudo chown -R <user>:<group> /var/lib/transmission-daemon/ 
mrClass
источник
Спасибо за немного об изменении разрешений settings.json. Пропустил это.
nighthawk454
2

В системах, использующих systemd, файл, который вы хотите отредактировать, на самом деле может быть:

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

Продолжайте редактирование с помощью:

sudo systemctl daemon-reload

Epskampie
источник
Это то, что помогло мне. Я сделал все остальные шаги, но не работал. Спасибо!
Мартейн Смидт
2

В Ubuntu 16.04 служба запуска была изменена с upstart на systemd, что делает необходимость предыдущих ответов устаревшей. Чтобы изменить пользовательские запуски-передачи, выполните:

Стоп демон:

sudo service transmission-daemon stop

Смена владельца конфигурационных файлов и «home»:

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

Затем отредактируйте файл /lib/systemd/system/transmission-daemon.serviceс помощью:

[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

Пожалуйста, обратите внимание User, --config-dirи --log-debugизменения.

Перезагрузите конфигурацию systemd:

sudo systemctl daemon-reload

Запустите демон снова:

sudo service transmission-daemon start

После того, как вы установили --log-debugопцию (которая даст вам больше информации о любой проблеме), вы можете получить журнал демона:

sudo journalctl -u transmission-daemon.service

Выполнено.

Что следует отметить:

Вы можете игнорировать файлы:

/etc/default/transmission-daemonПохоже, никто не использует его в системных системах.

/etc/init.d/transmission-daemonПохоже, это был старый стартовый скрипт системы 5.

/etc/init/transmission-daemon.confКажется, это старый стартовый скрипт выскочки.

Каролина Агилар
источник
2
Не редактируйте /lib/systemd/system/transmission-daemon.serviceвручную. Используйте systemctl edit transmission-daemon.serviceвместо этого, иначе ваши изменения будут потеряны при обновлении пакета.
Муру
0

Я сделал следующее, что мне кажется менее агрессивным, чем другие ответы.

  1. Удалите запуск демона передачи:

    sudo update-rc.d -f transmission-daemon remove
    
  2. Добавьте следующее к /etc/profile:

    if [ -f "$HOME/.autostart" ]; then
      $HOME/.autostart
    fi
    
  3. Создать ~/.autostart:

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

Это, пожалуй, более переносимо, у меня это работает и на обычном Debian, и на минибайне.

nicholas.alipaz
источник
неплохая идея, но она требует, чтобы пользователь входил в систему с исполняемой оболочкой /etc/profile(например, zsh не выполняет ее)
elboletaire