Yêu cầu đồ họa mật khẩu trong tập lệnh bash và giữ lại cài đặt thời gian chờ sudo mặc định


9

Các sudo -A(SUDO_ASKPASS) tùy chọn rõ ràng nguyên nhân sudo để mất thời gian chờ (ví dụ, timestamp_timeout) thiết lập.

Tôi muốn sử dụng tùy chọn sudo -A nhưng tôi muốn giữ lại thời gian chờ mặc định (ví dụ: 15 phút trên Ubuntu) trong tập lệnh bash. Tôi muốn hỏi mật khẩu người dùng một cách an toàn và trong hộp thoại GUI, nhưng tôi chỉ muốn nhắc một lần cho tập lệnh của mình (không phải hơn 50 lần).

Hơn nữa, tôi không muốn chạy toàn bộ tập lệnh của mình với tư cách là người dùng root vì tôi chỉ nghĩ đó là một ý tưởng tồi. Hơn nữa, các tệp được tạo bởi tập lệnh của tôi có quyền sở hữu sai trong trường hợp này.

Tùy chọn sudo -A sẽ hoạt động với tôi nếu nó giữ thời gian chờ mặc định.

Từ hướng dẫn sudo:

Lựa chọn: ‑A

Thông thường, nếu sudo yêu cầu mật khẩu, nó sẽ đọc nó từ thiết bị đầu cuối của người dùng. Nếu tùy chọn ‑A (Askpass) được chỉ định, chương trình trợ giúp (có thể là đồ họa) được thực thi để đọc mật khẩu của người dùng và xuất mật khẩu cho đầu ra tiêu chuẩn. Nếu biến môi trường SUDO_ASKPASS được đặt, nó chỉ định đường dẫn đến chương trình trợ giúp. Mặt khác, nếu /etc/sudo.conf chứa một dòng chỉ định chương trình hỏi, giá trị đó sẽ được sử dụng. Ví dụ:

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

BTW, kdesudo có cùng một vấn đề - nó yêu cầu mật khẩu mỗi lần nó được gọi, ngay cả khi chỉ một giây sau trong cùng một tập lệnh.

Tôi đang sử dụng Kubfox 12.04 64 bit.

Dưới đây là ví dụ làm việc đầy đủ của tất cả các phần của giải pháp. Nó bao gồm một tập lệnh bash, tập lệnh "myaskpass" như được đề xuất ở đây và tập tin ".desktop". Toàn bộ mọi thứ phải là GUI 100% (hoàn toàn không có tương tác đầu cuối), vì vậy tệp .desktop là điều cần thiết (afaik).

$ cat myaskpass.sh 
#!/bin/bash
kdialog --password "Please enter your password: "
exit 0


$ cat askpasstest1.desktop 
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment=SUDO_ASKPASS tester1
Exec=bash /home/user/test/askpasstest1.sh
GenericName=SUDO_ASKPASS tester1
Name=SUDO_ASKPASS tester1
NoDisplay=false
Path[$e]=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
Categories=Application;Utility;
X-KDE-SubstituteUID=false
X-KDE-Username=

Và một kịch bản thử nghiệm chính nó. Điều này sẽ yêu cầu mật khẩu của bạn hai lần khi sử dụng giải pháp này.

#!/bin/bash

sudo -k
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass1
touch filemadeas_regularuser1
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass2
touch filemadeas_regularuser2
ls -la filemadeas* > /home/user/test/fma.log
kdialog --title "Files Created" --textbox /home/user/test/fma.log 640 480
sudo rm filemadeas_*
rm fma.log

exit 0

2
Không phải là gksudomột lựa chọn ở đây? linux.die.net/man/1/gksudo
slm

Tôi đang sử dụng KDE, vì vậy gksudo không phải là một lựa chọn cho tôi, nhưng tôi được bảo rằng nó hoạt động giống như kdesudo. kdesudochịu đựng cùng một vấn đề tôi mô tả ở trên. Tôi đã thử nghiệm sudo -Anhư một giải pháp thay thế kdesudovà tốt hơn cho tình huống của tôi, nhưng nó không giải quyết được vấn đề thời gian chờ (ít nhất là cho đến nay).
MountainX

Câu trả lời:


7

Tôi thêm phần này vào tập lệnh bash của mình:

# ask for password up-front.
sudo -v
# Keep-alive: update existing sudo time stamp if set, otherwise do nothing.
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &

Tìm thấy nó ở đây:

/server/266039/temporarlly-increasing-sudos-timeout-for-the-duration-of-an-install-script

https://gist.github.com/cowboy/3118588

Tôi sử dụng một tập lệnh khác để khởi chạy tập lệnh chính của mình và tôi sử dụng tệp .desktop để khởi chạy tập lệnh trợ giúp đó. Nó không đơn giản lắm, nhưng nó có thể được thực hiện để hoạt động 100% GUI. Tôi vẫn đang tìm kiếm giải pháp hoàn hảo, nhưng hiện tại đây đang là mánh khóe.


1

Làm thế nào về gksudo ?

$ gksudo your_app_launcher.sh

Nó không hiển thị một hộp thoại đồ họa để nhập mật khẩu quản trị viên một cách an toàn.

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.