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”文件。
停止传输(如果它已经在运行)。
Run Code Online (Sandbox Code Playgroud)sudo systemctl stop transmission-daemon创建传输的补充文件目录:
Run Code Online (Sandbox Code Playgroud)sudo mkdir -p /etc/systemd/system/transmission-daemon.service.d创建一个名为“run-as-user.conf”的新补充文件。
Run Code Online (Sandbox Code Playgroud)sudo vi /etc/systemd/system/transmission-daemon.service.d/run-as-user.conf并将以下文字放入其中。
Run Code Online (Sandbox Code Playgroud)[Service] User=codon显然,使用您想要的用户名而不是“密码子”。
告诉 systemd 重新加载它的单元。
Run Code Online (Sandbox Code Playgroud)sudo systemctl daemon-reload
接下来,您需要启动然后停止传输以使其~/.config/transmission-daemon/为您的新用户创建目录。
开始传输,然后停止传输。
Run Code Online (Sandbox Code Playgroud)sudo systemctl start transmission-daemon; sudo systemctl stop transmission-daemon您现在应该在用户的主目录中有以下目录:
.config/transmission-daemon/
从这里,您应该可以~/.config/transmission-daemon/settings.json正常更新。
完成后,开始传输。
sudo systemctl start transmission-daemon
Run Code Online (Sandbox Code Playgroud)
moo*_*moo 10
ppa:transmissionbt/ppasome_user和组运行传输:some_group停止传输守护进程:
sudo service transmission-daemon stop
Run Code Online (Sandbox Code Playgroud)编辑 init.d 脚本
sudo nano /etc/init.d/transmission-daemon
Run Code Online (Sandbox Code Playgroud)
...并更改USER=debian-transmission为USER=some_user
停止传输守护进程:
sudo service transmission-daemon stop
Run Code Online (Sandbox Code Playgroud)编辑初始化脚本:
sudo nano /etc/init/transmission-daemon.conf
Run Code Online (Sandbox Code Playgroud)
...并编辑如下:
更改setuid debian-transmission为setuid some_user
并更改setgid debian-transmission为setgid some_group
停止传输守护进程:
sudo systemctl stop transmission-daemon.service
Run Code Online (Sandbox Code Playgroud)创建 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. 覆盖供应商设置” :
“...对于插入文件,如果想要从解析为列表(而不是依赖项)的设置中删除条目,...需要先清除列表,然后再重新添加所有条目,除了那个要被移除的……”
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
/etc/default/transmission-daemon仅由 Upstart 脚本 ( /etc/init.d/transmission-daemon) 和 SysV 脚本 ( /etc/init/transmission-daemon.conf) 使用,因此如果您使用 Systemd init 系统,则可以忽略所有这些文件。
注意:以下内容可能仅与 Upstart 和 SysV init 系统相关
更改传输配置文件的权限
如果你不使用systemd初始化系统现在可能需要改变从变速箱的配置文件的访问权限user=debian-transmission来user=some_user从group=debian-transmission到group=some_group。
检查传输配置目录的位置。您可以在/etc/default/transmission-daemon文件中找到它作为如下一行提到的:
CONFIG_DIR="/var/lib/transmission-daemon/info"
Run Code Online (Sandbox Code Playgroud)因此,假设您的配置目录是/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)更改其他文件的所有权:
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”,并且在更新后这些权限被重置. 所以要修复只需执行以下操作:
停止守护进程并编辑配置文件:
sudo service transmission-daemon stop
sudo nano /etc/init.d/transmission-daemon
Run Code Online (Sandbox Code Playgroud)
...并更改USER=some_user为USER=debian-transmission
通过运行重新尝试修复更新:
sudo apt-get -f install
Run Code Online (Sandbox Code Playgroud)如果更新成功,传输守护进程现在应该正在运行。您现在可以按照上述步骤再次更改用户/组。
小智 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)
从 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)
| 归档时间: |
|
| 查看次数: |
48151 次 |
| 最近记录: |