ฉันจะเปลี่ยนผู้ใช้ได้อย่างไร


10

ฉันติดตั้งการส่งข้อมูลผ่าน PPA และ daemon เริ่มทำงานเมื่อบูต ฉันต้องการเปลี่ยนผู้ใช้ที่รัน daemon เพราะฉันต้องการให้ไฟล์ที่ดาวน์โหลดนั้นอยู่ภายใต้ผู้ใช้เดียวกันกับการติดตั้ง XBMC ของฉันและดูเหมือนว่าฉันไม่สามารถหาตำแหน่งที่จะแก้ไขได้

daemon ใช้การพุ่งพรวดดังนั้นจึงไม่มีอะไรเกี่ยวข้องกับผู้ใช้ที่ทำงานอยู่/etc/init.d/transmission-daemonและไม่มีอะไร/etc/default/transmission-daemonเกี่ยวข้องกับผู้ใช้

ฉันใช้ PPAS เหล่านี้ในการส่ง:

/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

คุณช่วยระบุ PPA และเวอร์ชั่นของ Ubuntu ได้ไหม? ทุกที่ที่ฉันดูแพคเกจ transmission-daemon จะมีไฟล์ /etc/init.d/transmission-daemon
จัด

ขออภัยถ้าฉันยังไม่ชัดเจนฉันหมายความว่าไม่มีอะไรเกี่ยวกับผู้ใช้ที่เรียกใช้ daemon ในไฟล์นั้น
BvdBijl

ในตอนเริ่มต้นของไฟล์ /etc/init.d/transmission-daemon คุณควรเห็นบรรทัด "USER = debian-transmission"; ที่ควรจะเป็น
จัดการ

Mine มีลักษณะเช่นนี้: gist.github.com/boukevanderbijl/04c7d6a322a08e9629cb
BvdBijl

ฉันเพิ่ม PPAs ใดที่ฉันใช้ในโพสต์เริ่มต้น
BvdBijl

คำตอบ:


4

ในฐานะของ upstart v1.4 setuidและsetgidได้รับการสนับสนุนในไฟล์ config:

setgid <groupname>

และ

setuid <username>

ก่อน v1.4 คุณสามารถใช้สิ่งนี้ ( ตามที่อธิบายไว้ที่นี่ ):

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

2
ฉันต้องแก้ไข /etc/init/transmission-daemon.conf
BvdBijl

1
ฉันยังต้อง sudo chown -R ผู้ใช้: กลุ่ม / var / lib / transmission-daemon / อย่างที่ถามaskubuntu.com/questions/290943/ …
Philippe Gachoud

15

เนื่องจากคำตอบอื่น ๆ ทั้งหมดนั้นมีไว้สำหรับ 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

3
แทนที่จะสร้างไดเรกทอรีและไฟล์นั้นด้วยตนเองให้ใช้systemctl edit transmission-daemon.serviceซึ่งจะสร้าง 1. สร้างไดเรกทอรีและไฟล์นั้นโดยอัตโนมัติและ 2. เมื่อคุณบันทึกและออกให้รันsystemctl daemon-reloadเช่นกัน
muru

7

สมมติฐาน:

  • คุณใช้ PPA นี้: ppa:transmissionbt/ppa
  • คุณต้องการเรียกใช้การส่งด้วยผู้ใช้: some_userและกลุ่ม:some_group

สำหรับระบบเริ่มต้น System V (SysV) (เช่น: Ubuntu 10.04 LTS):

  1. หยุด Daemon การส่งผ่าน:

    sudo service transmission-daemon stop
    
  2. แก้ไขสคริปต์ init.d

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

    ... และเปลี่ยนUSER=debian-transmissionเป็นUSER=some_user

สำหรับระบบเริ่มต้นพุ่งพรวด (เช่น: Ubuntu 14.04 LTS):

  1. หยุด Daemon การส่งผ่าน:

    sudo service transmission-daemon stop
    
  2. แก้ไขสคริปต์ init:

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

    ... และแก้ไขดังนี้:

    • เปลี่ยนsetuid debian-transmissionเป็นsetuid some_user

    • และเปลี่ยนsetgid debian-transmissionเป็นsetgid some_group

สำหรับระบบ systemd init (เช่น: Ubuntu 16.04 LTS):

  1. หยุด Daemon การส่งผ่าน:

    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 unit ดู: "ตัวอย่างที่ 2 การเอาชนะการตั้งค่าผู้ขาย" ในคู่มือ systemd.unit :

      "... สำหรับไฟล์ดรอปดาวน์หากต้องการลบรายการออกจากการตั้งค่าที่แยกวิเคราะห์เป็นรายการ (และไม่ใช่การขึ้นต่อกัน) ... หนึ่งต้องล้างรายการก่อนก่อนที่จะเพิ่มรายการทั้งหมดอีกครั้งยกเว้น อันที่จะถูกลบ ... "

  3. Systemd โหลดซ้ำและเริ่ม daemon การส่งข้อมูล:

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

    หมายเหตุ: ซึ่งแตกต่างจาก Upstart และ SysV init systems transmission-daemon บันทึกการกำหนดค่าและการตั้งค่าทั้งหมด/home/some_user/.config/transmission-daemon/แทน/etc/transmission-daemon/settings.jsonและ/var/lib/transmission-daemon

