ขอรหัสผ่านแบบกราฟิกในสคริปต์ทุบตีและรักษาการตั้งค่าการหมดเวลา sudo เริ่มต้นไว้


9

sudo -A(SUDO_ASKPASS) ตัวเลือกที่เห็นได้ชัดทำให้เกิด sudo ที่จะสูญเสียการหมดเวลา (เช่น timestamp_timeout) การตั้งค่า

ฉันต้องการใช้ตัวเลือก sudo -A แต่ฉันต้องการเก็บการหมดเวลาเริ่มต้น (เช่น 15 นาทีบน Ubuntu) ในสคริปต์ทุบตี ฉันต้องการขอรหัสผ่านของผู้ใช้อย่างปลอดภัยและในกล่องโต้ตอบ GUI แต่ฉันต้องการให้สคริปต์ของฉันแสดงเพียงครั้งเดียว (ไม่ใช่ 50+ ครั้ง)

นอกจากนี้ฉันไม่ต้องการเรียกใช้สคริปต์ทั้งหมดของฉันในฐานะผู้ใช้รูทเพราะฉันคิดว่านั่นเป็นความคิดที่ไม่ดี นอกจากนี้ไฟล์ที่สร้างโดยสคริปต์ของฉันมีความเป็นเจ้าของผิดในกรณีนี้

ตัวเลือก sudo -A จะใช้งานได้สำหรับฉันหากยังคงมีการหมดเวลาเริ่มต้น

จากคู่มือ sudo:

ตัวเลือก: ‑A

โดยปกติถ้า sudo ต้องการรหัสผ่านมันจะอ่านจากเทอร์มินัลของผู้ใช้ หากระบุตัวเลือก askA (askpass) โปรแกรมตัวช่วย (อาจเป็นแบบกราฟิก) จะถูกดำเนินการเพื่ออ่านรหัสผ่านของผู้ใช้และส่งรหัสผ่านไปยังเอาต์พุตมาตรฐาน หากตัวแปรสภาพแวดล้อม SUDO_ASKPASS ถูกตั้งค่ามันจะระบุพา ธ ไปยังโปรแกรมตัวช่วย มิฉะนั้นถ้า /etc/sudo.conf มีบรรทัดที่ระบุโปรแกรม askpass ค่านั้นจะถูกนำมาใช้ ตัวอย่างเช่น:

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

BTW, kdesudo มีปัญหาเดียวกันนี้ - มันต้องมีรหัสผ่านทุกครั้งที่มีการเรียกใช้แม้ว่าจะเป็นวินาทีต่อมาในสคริปต์เดียวกัน

ฉันใช้ Kubuntu 12.04 64 บิต

นี่คือตัวอย่างการทำงานที่สมบูรณ์ของทุกส่วนของโซลูชัน ประกอบด้วยสคริปต์ทุบตีสคริปต์ "myaskpass" ตามที่แนะนำไว้ที่นี่และไฟล์ ".desktop" สิ่งทั้งหมดควรเป็น 100% GUI (ไม่มีการโต้ตอบกับเทอร์มินัลเลย) ดังนั้นไฟล์ .desktop จึงเป็นสิ่งจำเป็น (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=

และบททดสอบด้วยตัวเอง อันนี้จะขอรหัสผ่านของคุณสองครั้งเมื่อใช้โซลูชันนี้

#!/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
คือgksudoไม่ได้ตัวเลือกที่นี่? linux.die.net/man/1/gksudo
slm

ฉันใช้ KDE ดังนั้น gksudo จึงไม่ใช่ตัวเลือกสำหรับฉัน แต่ฉันได้รับแจ้งว่าใช้งานได้เหมือน kdesudo kdesudoประสบปัญหาเดียวกันฉันอธิบายข้างต้น ฉันกำลังทดสอบsudo -Aทางเลือกkdesudoและดีกว่าสำหรับสถานการณ์ของฉัน แต่ไม่ได้แก้ปัญหาการหมดเวลา (อย่างน้อยก็จนถึงตอนนี้)
MountainX

คำตอบ:


7

ฉันเพิ่มสิ่งนี้ในสคริปต์ทุบตีของฉัน:

# 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 &

พบได้ที่นี่:

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

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

ฉันใช้สคริปต์อื่นเพื่อเปิดใช้งานสคริปต์หลักของฉันและฉันใช้ไฟล์ .desktop เพื่อเรียกใช้สคริปต์ตัวช่วย มันไม่ตรงไปตรงมามากนัก แต่สามารถทำงานได้ 100% GUI ฉันยังคงมองหาโซลูชั่นที่สมบูรณ์แบบ แต่ตอนนี้กำลังทำเคล็ดลับอยู่


1

แล้วgksudoล่ะ?

$ gksudo your_app_launcher.sh

มันแสดงข้อความโต้ตอบแบบกราฟิกสำหรับการป้อนรหัสผ่านผู้ดูแลระบบอย่างปลอดภัย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.