BASH Scripting, su đến www-data cho một lệnh


26

Tôi đang làm việc để tự động hóa việc tạo các kho lưu trữ lật đổ và các trang web liên quan như được mô tả trong bài đăng blog này tôi đã viết . Tôi đang gặp vấn đề ngay xung quanh phần tôi gửi cho người dùng dữ liệu www để chạy lệnh sau:

svnadmin create /svn/repository

Có một kiểm tra ở phần đầu của kịch bản để đảm bảo rằng nó đang chạy dưới dạng root hoặc sudo và mọi thứ sau lệnh đó cần được chạy dưới dạng root. Có cách nào tốt để chạy một lệnh đó dưới dạng dữ liệu www và sau đó chuyển về root để kết thúc không?

Câu trả lời:


24

Chỉ cần sử dụng su - www-data -c 'svnadmin create /svn/repository'trong tập lệnh của bạn chạy bằng root. Vì vậy, chỉ có lệnh này được chạy bởi người dùng dữ liệu www.


Cập nhật cho người xem trong tương lai :

Trong trường hợp bạn nhận được một "This account is currently not available"lỗi, hãy xem xét sử dụng:

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

(Đề cập có giá trị của @Petr về -scờ để phù hợp với www-datachính sách không đăng nhập của người dùng)


1
Vâng, có vẻ như tôi đã quên một quy tắc cơ bản của kịch bản ... RTFM. Cảm ơn!
Brendon Dugan

15
Thử điều này, tôi nhận được lỗiThis account is currently not available.
rubo77

Tôi cũng nhận được lỗi này, nhưng câu trả lời của futbolsalas15 dưới đây hoạt động tốt.
Andrew

18
Sử dụng su - www-data -s /bin/bash -c 'your_command'để làm cho công việc này. Dữ liệu www của người dùng có vỏ /usr/sbin/nologinnên không có -stham số dẫn đến thông báo lỗi.
Petr

63

Với 'su' có lẽ yêu cầu mật khẩu và dữ liệu www không có mật khẩu. Tôi đề nghị lệnh sudo:

 sudo -u www-data command

Điều kiện là người dùng của bạn phải root hoặc được cấu hình trong tệp sudoers


4
Wow, tại sao đây không phải là câu trả lời được chọn? Đã cho tôi quá lâu để tìm thấy điều này.
Thuyền trưởng Hypertext

3

Sử dụng 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
Cần lưu ý rằng các lệnh su không hoạt động với các tài khoản đã đăng nhập bị vô hiệu hóa (chẳng hạn như dữ liệu www). Bạn sẽ phải sử dụng sudo.
Frantumn

2

2 cách tiếp cận có thể :


1) sudolệnh:

Trong hầu hết các trường hợp, bạn sẽ có quyền truy cập vào sudolệnh và vì vậy giải pháp đơn giản là:

sudo -u target_user target_command


2) sulệnh (nếu sudo chưa được cài đặt. Ex. alpine-linux images):

su - target_user -c 'target_command'

Trong trường hợp bạn nhận được lỗi 'Tài khoản này hiện không khả dụng' , người dùng không có chính sách đăng nhập (truy cập shell). Nếu vậy, hãy cân nhắc sử dụng:

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

(Dựa trên nhận xét có giá trị của @Petr về -scờ để phù hợp với www-datachính sách không đăng nhập của người dùng)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.