เรียกใช้สคริปต์ในฐานะผู้ใช้ที่มีเปลือก nologin


87

ทั้งหมดที่ฉันต้องทำคือการใช้สคริปต์เฉพาะเป็นผู้ใช้โดยเฉพาะอย่างยิ่งคนที่ไม่ได้มีเปลือกที่ระบุไว้ในnologin/false/etc/passwd

ฉันจะเรียกใช้สคริปต์ในฐานะรูทและควรเรียกใช้ในฐานะผู้ใช้รายอื่น วิ่ง:

~# su -c "/bin/touch /tmp/test" testuser

จะใช้งานได้ แต่ฉันต้องการเชลล์ที่ถูกต้องสำหรับ testuser ฉันรู้ว่าฉันสามารถปิดการใช้งานรหัสผ่านด้วยpasswd -d testuserและปล่อยเปลือก/bin/bashด้วยวิธีนี้จะปลอดภัยเล็กน้อย แต่ฉันต้องมีnologin/falseเปลือก

โดยทั่วไปสิ่งที่ฉันต้องการคือสิ่งที่crontabจะเกิดขึ้นเมื่อเราตั้งค่างานให้ทำงานในฐานะผู้ใช้เฉพาะไม่ว่าจะมีงานnologin/falseเชลล์

ps ฉันพบกระทู้นี้รันคำสั่งในฐานะผู้ใช้ nologinแต่ฉันไม่รู้ว่าจะconcatenateใช้คำสั่งsu -s /bin/sh $userไปยังสคริปต์ที่ฉันต้องใช้อย่างไร

คำตอบ:


119

คุณสามารถใช้สวิตช์ -s เพื่อ su เพื่อรันเชลล์เฉพาะ

su -s /bin/bash -c '/path/to/your/script' testuser

(แสดงsudoข้างต้นหากtestuserเป็นผู้ใช้ที่ไม่มีรหัสผ่าน)


เกิดอะไรขึ้นถ้า su คือroot:root -rwsr-x---อะไร?
Patryk

1
จะทำอย่างไรถ้าผู้ใช้ไม่มีรหัสผ่าน
CMCDragonkai

3
@Wesley พบว่าคุณต้องรูทเพื่อรันคำสั่งนั้นสำหรับผู้ใช้ที่ไม่มีรหัสผ่าน
CMCDragonkai

1
@lain หากผู้ใช้ไม่ควรมีเชลล์กระบวนการที่เกี่ยวข้องกับคำสั่งไม่ควรเป็นลูกของกระบวนการทุบตี ดังนั้นคุณควรใช้ exec เพื่อแทนที่เชลล์ด้วยสคริปต์ และหากคุณต้องการทำให้สคริปต์เป็นลูกของ init คุณเพียงแค่ใช้ & เป็นตัวอย่างsu -s /bin/bash -c 'exec /path/to/your/script &' test
Facundo Victor

1
เนื่องจากฉันใช้เวลา 20 นาทีในการหาวิธีการใช้ผลลัพธ์เดียวกันrunuserฉันจึงขอชี้ให้เห็นว่าsu -s SHELLพารามิเตอร์ที่ทำให้คำสั่ง runuser นั้นไร้ประโยชน์มาก :) ขอบคุณ Jan!
jirka

12

คุณสามารถทำได้sudo -uหากติดตั้งไว้:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

คุณจะส่งพารามิเตอร์ไปยังได้sudo -u apache whoamiอย่างไร
CMCDragonkai

@CMCDragonkai พารามิเตอร์ใด ๆ หลังจากคำสั่งจะถูกส่งผ่านไป คุณสามารถคิดได้เช่น "sudo [-u apache] [whoami <param1> <param2>]"
Handyman5

ฉันคิดว่าการใช้sudo -uอาจไม่ใช่ความคิดที่ดีสำหรับการเรียกใช้คำสั่งในฐานะผู้ใช้งาน nologin เพราะมันแสดงให้เห็นSUDO_USERในสภาพแวดล้อมที่เป็นของจริงที่เรียกใช้คำสั่ง บางทีฉันอาจจะคิดมาก
Meow

5

โดยการระบุสคริปต์เป็นอาร์กิวเมนต์เพื่อเรียกใช้งานกับ / bin / sh:

su -s "/bin/sh /your/script/location" username


0

จริงๆแล้ววิธีที่ดีที่สุดในการทำเช่นนี้คือผ่านrunuser

ดู man page สำหรับรายละเอียด

เครื่องมือนี้ใช้เพื่อจัดการกับสถานการณ์ดังที่ผู้พัฒนาได้กล่าวไว้ใน bolg ของเขา

เมื่อใดก็ตามที่เซอร์วิสกำลังทำงานเป็น root และต้องการเปลี่ยน UID โดยใช้เชลล์ควรใช้ runuser

http://danwalsh.livejournal.com/55588.html

ฉันโพสต์คำตอบนี้ในหลาย ๆ วังให้อภัยฉันถ้าคุณพบว่ามันน่ารำคาญ


โปรดอย่าโพสต์คำตอบสำหรับลิงค์เท่านั้นเพื่อป้องกันไม่ให้ลิงค์เน่า ให้เพิ่มข้อมูลที่เกี่ยวข้องที่สุดจากลิงก์ไปยังคำตอบของคุณหรือโพสต์ลิงก์เป็นความคิดเห็นแทนคำตอบ ดูบทความserverfault.com/help/how-to-answerศูนย์ช่วยเหลือนี้สำหรับข้อมูลเพิ่มเติม
Federico Galli

@FedericoGalli ข้อมูลที่เกี่ยวข้องมากที่สุดถูกเพิ่มไปแล้วไม่จำเป็นต้องคัดลอกและวางการใช้งานหน้าคนให้ข้อมูลที่เพียงพอ
Z-Y00

-1

ใช้ sudo -u เพื่อระบุผู้ใช้ ใช้แฟล็ก -i เพื่อตั้งค่าตัวแปรสภาพแวดล้อมของผู้ใช้เป้าหมายด้วย

sudo -i -u user command

1
สิ่งนี้จะให้This account is currently not available.
knocte

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