หมายเหตุ & การอ้างอิง


ข้อมูลเพิ่มเติม / ข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์และการอัพเดทแพ็คเกจ:

หมายเหตุ: สิ่งต่อไปนี้มีความเกี่ยวข้องเฉพาะกับระบบเริ่มต้นระบบพุ่งพรวดและ SysV เท่านั้น

การเปลี่ยนการอนุญาตในไฟล์การกำหนดค่าของ Transmission

ถ้าคุณไม่ได้ใช้ระบบ init systemd ตอนนี้คุณอาจต้องเปลี่ยนสิทธิ์สำหรับไฟล์การกำหนดค่าการส่งผ่านจากuser=debian-transmissionไปuser=some_userและกลับจากไปgroup=debian-transmissiongroup=some_group

  1. ตรวจสอบตำแหน่งของ Directory Configuration Directory ของคุณ คุณสามารถค้นหามันกล่าวถึงใน/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
    

ข้อมูลพิเศษ (อัพเดทการส่ง):

เนื่องจากคุณเปลี่ยนผู้ใช้เริ่มต้นคุณอาจพบว่าหลังจากอัปเดตการส่งโดยใช้ที่เก็บ (เช่น: การอัพเกรด apt-get) การส่งดีมอนจึงไม่ทำงานอีกต่อไป

การรัน "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)

สาเหตุที่ daemon ล้มเหลวในการเริ่มต้น ("invoke-rc.d: initscript transmission-daemon, การกระทำ" เริ่มต้น "ล้มเหลว") เป็นเพราะเราเปลี่ยนสิทธิ์จาก "debian-transmission" เป็น "some_user" และหลังจากอัปเดตสิ่งเหล่านี้ได้รีเซ็ต . ดังนั้นในการแก้ไขให้ทำดังต่อไปนี้:

  1. หยุด Daemon และแก้ไขไฟล์ config:

    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 daemon ควรรันในขณะนี้ ตอนนี้คุณสามารถทำตามขั้นตอนด้านบนเพื่อเปลี่ยนผู้ใช้ / กลุ่มอีกครั้ง


6

นี่ไม่ใช่เรื่องราวที่สมบูรณ์ นอกเหนือจากการเปลี่ยนแปลง

setgid <groupname>

และ

setuid <username>

ใน

/etc/init/transmission-daemon.conf

คุณต้องเปลี่ยนการอนุญาตของไฟล์ปรับแต่งของ transmission-daemon มิฉะนั้นจะไม่สามารถเขียนการตั้งค่าไฟล์นี้อีกครั้งและ daemon จะรีสตาร์ทจนกว่าคนธรรมดาคิดว่ามันมีโอกาสเพียงพอ (init: transmission-daemon ตอบสนองเร็วเกินไปหยุด)

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

settings.jsonขอบคุณสำหรับบิตเกี่ยวกับการเปลี่ยนสิทธิ์ของ คิดถึงว่า
nighthawk454

2

บนระบบที่ใช้ systemd ไฟล์ที่คุณต้องการแก้ไขอาจเป็น:

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

ติดตามการแก้ไขด้วย:

sudo systemctl daemon-reload


นี่คือสิ่งที่ช่วยฉัน ฉันทำตามขั้นตอนอื่นทั้งหมดแล้ว แต่ไม่ทำงาน ขอบคุณ!
Martijn Smidt

2

ใน Ubuntu 16.04 บริการเริ่มต้นถูกเปลี่ยนจาก upstart เป็น systemd ทำให้คำตอบก่อนหน้านี้ล้าสมัย หากต้องการเปลี่ยน user transmission-daemon ให้รัน execute:

หยุดภูต:

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(ซึ่งจะให้ข้อมูลเพิ่มเติมเกี่ยวกับปัญหาใด ๆ ) ตัวเลือกคุณสามารถรับบันทึกของ daemon:

sudo journalctl -u transmission-daemon.service

เสร็จสิ้น

สิ่งที่ควรทราบ:

คุณสามารถละเว้นไฟล์:

/etc/default/transmission-daemon: ดูเหมือนว่าไม่มีใครจัดหาในระบบ systemd

/etc/init.d/transmission-daemon: ดูเหมือนว่านี่เป็นสคริปต์เริ่มต้นระบบ 5 เก่า

/etc/init/transmission-daemon.conf: ดูเหมือนว่านี่เป็นสคริปต์เริ่มต้นที่ธรรมดามาก


2
อย่าแก้ไข/lib/systemd/system/transmission-daemon.serviceด้วยตนเอง ใช้systemctl edit transmission-daemon.serviceแทนหรือการเปลี่ยนแปลงของคุณจะหายไปเมื่อคุณอัพเกรดแพ็คเกจ
muru

0

ฉันทำสิ่งต่อไปนี้ซึ่งสำหรับฉันดูเหมือนว่าจะรุกรานน้อยกว่าคำตอบอื่น ๆ

  1. ลบการเริ่มต้นของ transmission-daemon:

    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 และรถมินิบัสด้วยเหมือนกัน


ไม่ใช่ความคิดที่ไม่ดี แต่ต้องการให้ผู้ใช้ลงชื่อเข้าใช้ด้วยเชลล์ที่ดำเนินการ/etc/profile(เช่น zsh ไม่ได้ดำเนินการ)
elboletaire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.