Làm thế nào để chạy script như một người dùng khác mà không cần mật khẩu?


145

Tôi có script.sh phải được chạy như user2. Tuy nhiên, tập lệnh này chỉ có thể được chạy dưới user1 trong ứng dụng của tôi.

Tôi muốn lệnh sau để chạy:

su user2 -C script.sh

nhưng có thể chạy mà không cần mật khẩu.

Tôi cũng muốn điều này rất hạn chế, vì trong user1 chỉ có thể chạy script.sh dưới user2 và không có gì khác.

Tôi đã thử làm điều này với tập tin sudoers và bị bối rối vô tận sau nhiều giờ cố gắng.

Nếu ai đó có thể cung cấp một ví dụ rõ ràng về cách thực hiện điều này (thay vì một cái gì đó chung chung như sử dụng sudoers), nó sẽ được đánh giá rất cao.


15
Tôi không đặc biệt với sự gần gũi. Đây là một câu hỏi về cách lập trình hệ thống theo một cách cụ thể; như vậy, đó là về lập trình shell và nằm trong phạm vi của SO dành cho các câu hỏi về lập trình. Rõ ràng là một số người không thấy điều này quá lạc đề đến mức nó nên bị bỏ phiếu; câu hỏi và câu trả lời đều có số lượng phiếu bầu tăng lên đáng kể.
Jonathan Leffler

Câu trả lời:


121

Gọi visudovà thêm cái này:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

Các đường dẫn lệnh phải tuyệt đối ! Sau đó gọi sudo -u user2 /home/user2/bin/test.shtừ một user1cái vỏ. Làm xong.


3
Có một mô tả hay về định dạng sudoers trên Ubuntu. Trang người đàn ông cho sudoers là xấu xí :(
Mifeet

Vậy làm thế nào thang đo này cho tất cả người dùng chạy như user2, thay vì chỉ user1?
jiggunjer

193

thử chạy

su -c "Your command right here" -s /bin/sh username

Điều này sẽ chạy lệnh như tên người dùng cho rằng bạn có quyền sudo như người dùng đó.


17
Nó hoạt động như người dùng bình thường với các quyền sudo đầy đủ như thế này:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77

5
Chỉ cần một lưu ý cho bất kỳ người dùng mac nào, rõ ràng cú pháp hơi khác một chút : su username -c "command".
NHDaly

1
Nếu bạn đang cố gắng bắt đầu screenvới tư cách là một người dùng khác thì điều này có thể hữu ích - linuxquestions.org/questions/linux-software-2/ mẹo
Mint

2
nếu username(hoặc trong câu hỏi, user2) có mật khẩu, điều này sẽ không cho phép bỏ qua lời nhắc cho nó. câu trả lời khác không: không cần mật khẩu, cả user1 và user2.
phil294

1
`su -c "Your command right here" -s /bin/sh username`

Lệnh trên là chính xác, nhưng trên Red Hat nếu selinux đang thực thi thì nó sẽ không cho phép cron thực thi các tập lệnh như một người dùng khác. thí dụ; execl: couldn't exec /bin/sh execl: Permission denied

Tôi đã phải cài đặt setroubledhoot và setools và chạy như sau để cho phép nó:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
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.