如何更改用户传输运行下?

Bvd*_*ijl 12 upstart services 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
Run Code Online (Sandbox Code Playgroud)

小智 16

由于所有其他答案都针对 Ubuntu pre-systemd,这里是 Ubuntu 16.04 的更新指南(来自 sensecodons.com)。本质上,为“transmission-daemon.service”创建一个补充单元来更改User=...设置,然后更新该用户的“~/.config/transmission-daemon/settings.json”文件。

停止传输(如果它已经在运行)。

sudo systemctl stop transmission-daemon
Run Code Online (Sandbox Code Playgroud)

创建传输的补充文件目录:

sudo mkdir -p /etc/systemd/system/transmission-daemon.service.d
Run Code Online (Sandbox Code Playgroud)

创建一个名为“run-as-user.conf”的新补充文件。

sudo vi /etc/systemd/system/transmission-daemon.service.d/run-as-user.conf
Run Code Online (Sandbox Code Playgroud)

并将以下文字放入其中。

[Service]
User=codon
Run Code Online (Sandbox Code Playgroud)

显然,使用您想要的用户名而不是“密码子”。

告诉 systemd 重新加载它的单元。

sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

接下来,您需要启动然后停止传输以使其~/.config/transmission-daemon/为您的新用户创建目录。

开始传输,然后停止传输。

sudo systemctl start transmission-daemon; sudo systemctl stop transmission-daemon
Run Code Online (Sandbox Code Playgroud)

您现在应该在用户的主目录中有以下目录: .config/transmission-daemon/

从这里,您应该可以~/.config/transmission-daemon/settings.json正常更新。

完成后,开始传输。

sudo systemctl start transmission-daemon
Run Code Online (Sandbox Code Playgroud)

  • 不要手动创建该目录和文件,而是使用`systemctl edit transmission-daemon.service`,它会自动 1. 创建该目录和文件,以及 2. 当你保存并退出时,运行 `systemctl daemon-reload`。 (3认同)

moo*_*moo 10

假设:

  • 您使用了此 PPA: ppa:transmissionbt/ppa
  • 您想使用用户:some_user和组运行传输:some_group

对于 System V (SysV) 初始化系统(例如:Ubuntu 10.04 LTS):

  1. 停止传输守护进程:

    sudo service transmission-daemon stop
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编辑 init.d 脚本

    sudo nano /etc/init.d/transmission-daemon
    
    Run Code Online (Sandbox Code Playgroud)

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

对于 Upstart init 系统(例如:Ubuntu 14.04 LTS):

  1. 停止传输守护进程:

    sudo service transmission-daemon stop
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编辑初始化脚本:

    sudo nano /etc/init/transmission-daemon.conf
    
    Run Code Online (Sandbox Code Playgroud)

    ...并编辑如下:

    • 更改setuid debian-transmissionsetuid some_user

    • 并更改setgid debian-transmissionsetgid some_group

对于 systemd 初始化系统(例如:Ubuntu 16.04 LTS):

  1. 停止传输守护进程:

    sudo systemctl stop transmission-daemon.service
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建 systemd override.conf 文件:

    sudo systemctl edit transmission-daemon.service
    
    Run Code Online (Sandbox Code Playgroud)

    ...并编辑如下:

    [Service]
    User=
    User=some_user
    Group=
    Group=some_group
    
    Run Code Online (Sandbox Code Playgroud)

    笔记:

    • 这将创建以下文件: /etc/systemd/system/transmission-daemon.service.d/override.conf

    • 空变量赋值(例如:)User=用于清除/重置现有变量中的值。这似乎是使用 systemd 单元文件的直接替换时的处理方式。请参阅:systemd.unit 手册中的“示例 2. 覆盖供应商设置” :

      “...对于插入文件,如果想要从解析为列表(而不是依赖项)的设置中删除条目,...需要先清除列表,然后再重新添加所有条目,除了那个要被移除的……”

  3. Systemd 重新加载并启动传输守护进程:

    sudo systemctl daemon-reload
    sudo systemctl start transmission-daemon.service
    
    Run Code Online (Sandbox Code Playgroud)

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

注释和参考


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

注意:以下内容可能仅与 Upstart 和 SysV init 系统相关

更改传输配置文件的权限

如果你不使用systemd初始化系统现在可能需要改变从变速箱的配置文件的访问权限user=debian-transmissionuser=some_usergroup=debian-transmissiongroup=some_group

  1. 检查传输配置目录的位置。您可以在/etc/default/transmission-daemon文件中找到它作为如下一行提到的:

    CONFIG_DIR="/var/lib/transmission-daemon/info"
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更改其他文件的所有权:

    sudo chown :some_group /etc/transmission-daemon
    sudo chown some_user:some_group /etc/transmission-daemon/settings.json
    
    Run Code Online (Sandbox Code Playgroud)

额外信息(更新传输):

因为您更改了默认用户,您可能会发现在使用存储库更新传输后(例如: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)
Run Code Online (Sandbox Code Playgroud)

守护进程无法启动的原因(“invoke-rc.d: initscript transmission-daemon, action “start” failed.”)是因为我们将权限从“debian-transmission”更改为“some_user”,并且在更新后这些权限被重置. 所以要修复只需执行以下操作:

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

    sudo service transmission-daemon stop
    sudo nano /etc/init.d/transmission-daemon
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 通过运行重新尝试修复更新:

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


小智 6

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

setgid <groupname>
Run Code Online (Sandbox Code Playgroud)

setuid <username>
Run Code Online (Sandbox Code Playgroud)

/etc/init/transmission-daemon.conf
Run Code Online (Sandbox Code Playgroud)

您还需要更改传输守护程序的配置文件的权限。否则它将无法重写此文件的设置并且守护进程将重新启动,直到暴发户认为它有足够的机会(初始化:传输守护进程重新生成太快,已停止)

sudo chown <user>:<group> /etc/transmission-daemon/settings.json
sudo chown -R <user>:<group> /var/lib/transmission-daemon/ 
Run Code Online (Sandbox Code Playgroud)


Rin*_*ind 4

从 upstart v1.4 开始,setuid配置setgid文件中原生支持:

setgid <groupname>
Run Code Online (Sandbox Code Playgroud)

setuid <username>
Run Code Online (Sandbox Code Playgroud)

在 v1.4 之前,您可以使用它(如下所述):

exec start-stop-daemon --start -c {user} --exec {command}
Run Code Online (Sandbox Code Playgroud)

  • 我必须编辑 /etc/init/transmission-daemon.conf (3认同)