2011-11-13 38 views
7

Tôi đang viết một tập lệnh shell đơn giản thay đổi địa chỉ mac của phần cứng mạng. Một trong những dòng là:Shell script gọi sudo; làm cách nào để tôi chặn lời nhắc mật khẩu

sudo ifconfig eth0 hw ether 00:99:99:00:00:00 

Vấn đề của tôi là với sudo lời nhắc tập lệnh cho mật khẩu. Có cách nào mà tôi có thể làm điều này mà không nhắc người dùng nhập mật khẩu ???

Trả lời

8

chắc chắn nhất, nếu bạn không nhớ làm cho rằng lệnh đặc biệt 'miễn phí để sử dụng' cho rằng người dùng cụ thể:

Xem cơ bản câu trả lời khác của tôi ở đây: Shell script - Sudo-permissions lost over time

Điều đơn giản nhất mà có thể làm việc là

myuser = NOPASSWD: /sbin/ifconfig 

Ngoài ra, bạn có thể sudo một lệnh tùy ý trên các thiết bị đầu cuối cùng (tty/vty), và sudo sẽ cache xác thực cho một thời gian (hoặc cho đến khi sudo -k), vì vậy bạn có thể bắt đầu tập lệnh và nó sẽ 'nhớ' thông tin đăng nhập từ lời gọi sudo trước đó của bạn. đôi khi tôi làm điều này khi soạn ống với sudo (chỉ cần đi trước chúng với sudo true)

+0

Ý của bạn có phải là tên người dùng ALL = NOPASSWD:/sbin/ifconfig trong tệp sudoers ??? Tôi đã thử nó nhưng nó không hoạt động –

+1

Có. Bạn có (1) bao gồm các không gian (2) sử dụng 'sudoedit' (hoặc' visudo')? Ngoài ra, tôi hoàn toàn KHÔNG khuyên bạn nên sử dụng TẤT CẢ cho các khoản tiền trợ cấp ít hơn.** CẢNH BÁO ** Bất kỳ điều gì khác ngoài các công cụ 'may mắn' (như 'visudo') * S * * làm cho hệ thống của bạn không sử dụng được khi bạn lộn xộn tệp sudoers (trừ khi bạn có mật khẩu gốc để sửa lại) – sehe

+0

@sehe Tôi đồng ý , sử dụng TẤT CẢ là khá nguy hiểm. – Tilo

1

Bạn cần một dòng sudo cấu hình cho phép cho các lệnh được thực hiện bởi người sử dụng mà không cần nhắc mật khẩu.

Bạn có thể vô hiệu hóa các mật khẩu nhanh chóng cho một người sử dụng toàn bộ (nguy hiểm hơn, nhưng có lẽ ok nếu bạn là người dùng chỉ trên desktop của bạn - DONT làm điều này trên một máy chủ):

yourusername ALL=(ALL) NOPASSWD: ALL 

hay hẹp hơn , chỉ cho phép các lệnh ifconfig:

yourusername ALL= NOPASSWD: /sbin/ifconfig 

Xem: man sudoers, man sudo

http://ubuntuforums.org/showthread.php?t=1132821

http://www.linuxhelp.net/guides/sudo/

+0

Tôi đã thử nó, và tôi dường như đã bị mắc kẹt với lỗi mới sudo: phân tích lỗi trong/etc/sudoers gần dòng 18 sudo: không tìm thấy nguồn sudoers hợp lệ, bỏ trong khi cố gắng chỉnh sửa tệp sudoers. làm thế nào để làm điều đó bây giờ? –

+0

có nghĩa là bạn có lỗi cú pháp trong dòng 18 của tệp/etc/sudoers của mình - bạn cần sửa lỗi hoặc nhận xét nó ra – Tilo

+0

bạn có thể thêm dòng từ tệp/etc/sudoers của mình vào câu hỏi không? Ngoài ra: kiểm tra liên kết tôi đã đề cập trong diễn đàn Ubuntu – Tilo

3
echo "password" | sudo -S ifconfig eth0 hw ether 00:99:99:00:00:00 
+0

Trong khi điều này sẽ hoạt động, nó vô cùng không an toàn. Trước hết, họ có thể đọc mật khẩu từ tập lệnh chứa lệnh. Thứ hai, mật khẩu sẽ được lưu trữ ở những nơi như lịch sử vỏ. Theo nguyên tắc chung, không bao giờ đặt mật khẩu trên dòng lệnh. Hãy để chương trình nhắc cho nó. Đối với trường hợp sử dụng cụ thể của bạn, tùy chọn tốt nhất là chỉnh sửa tệp rùng mình để không yêu cầu mật khẩu khi thực hiện lệnh ifconfig. –

0

Một cách an toàn hơn để làm điều đó sẽ là:

sudo visudo -f sudoers 

sau đó thêm

myuser ALL=NOPASSWD:/sbin/ifconfig 

tới cửa sổ soạn thảo xuất hiện. Khi bạn làm xong, sử dụng :x bỏ

0

Đây là một hộp thoại zenity rằng làm điều gì đó tương tự để bình luận TMAN của,
dù mật khẩu không được lưu trữ trong lịch sử ... Đây có thể là một lựa chọn tốt

#!/bin/bash 
ENTRY=`zenity --password` 
case $? in 
0) 
pw=$(echo $ENTRY | cut -d'|' -f1) 
;; 
1) 
echo "Stop login.";; 
-1) 
echo "An unexpected error has occurred.";; 
esac 
TMP=$(echo "${pw}" | sudo -Sv) 
TMP=0 
Các vấn đề liên quan