แจ้งรหัสผ่านในระหว่างการบู๊ตด้วยเซอร์วิส systemd


16

สิ่งนี้เกี่ยวข้องกับ Arch Linux (และอาจใช้การแจกจ่ายอื่น ๆsystemd) ฉันต้องการติดตั้งพาร์ทิชัน TrueCrypt ตอนบูท กับเก่านี้เป็นคนน่ารักตรงไปตรงมากับสคริปต์เรียกได้ว่าsysvinitrc.local

ฉันได้ไปในปัจจุบันของฉันด้วยการหักหลังฟอรั่ม Arch มีอีกเป็นด้ายที่ด้าย systemd-devel นี้มีการพูดคุยเกี่ยวกับการเป็น "มีวิธีการแก้ปัญหา" แต่มันไม่ได้เป็นที่ชัดเจนให้กับฉันว่ามันเป็นจริงและ OP มีโพสต์ล่าสุดระบุว่าเขาไม่สามารถที่จะบรรลุเป้าหมายของเขา

จากหน้าตาของมันบุคคลนี้กำลังทำอยู่ แต่กำลังมองหาวิธีปิดข้อความการบูตอย่างต่อเนื่องในขณะที่เขาพิมพ์รหัสผ่าน ฉันโพสต์ที่นั่นและขอให้เขาโพสต์.serviceไฟล์จริงของเขา

ในการค้นหาค่อนข้างน้อยคนพูดถึงว่าพวกเขาประสบความสำเร็จหรือเป็นไปได้ แต่ไม่ได้ระบุว่าโซลูชันคืออะไร

ฉันเท่าที่สามารถปลดล็อกพาร์ติชันจากบรรทัดคำสั่งผ่านsystemdบริการ (ซึ่งจะทำให้ฉันมีความสามารถในการ dismount โดยอัตโนมัติเมื่อปิด / รีบูต) แต่ฉันต้องทำด้วยตนเองเมื่อเข้าสู่ระบบฉัน ' ชอบกระบวนการบู๊ตเพื่อหยุดและขอรหัสผ่านให้ฉัน

นี่คือสคริปต์ปัจจุบันของฉัน:

[Unit]
Description=Truecrypt Setup for vault
#DefaultDependencies=no
#Conflicts=umount.target
#Before=umount.target
#After=systemd-readahead-collect.service systemd-readahead-replay.service
#After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
#StandardInput=tty-force
ExecStart=/bin/sh -c '/usr/bin/truecrypt -t --protect-hidden=no -k "" --filesystem=none --slot=1 -p `systemd-ask-password "Enter password for truecrypt volume: "` /dev/sda4'
ExecStop=/usr/bin/truecrypt --filesystem=none -d /dev/sda4

[Install]
WantedBy=multi-user.target

ฉันทิ้งสิ่งที่มีความคิดเห็นไว้ใน[Unit]บางครั้งฉันพบว่ามีข้อเสนอแนะว่าควรอยู่ที่นั่น แต่ฉันมีปัญหากับมัน ข้างต้นดูเหมือนว่าจะทำงานได้ดีหลังจากบูต / เข้าสู่ระบบ ... ไม่ได้ในระหว่าง


เท่าที่ฉันเข้าใจถ้าคุณไม่ต้องการถูกขัดจังหวะด้วยการบันทึกข้อความคุณต้องสร้างกำแพงในไฟล์หน่วย - หมายถึงว่ามันจะต้องใช้บริการทั้งหมดที่เริ่มต้นก่อนที่จะเสร็จสิ้น (เริ่มต้น) และจะบล็อก บริการใด ๆ ที่ทำงานหลังจากนั้น นั่นคือสิ่งที่คุณพยายามที่จะบรรลุ?
เตอร์

@ peterph ฉันไม่คิดว่ามันจะสำคัญตราบใดที่ TrueCrypt ต้องการให้ทำงานตามเวลาที่ฉันได้รับพรอมต์ สิ่งอื่น ๆ ไม่ได้ขึ้นอยู่กับสิ่งนี้เพราะมันเป็นเพียงแค่วอลลุ่มสำหรับจัดเก็บไฟล์ ดังนั้นสิ่งอื่น ๆ สามารถโหลดในพื้นหลังในขณะที่ฉันใส่รหัสผ่าน ปัจจุบันผมรอที่จะเข้าสู่ระบบแล้วด้วยตนเองเริ่มต้นด้วยการsudo systemctl start truecrypt-vaultใส่suรหัสผ่านให้ป้อนรหัสผ่านปริมาณ TC startxแล้ว แน่นอนฉันอาจมีรหัสผ่านแสดงให้ฉันในระหว่างการบูตเพื่อหลีกเลี่ยงขั้นตอนพิเศษหลังจากเข้าสู่ระบบ?
Hendy

นั่นคือจุดของฉันและของคุณจริง ๆ (เช่นในเรื่องคำถาม) - รับรหัสผ่านพร้อมท์ในระหว่างการบูต หากคุณไม่ได้ใช้การบูตกราฟิกเช่นplymouthพรอมต์รหัสผ่านใด ๆ บนคอนโซลมีแนวโน้มที่จะหายไปในบริการที่เริ่มต้นในแบบคู่ขนาน
เตอร์

โอ้ ฉันคิดว่าคุณกำลังถามว่าฉันจำเป็นต้องหยุดบริการหลังจากหรือเพื่อให้แน่ใจว่าบริการก่อนหน้านี้ทั้งหมดได้เริ่มขึ้นแล้ว ... ฉันไม่แน่ใจและพยายามตอบให้ดีที่สุดเท่าที่จะทำได้ ฉันบูตเพื่อ runlevel 3 ด้วยการเข้าสู่ระบบข้อความและstartxด้วยตนเอง ไม่มีผู้จัดการการเข้าสู่ระบบ แต่ใช่ฉันไม่จำเป็นต้องหยุดการส่งข้อความการบูตในขณะที่ฉันป้อนข้อความมิฉะนั้นมันก็จะหายไปปิดหน้าจอ
Hendy

8
ดีsystemdมีตัวแทนที่สามารถขอรหัสผ่านเพื่อดู youmight ในทิศทางนั้น
เตอร์

คำตอบ:


2
  • เขียนสคริปต์ตัวคลุมและวางไว้ ExecStart=
  • จากสคริปต์ตัวตัดคำใช้systemd-ask-password <PROMPT>อ่านรหัสผ่านจาก stdout และป้อนให้ truecrypt ไม่ว่าด้วยวิธีใด
  • อย่าลืมexectruecrypt จากตอนท้ายของสคริปต์เพื่อไม่ให้กระบวนการทุบตีพิเศษถูกแขวนไว้

สิ่งนี้จะทำให้ systemd เคียวรีรหัสผ่านทันที (ถ้าคุณเริ่ม apache โดยใช้ systemctl) หรือใช้เอเจนต์ที่เรียกว่าหนึ่งในเอเจนต์ (มีค่าเริ่มต้นซึ่งจะถามรหัสผ่านโดยใช้ wall หรือบนคอนโซลโดยตรงระหว่างการบูตระบบ) นี่คือสิ่งที่ดีที่สุดที่คุณสามารถทำได้เพื่อให้เข้ากันได้


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