2012-01-20 33 views
7

Đây là tập lệnh Init của tôi mà tôi có tại máy trạm Ubuntu của mình. Tôi cần phải chạy một lệnh như một người dùng khác hơn là root, nhưng tôi không thể có được đầu của tôi xung quanh làm thế nào nó nên được thực hiện. Không phải sudo -u hoặc su newuser dường như hoạt động.Chuyển người dùng trong tập lệnh init?

Kịch bản:

respawn 
console none 

start on runlevel [2345] 
stop on runlevel [06] 

script 
    su "anotherUser" -c ./myCommand 
end script 
+0

sử dụng loại lệnh "su -c" lệnh của bạn 'different_user " – vikky

+0

Như @Henrick đã chỉ ra trong câu trả lời của họ bên dưới, các tập lệnh mới nổi có thể sử dụng [stuza cấu hình setuid'] (http://upstart.ubuntu.com)/cookbook/# setuid) để đặt người dùng. – clayzermk1

Trả lời

18

tôi sử dụng này:

su -l $MUSER -c "myCommand args..." 

Cập nhật: Vì không quan tâm đến câu trả lời này, tôi giải thích cách tôi sử dụng nó ở đây.

Chúng tôi chạy máy chủ như người dùng Linux bình thường, không phải root. Tên người dùng chứa ba phần:

dịch vụ, khách hàng, sân khấu

Bằng cách này chúng ta có thể chạy một số dịch vụ cho một số khách hàng trong một hệ điều hành Linux.

Ví dụ: Dịch vụ foo_bar_p "foo" của khách hàng "thanh" và "p" có nghĩa là sản xuất

Đây là một phần của init script. Init script có thể được thực hiện như là người chủ hoặc là người dùng foo_bar_p:

# /etc/init.d/foo_bar_p-celeryd 
# scriptname contains linux username 
SCRIPT_NAME=`basename "$0"` 
SYSTEM=${SCRIPT_NAME%*-celeryd} 

U=`id -nu` 

if [ ! $U == $SYSTEM ]; then 
    if [ $U == "root" ]; then 
     # use "-l (login)" to delete the environment variables of the calling shell. 
     exec su -l $SYSTEM -c "$0 [email protected]" 
    fi 
    echo "Script must be run from $SYSTEM or root. You are '$U'" 
    rc_exit 1 
fi 

# OK, now I am foo_bar_p 
cd 
. $HOME/.bashrc 
.... 
+0

Tuyệt vời. Cảm ơn! – Industrial

+0

Công tắc -l làm gì? – Henrik

+0

-l | --login Cách để làm cho trình bao khởi động trình bao đăng nhập. – Henrik

1

su có lẽ là một cách tiếp cận phổ biến hơn, nhưng điều này cũng có thể trên một số các bản phân phối chung với sudo:

sudo -u $MUSER $COMMAND $ARGS 

(chỉ đọc lại câu hỏi của bạn và đã không nhận ra điều đó không làm việc cho bạn, nhưng nó đã làm việc cho tôi trong init script)

+0

Đã thử điều này trong '/ etc/rc.local' nhưng không hoạt động trên Ubuntu 16.04. Cũng thử điều này: 'su -l user -c/home/user/script'. Bất kỳ đề xuất? – beemaster

6

đối mới nổi, sử dụng:

setuid myuser 
exec command args 
+0

Đẹp! Liệu nó tải. Bashrc, hồ sơ và các công cụ như thế? –

Các vấn đề liên quan