พุ่งพรวด: เรียกใช้บริการในฐานะผู้ใช้ที่ไม่ได้รับสิทธิพิเศษและสคริปต์ก่อนเริ่มต้นเป็น root


8

ฉันได้ติดตามงานที่พุ่งพรวด:

description "posty api"


start on mysql
stop on shutdown

env RACK_ENV=production

setuid vmail
setgid vmail

chdir /opt/posty_api

pre-start script
    mkdir -p /var/run/posty
    chown -R vmail:root /var/run/posty
end script

exec /usr/local/bin/unicorn -D -c /opt/posty_api/unicorn.rb --env production >> /var/log/posty/upstart.log 2>&1

post-stop exec kill `cat /var/run/posty/unicorn.pid`

respawn
respawn limit 1 10

เพื่อสร้างโฟลเดอร์ใน/var/runฉันต้องการสิทธิ์รูท ฉันจะรันบางส่วนของงานพุ่งพรวดในฐานะรูทได้อย่างไรและให้บริการในฐานะผู้ใช้ที่ไม่มีสิทธิ์

คำตอบ:


9

upstartไม่เคยมีใครเทียบเท่าสิ่งอำนวยความสะดวกsystemdของPermissionsStartOnlyการตั้งค่า กระบวนการทั้งหมดในงานที่ทำงานเป็นชุดที่ใช้ผ่านบทเป็นตำรากล่าวว่าsetuid

ทำในสิ่งที่ daemontools ทำ

การใช้งานsetuidgid, setuidgid, s6-setuidgid, chpst, runuidหรือsetuidgidในexecบท:

ผู้บริหาร \
บางคน \ setuidgid
unicorn -D -c /opt/posty_api/unicorn.rb --env production >> /var/log/posty/upstart.log 2> & 1

นั่นเป็นกลไกการบันทึกที่แย่มาก วิธี daemontools จะมีเหมาะสมกรณืโดยอัตโนมัติ rotateable-on-demand ขนาดปกคลุมเข้าสู่ระบบโดยใช้multilog, multilog, s6-log, svlogd, หรือ tinylog เป็นเรื่องยุ่งยากที่จะทำงานร่วมกับเหล่านั้น แต่ได้รับของกลไกcyclogupstartexpect

คาดหวังส้อม
ผู้บริหาร \
บางคน \ setuidgid
ยูนิคอร์น -D -c /opt/posty_api/unicorn.rb --env Production 2> & 1 | \
/ usr / local / bin / chdir / var / log / \
setuidgid บันทึก \
cyclog posty / unicorn /

( chdirนี่คือห่วงโซ่โหลดหนึ่งจากnoshแพคเกจและไม่จำเป็นอย่างเคร่งครัด แต่มันทำให้สิ่งที่ค่อนข้างเป็นระเบียบ)


ขอบคุณสำหรับคำอธิบายและคำแนะนำสำหรับการเข้าสู่ระบบ ฉันสร้างแล้วสอง upstartjobs start on starting postyการเตรียมความพร้อมการอ้างอิงงานที่มี แต่การบันทึกเป็นวิธีที่ดีกว่าของฉัน
Christian

0

คุณสามารถใช้ setguid ในบล็อกสคริปต์และจะมีผลกับบล็อกที่กำหนดเท่านั้น บางสิ่งเช่นนี้

# Ubuntu upstart file at /etc/init/kafka.conf
description "kafka broker"

limit nofile 32768 32768

start on runlevel [2345]
stop on [!2345]

respawn
respawn limit 2 5

umask 007

kill timeout 300

pre-start script
    # here you are root
    ls -alh /root/
end script

chdir /usr/local/lib/kafka

script
    setuid kafka
    setgid kafka
    # here you are user/group kafka
    /usr/local/lib/kafka/bin/kafka-server-start.sh /usr/local/lib/kafka/config/server.properties
end script

สิ่งนี้ไม่ได้ผลสำหรับฉัน ส่วนของสคริปต์ไม่ทำงาน
Weekens

1
ซึ่งส่งผลให้เกิดsetuid: not foundข้อผิดพลาด
RovingBlade
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.