2013-07-29 32 views
9

Bạn có thể chạy chức năng bash tùy chỉnh với các đặc quyền khác nhau không?Chức năng chạy bash với người dùng khác nhau

#!/bin/bash 
function RunStefano() { 
    while [ 1 ]; do 
     echo "Ciao, ´/usr/bin/whoami´" 
     sleep 10; 
    done & 
} 
export -f RunStefano; 
echo "Welcome, ´/usr/bin/whoami´" 
sudo -u stefano -c "RunStefano" 

Nếu tôi chạy kịch bản này với người dùng 'root', tôi muốn nhận như đầu ra:

Welcome, root 
Ciao, stefano 
    (...) 
Ciao, stefano 

Nó sẽ là possibile?

+1

@hetepeperfan: Đang cố gắng cho thấy rằng bạn không thể làm điều đó * cách *. Nó không cho thấy rằng bạn không thể * bằng cách nào đó * chạy một chức năng duy nhất như một người dùng khác. –

Trả lời

5

Bạn không thể làm điều đó, ít nhất là không trực tiếp.

Mỗi quy trình chạy trong tài khoản người dùng cụ thể. Theo mặc định, đó là cùng một tài khoản như quá trình gọi nó. sudo cho phép quy trình chạy dưới một tài khoản khởi chạy một quá trình khác chạy dưới một tài khoản khác.

Khi bạn gọi hàm shell, nó không khởi chạy một quy trình mới. Với một số sửa đổi, kịch bản của bạn nên cung cấp cho bạn một cái gì đó như:

sudo: RunStefano: command not found 

Trong quá trình mới được tạo ra bởi sudo, không có lệnh RunStefano; chức năng là cục bộ cho quá trình chạy tập lệnh.

Bạn cần cách ly hàm thành một tập lệnh thực thi riêng biệt; sau đó bạn có thể gọi tập lệnh đó qua sudo.

Ngẫu nhiên, bạn cũng cần phải thay đổi dấu nháy xung quanh /usr/bin/whoami để backticks:

echo "Ciao, `/usr/bin/whoami`" 

Và bạn nên đọc tài liệu cho lệnh sudo; nó không có tùy chọn -c.

+1

Ciao Keith. Cảm ơn bạn đã trả lời vui lòng của bạn. Tôi sẽ xử lý như bạn đang đề xuất! Cảm ơn một lần nữa! –

13

Có, đây là thể

#!/bin/bash 
function1(){ 
    echo `whoami` 
} 
export -f function1 
su username -c "bash -c function1" 
exit 0 
Các vấn đề liên quan