Làm thế nào để cho phép thực thi mà không cần nhắc mật khẩu bằng sudo?


15

Tôi đang viết một ứng dụng Java trong đó tôi cần thực hiện một dòng lệnh và nhận lại kết quả, nhưng khi tôi thực thi lệnh, nó yêu cầu mật khẩu sudo. Cho đến nay tôi đã thử:

$ sudo -s
$ vim /etc/sudoers
# User privilege specification
root         ALL=(ALL:ALL) NOPASSWD: ALL
javauser     ALL=(ALL:ALL) NOPASSWD: ALL

:wq
$ 4 -r--r-----   1 root root     615 2011-10-26 09:23 sudoers

Khi tôi thực thi lệnh, nó lại hỏi mật khẩu "[javauser] cho javauser:". Nhưng tôi đã đề cập đến noPASSWD.

whoamitrả về alexvà tôi đang thêm nó như thế này trong sudoerstập tin

# User privilege specification
root    ALL=(ALL:ALL) ALL
alex ALL=NOPASSWD: ALL


# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Chạy cứ hỏi tôi mật khẩu, có ý kiến ​​gì không?


Có vẻ như đã có một câu hỏi rất giống nhau: Askubfox.com/questions/39281/, - bạn đã thử câu trả lời từ đó chưa?
Serge

Đảm bảo rằng trong mã java của bạn, bạn sử dụng "sudo / perfect / path / to / command" trong cuộc gọi hệ thống của bạn. Btw. vì lý do bảo mật, bạn nên sử dụng sudo visudothay vì vimchỉnh sửa tệp sudoers. Bằng cách đó nếu bạn mắc lỗi, chương trình sẽ cảnh báo bạn về điều đó.
con-f-sử dụng

Có thể tìm thấy ở đây chính xác những gì tôi đã thử: gist.github.com/1315951

Câu trả lời:


28

Bạn cần làm như sau, trên loại thiết bị đầu cuối sudo visudovà thêm một dòng như thế này vào cuối tệp chỉ định các lệnh bạn muốn chạy mà không cần nhập mật khẩu sudo (Tôi khuyên bạn nên sử dụng từng lệnh bạn muốn sử dụng trong chương trình và không chỉ cho phép tất cả các chương trình được thực hiện bởi điều này)

<yourusername> ALL=NOPASSWD: <command1>, <command2>

Bây giờ bạn có thể chạy các lệnh được chỉ định mà không cần mật khẩu miễn là bạn gõ lệnh đó với sudo.

tức là: giả sử bạn muốn chạy shutdown -r nowmà không cần phải nhập mật khẩu sudo mỗi lần và tên người dùng của bạn là 'joedoe'

  1. sudo visudotrên một thiết bị đầu cuối

  2. Thêm joedoe ALL=NOPASSWD: /usr/sbin/shutdown -r nowdưới dạng một dòng mới ở cuối tệp , sử dụng các đường dẫn tuyệt đối đến chương trình bạn đang cố gắng sử dụng.

  3. trên chương trình của bạn, sau đó bạn có thể sử dụng sudo shutdown -r nowmà không cần phải nhập mật khẩu sudo.

Bạn có thể tìm thấy đường dẫn tuyệt đối đến một chương trình bằng cách sử dụng which <program name>trên một thiết bị đầu cuối.

Đó là một mánh khóe rất bẩn thỉu khiến hệ thống của bạn mở ra cho những nguy hiểm khác nhưng tôi đoán bạn biết bạn đang làm gì và muốn điều này.

Biên tập

Bạn thực sự cần phải đảm bảo rằng các hoán vị bạn đang đặt ở cuối tệp để không có gì bị ghi đè bởi các quyền của nhóm.


Có vẻ như anh ấy đã làm điều đó.
con-f-sử dụng

Nếu anh ta đã làm điều đó tại sao bạn giải thích anh ta rằng anh ta nên sử dụng sudo visudovà không vimchỉnh sửa tập tin sudoers? Nếu anh ta làm điều này nó sẽ làm việc.
Bruno Pereira

1
@goOgle bạn đang gõ sudotrước lệnh bên trong mã của bạn? bạn cần phải làm điều đó ngay cả khi bạn buộc nopasswd trong tập tin sudoers. tức là: sử dụng sudo <command>không chỉ <command>.
Bruno Pereira

1
Đối với tôi cmd = "whoami" trả về brunovà cmd = "sudo whoami"trả vềroot
Bruno Pereira

3
Tìm thấy rồi! Có thể sao chép này nếu dòng của tôi không ở cuối đến cuối sudoerstập tin. Sau khi phân công nhóm, vv Thực sự là dòng cuối cùng! Di chuyển dòng để là người cuối cùng trong tập tin! (hy vọng đây là nó).
Bruno Pereira
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.