Có cách nào để làm cho một phần của tập lệnh chạy như một người dùng khác (không phải root) không? Nếu nó giúp, phần được chạy như một người dùng khác xảy ra ở cuối tập lệnh
Chỉnh sửa:
HĐH -> Ubuntu 9.04
Có cách nào để làm cho một phần của tập lệnh chạy như một người dùng khác (không phải root) không? Nếu nó giúp, phần được chạy như một người dùng khác xảy ra ở cuối tập lệnh
Chỉnh sửa:
HĐH -> Ubuntu 9.04
Câu trả lời:
Sử dụng lệnh sudo trong kịch bản.
Trong các hình thức:
sudo -u username command
lệnh sudo chạy lệnh như tên người dùng .
Nếu tập lệnh đang được chạy với quyền root, tôi không nghĩ nó sẽ nhắc nhập mật khẩu. Nếu không, bài viết này thảo luận về cách sử dụng sudo với mật khẩu trong một dòng lệnh? và bài viết này thảo luận về cách sử dụng sudo mà không cần mật khẩu?
chmod +x script.sh
và sau đó chỉ làsudo -u username script.sh
i
tùy chọn nếu bạn muốn có được môi trường của người dùng
Câu trả lời này là tốt, nhưng lời khuyên về serverfault hơi nguy hiểm - sẽ cho phép bất cứ ai chạy bất cứ thứ gì bằng root! Vì vậy, tôi đang đăng ở đây vì tôi không thể định dạng bình luận.
Tôi khuyên bạn nên sử dụng visudo để cung cấp các quyền bạn cần chính xác nhất có thể. Nhập visudo
và thêm một dòng như:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Nếu bạn cần chạy điều tương tự trên nhiều máy chủ, bạn có thể mở nó bằng:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Nhưng tôi sẽ ** không * sử dụng:
username ALL=(ALL) NOPASSWD: ALL
hoặc tên người dùng tên máy chủ = TẤT CẢ
Các trang người đàn ông sudoer có rất nhiều chi tiết đẫm máu
username
bằng tên người dùng sẽ có thể chạy lệnh). Nếu tệp thực thi bạn muốn chạy chỉ được thực thi bởi một người dùng cụ thể, điều đó cũng tốt - chỉ cần chuyển tên người dùng đó trong sudo -u username commandline
dòng của tập lệnh.
# Tôi = thích:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./chạy
1: root
2: nobody
3: root
không chắc lắm về điều đó, nhưng nếu bạn muốn CHỈ phần cuối của tập lệnh đó sẽ chạy như một người dùng khác, bạn có thể thêm su someuser
trước khi kết thúc tập lệnh.
Tui bỏ lỡ điều gì vậy?
Hy vọng rằng sẽ giúp,
Trân trọng
Bằng cách này, kết thúc của một tập lệnh sẽ được thực thi bởi người dùng khác (root). Xin lưu ý $[LINENO+2]
và exit $?
gọi. Chúng được yêu cầu để kết thúc tập lệnh chỉ thực hiện một lần và giữ nguyên mã thoát của sudo
cuộc gọi.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1