ฉันกำลังแก้ไขสคริปต์ init.d สคริปต์ init.d จะเรียกใช้สคริปต์อรรถประโยชน์ซึ่งจะเรียกใช้กระบวนการ จากสคริปต์ทุบตีฉันจะทำให้กระบวนการหลักเป็นผู้ใช้และกลุ่มได้อย่างไร
ฉันกำลังแก้ไขสคริปต์ init.d สคริปต์ init.d จะเรียกใช้สคริปต์อรรถประโยชน์ซึ่งจะเรียกใช้กระบวนการ จากสคริปต์ทุบตีฉันจะทำให้กระบวนการหลักเป็นผู้ใช้และกลุ่มได้อย่างไร
คำตอบ:
วิธีที่ง่ายที่สุดคือการใช้คำสั่ง su (1) มันมีตัวเลือกที่ให้คุณเรียกใช้คำสั่งผ่านเชลล์ของผู้ใช้ตัวอย่าง:
su foo -c ls
สิ่งนี้จะสลับไปที่ผู้ใช้fooและเรียกใช้คำสั่ง ls หากผู้ใช้ที่คุณต้องการใช้ไม่มีเชลล์ที่ถูกต้อง (เช่นไม่มีอยู่ใน / etc / shells เช่น / bin / false หรือ / sbin / nologin) คุณจะต้องระบุเชลล์บนบรรทัดคำสั่ง ตัวอย่างที่มีเอาท์พุท:
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
ถ้าฉันsu www-data
ตั้งค่า vars ทั้งหมดและทำงาน${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
ได้ดี ฉันจะแก้ปัญหานี้อย่างไร
su
รับอาร์กิวเมนต์เดี่ยวซึ่งเป็นคำสั่งเชลล์ คุณจำเป็นต้องเขียนsu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
และตรวจสอบให้แน่ใจว่าMONOSERVER
และWEBAPPS
จะถูกส่งออกโดยเปลือกแม่ (หมายเหตุ: อย่าทำsu … -c "$MONOSERVER …"
เช่นนี้จะล้มเหลวหากตัวแปรใด ๆ มีอักขระพิเศษของเชลล์) และหากคุณมีตัวเรียกใช้ daemon โดยเฉพาะเช่นstart-stop-daemon
ใช้งาน
หากstart-stop-daemon
มีอยู่ในระบบของคุณคุณอาจจะใช้มันและมีลักษณะที่ตัวเลือก (โดยเฉพาะอย่างยิ่ง-u
และ-g
ในกรณีนี้)
(มิฉะนั้นคุณอาจใช้การรวมกันของsu
และsg
.)
อัปเดต:นี่คือตัวอย่างที่นำมาจาก/etc/init.d/mpd
สคริปต์บางตัว(ซึ่งใช้start-stop-daemon
):
คำสั่งเริ่มต้น:
echo "Starting Music Player Daemon"
start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
--pidfile /var/run/mpd.pid --make-pidfile \
-- --no-daemon /etc/mpd.conf 2>/dev/null
ทุกอย่างที่ตามมา--
คืออาร์กิวเมนต์ของ/usr/bin/mpd
โปรแกรมเอง (โพรซีเดอร์ daemonization ถูกดูแลโดยสคริปต์ start-stop-daemon ดังนั้นจึงmpd
ถูกขอให้ไม่สนใจด้วย--nodaemon
)
คำสั่งหยุด:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
หากmpd
ไม่ได้รับสิทธิพิเศษในการลดลงด้วยตัวเองหนึ่งจะต้องเพิ่ม (ตัวอย่าง) -u mpd
, -g mpd
ตัวเลือกให้กับstart-stop-daemon
คำสั่ง
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid
Usage: su [options] [LOGIN]
และsu: unrecognized option '--debug'