我如何更改 Transmission 运行的用户?

我如何更改 Transmission 运行的用户?

我通过 PPA 安装了 Transmission,守护进程在启动时启动。我想更改运行守护进程的用户,因为我希望下载的文件与我的 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

答案1

由于所有其他答案都是针对 Ubuntu pre-systemd 的,这里是针对 Ubuntu 16.04 的更新指南(来自 sensecodons.com)。本质上,为“transmission-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

显然,使用您想要的用户名而不是“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

答案2

假设:

  • 您使用了这个 PPA:ppa:transmissionbt/ppa
  • 您想使用用户:some_user和组:运行 Transmissionsome_group

对于 System V (SysV) init 系统(例如:Ubuntu 10.04 LTS):

  1. 停止传输守护进程:

    sudo service transmission-daemon stop
    
  2. 编辑 init.d 脚本

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

    ...并更改USER=debian-transmissionUSER=some_user

对于 Upstart 初始化系统(例如:Ubuntu 14.04 LTS):

  1. 停止传输守护进程:

    sudo service transmission-daemon stop
    
  2. 编辑初始化脚本:

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

    ...并编辑如下:

    • 改成setuid debian-transmissionsetuid some_user

    • 并更改setgid debian-transmissionsetgid some_group

对于 systemd init 系统(例如: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. Systemd 重新加载并启动传输守护进程:

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

    注意:与 Upstart 和 SysV init 系统不同,transmission-daemon 将所有配置和设置保存在/home/some_user/.config/transmission-daemon/而不是/etc/transmission-daemon/settings.json/var/lib/transmission-daemon

注释和参考


关于权限和包更新的可选/附加信息:

注意:以下内容可能仅适用于 Upstart 和 SysV init 系统

更改 Transmission 配置文件的权限

如果您没有使用 systemd init 系统,那么您现在可能需要将 Transmission 配置文件的权限从user=debian-transmission更改为user=some_user并将 从 更改group=debian-transmissiongroup=some_group

  1. 检查您的 Transmission 配置目录的位置。您可以在文件中找到/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)后,Transmission 守护进程不再运行。

运行“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 transmission-daemon,操作“start”失败。”)是因为我们将权限从“debian-transmission”更改为“some_user”,更新后这些权限被重置。因此,要修复,只需执行以下操作:

  1. 停止守护进程并编辑配置文件:

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

    ...并更改USER=some_userUSER=debian-transmission

  2. 通过运行以下命令重新尝试修复更新:

    sudo apt-get -f install
    
  3. 如果更新成功,Transmission 守护进程现在应该正在运行。您现在可以按照上述步骤再次更改用户/组。

答案3

这不是完整的故事。除了改变

setgid <groupname>

setuid <username>

/etc/init/transmission-daemon.conf

您还需要更改 transmission-daemon 配置文件的权限。否则它将无法将设置重写到此文件,并且守护进程将重新启动,直到 upstart 认为它有足够的机会(init:transmission-daemon 重生太快,已停止)

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

答案4

在使用 systemd 的系统上,您要编辑的文件实际上可能是:

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

后续编辑如下:

sudo systemctl daemon-reload

相关内容