2012-05-19 13 views
5

Mục tiêu của tôi là liên kết thành công một thư mục với/opt/directory- cần phải chạy với sudo.Trong Linux làm thế nào để thêm một bước xây dựng trong Qt Creator sử dụng đặc quyền su mà không nhận được những nỗ lực mật khẩu sai trên xây dựng?

Tôi đã thử này:

system(sudo ln -s $$OUT_PWD/xampp /opt/lampp):message("You should manually link LAMPP") 

Nhưng xây dựng từ qt-người sáng tạo nó không nhắc nhập mật khẩu sudo, do đó tôi không thể có được nó để liên kết các thư mục. Tôi gặp lỗi "sai mật khẩu lần thử ..." trong Đầu ra Trình biên dịch. Sau đó, tôi đã cố gắng này với bước xây dựng:

make 
sudo make install 

để xem nếu nó sẽ nhắc tôi ở đó, nhưng nó không thành công trên make install bước với lỗi tương tự, đó là này một cách chi tiết:

00:31:20: Starting: "/usr/bin/sudo" make install 
sudo: no tty present and no askpass program specified 
sudo: no tty present and no askpass program specified 
Sorry, try again. 
sudo: no tty present and no askpass program specified 
sudo: no tty present and no askpass program specified 
Sorry, try again. 
sudo: no tty present and no askpass program specified 
sudo: no tty present and no askpass program specified 
Sorry, try again. 
sudo: 3 incorrect password attempts 
00:31:20: The process "/usr/bin/sudo" exited with code 1. 

Các system() chức năng trong kịch bản qmake hoạt động tốt khi tôi sử dụng qmake && make && make install từ thiết bị đầu cuối vì nó nhắc tôi trước khi sudo ln... lệnh; nhưng với mục đích thử nghiệm nhanh, tôi cảm thấy rằng việc xây dựng với CTRL-B bên trong Qt Creator cũng sẽ hoạt động với các lệnh sudo ...

Có cách nào để được nhắc từ Người tạo Qt hay không? Giống như lưu trữ sudo vượt qua trong Qt Creator (mặc dù nó là nguy hiểm) ... Hoặc có thể làm cho nó chạy các bước xây dựng trên một thiết bị đầu cuối, nơi nó sẽ nhắc tôi? Chức năng prompt() trong qmake có hoạt động với việc thu thập mật khẩu sudo không?

Bất kỳ lời đề nghị được hoan nghênh ...

+1

bạn có thể xây dựng từ gnome-terminal? Tôi không chắc chắn làm thế nào bạn sẽ tích hợp một bước xây dựng trong Qt-Creator đòi hỏi đặc quyền nâng cao. Nó có lẽ sẽ được dễ dàng hơn để xây dựng từ thiết bị đầu cuối anyway. Bạn có thể dễ dàng tạo một tập lệnh bash để thực hiện tất cả các bước xây dựng bao gồm qmake, make, và cài đặt. –

+0

Có, tôi có thể xây dựng từ gnome-terminal. Cảm ơn bạn đã gợi ý, tôi đã nghĩ rằng một kịch bản bash sẽ dễ dàng hơn quá ... :) – Logan

Trả lời

3

Sau rất nhiều nghiên cứu:

ssh-askpass Sudo Password | sudo -S bash ./script 

Làm việc như một nét duyên dáng, nó yêu cầu mật khẩu trong một cửa sổ/hộp nhắc riêng biệt. Tôi đã thêm nó trong các bước xây dựng tùy chỉnh. Điều quan trọng là để cho sudo biết rằng nó sẽ mong đợi một đầu vào mật khẩu thông qua tùy chọn -S.

echo "password" | sudo -S bash ./script 

Cũng hoạt động với tập lệnh bash, tuy nhiên bạn có thể cho rằng không an toàn khi lưu trữ mật khẩu sudo bên trong tập lệnh. Người ta nói rằng quyền đọc nên khắc phục vấn đề đó.

0

Tôi nghĩ bạn nên sử dụng gksudo (trong GNOME) hoặc kdesudo (trong KDE). Các lệnh sau đó sẽ sử dụng một cửa sổ để nhắc mật khẩu của bạn.

1

@Logan Bạn có thể gây sudo sử dụng (hộp thoại yêu cầu mật khẩu GUI) ssh-askpass trực tiếp với tùy chọn -A của nó, điều này có thể sử dụng các biến môi trường SUDO_ASKPASS để ghi đè lên một giá trị /usr/bin/ssh-askpass có thể được cấu hình trong /etc/sudo.conf[1] (như đề xuất của gksudo hoặc kdesudo từ @herophuong). Điều này xung quanh nguy cơ bảo mật của giải pháp thứ hai trong câu trả lời của bạn, để cho "password" hiển thị với bất kỳ thứ gì có thể quan sát các đối số dòng lệnh. Tương đương với giải pháp đầu tiên của bạn trở thành:

sudo -A -s ./script 

Đừng quên rằng sudo có thể cung cấp bộ nhớ đệm chứng do đó, nếu nó đã được sử dụng rất thời gian gần đây (mặc định 5 phút?), lời gọi lặp lại sử dụng giá trị mật khẩu được lưu trong bộ nhớ cache thay vì thực hiện một yêu cầu mật khẩu khác. Nếu không vì lý do an toàn/bảo mật, điều này không được mong muốn đối với tập lệnh (hoặc ở nơi khác) sử dụng sudo -K mà không có đối số nào khác để xóa ngay thông tin đăng nhập được lưu trữ (không cần mật khẩu để sử dụng) để bất kỳ việc sử dụng sudo sau sẽ yêu cầu xác thực.

1 - Hãy nhớ sử dụng visudo như là người chủ nếu bạn muốn chỉnh sửa /etc/sudo.conf thêm:

# Path to askpass helper program 
Path askpass /usr/bin/ssh-askpass 

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