BASH Scripting, ไปที่ www-data สำหรับคำสั่งเดียว


26

ฉันทำงานในการสร้างการทำงานอัตโนมัติของที่เก็บโค่นล้มและเว็บไซต์ที่เกี่ยวข้องตามที่อธิบายไว้ในบล็อกโพสต์นี้ที่ผมเขียน ฉันพบปัญหาในส่วนที่ฉันไปยังผู้ใช้ www-data เพื่อเรียกใช้คำสั่งต่อไปนี้:

svnadmin create /svn/repository

มีการตรวจสอบที่จุดเริ่มต้นของสคริปต์ที่ทำให้แน่ใจว่ามันทำงานเป็น root หรือ sudo และทุกอย่างหลังจากนั้นคำสั่งเดียวจะต้องทำงานเป็น root มีวิธีที่ดีในการเรียกใช้คำสั่งหนึ่งคำว่าเป็น www-data จากนั้นสลับกลับไปที่รูทเพื่อจบการทำงานหรือไม่?

คำตอบ:


24

เพียงใช้su - www-data -c 'svnadmin create /svn/repository'ในสคริปต์ของคุณรันโดยรูท ดังนั้นเฉพาะคำสั่งนี้เท่านั้นที่รันโดยผู้ใช้ www-data


อัปเดตสำหรับผู้ดูในอนาคต :

ในกรณีที่คุณได้รับ"This account is currently not available"ข้อผิดพลาดให้พิจารณาใช้:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(การกล่าวถึงที่มีค่าของ @Petr เกี่ยวกับการ-sตั้งค่าสถานะเพื่อรองรับwww-dataผู้ใช้ที่ไม่มีนโยบายการเข้าสู่ระบบ)


1
ใช่ดูเหมือนว่าฉันลืมกฎพื้นฐานของการเขียนสคริปต์ ... RTFM ขอบคุณ!
Brendon Dugan

15
ลองสิ่งนี้ฉันได้รับข้อผิดพลาดThis account is currently not available.
rubo77

ฉันยังได้รับข้อผิดพลาดนี้ แต่คำตอบของ futbolsalas15 ด้านล่างใช้ได้ดี
แอนดรู

18
ใช้su - www-data -s /bin/bash -c 'your_command'เพื่อทำให้งานนี้ ผู้ใช้ www-data มีเชลล์/usr/sbin/nologinดังนั้นโดยไม่มี-sพารามิเตอร์จะนำไปสู่ข้อความแสดงข้อผิดพลาด
Petr

63

ด้วย 'su' อาจเป็นไปได้ว่าขอรหัสผ่านและ www-data ไม่มีรหัสผ่าน ฉันแนะนำคำสั่งsudo:

 sudo -u www-data command

เงื่อนไขคือผู้ใช้ของคุณต้องเป็นรูทหรือกำหนดค่าในไฟล์ sudoers


4
ทำไมนี่ไม่ใช่คำตอบที่เลือก? พาฉันไปหาสิ่งนี้นานเกินไป
Captain Hypertext

3

การใช้su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

2
ควรสังเกตว่าคำสั่ง su ไม่ทำงานกับบัญชีที่ปิดใช้งานการเข้าสู่ระบบ (เช่น www-data) คุณจะต้องใช้ sudo
Frantumn

2

2 แนวทางที่เป็นไปได้ :


1) sudoคำสั่ง:

ในกรณีส่วนใหญ่คุณจะสามารถเข้าถึงsudoคำสั่งและวิธีการแก้ปัญหาก็คือ:

sudo -u target_user target_command


2) suคำสั่ง (หากไม่ได้ติดตั้ง sudo Ex. alpine-linux images):

su - target_user -c 'target_command'

ในกรณีที่คุณได้รับข้อผิดพลาด'บัญชีนี้ไม่สามารถใช้งานได้ในขณะนี้'ผู้ใช้ไม่มีนโยบายการเข้าสู่ระบบ (เข้าถึงเชลล์) หากเป็นเช่นนั้นให้พิจารณาใช้:

su - target_user -s /bin/bash -c 'target_command'

(อิงจากความคิดเห็นที่มีค่าของ @Petr เกี่ยวกับการ-sตั้งค่าสถานะเพื่อรองรับwww-dataผู้ใช้ที่ไม่มีนโยบายการเข้าสู่ระบบ)

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