SSH ที่ได้รับอนุญาตคีย์ไปยังระบบ Ubuntu ที่มี homedir ที่เข้ารหัสแล้วหรือไม่


38

ฉันเพิ่งตั้งค่าเซิร์ฟเวอร์ใหม่ด้วย Ubuntu karmic 9.10 และเมื่อฉันสร้างไดเรกทอรีบ้านของฉันฉันเลือกที่จะทำให้มันเข้ารหัส ตอนนี้หลังจากโหลดไฟล์ authorized_keys ของฉันไปที่ ~ / .ssh มันไม่ได้รับการยอมรับเพราะไดเรกทอรีบ้านของฉันไม่ได้รับการถอดรหัสจนกระทั่งหลังจากที่ฉันเข้าสู่ระบบมีวิธีที่จะทำให้คีย์ SSH ทำงานกับไดเรกทอรีบ้านที่เข้ารหัสภายใต้ Ubuntu หรือไม่


ยินดีรับคำแนะนำแท็กที่ดีกว่าไม่พบการจับคู่ที่ดีจริงๆในแท็กที่แนะนำ
Josh

1
ฉันคิดว่าสิ่งเหล่านั้นเป็นจุดที่จริง มีubuntuแท็ก แต่ฉันไม่คิดว่าปัญหานี้เฉพาะกับระบบปฏิบัติการใด ๆ โดยเฉพาะ
ต้มตุ๋น Quixote

อาการของปัญหานี้สำหรับฉันใน Ubuntu 11.10 คือความพยายามครั้งแรกในการ ssh เข้าสู่เครื่องคือต้องมีการพิสูจน์ตัวตนด้วยรหัสผ่าน (เนื่องจากauthorized_keysยังไม่สามารถเข้าถึงได้) หากฉันเปิดการเชื่อมต่อ ssh อื่นการตรวจสอบความถูกต้องของคีย์จะใช้งานได้
mindless.panda

คำตอบ:


39

เปลี่ยนบรรทัดนี้ในไฟล์ sshd_config ของคุณ:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

จากนั้นย้ายไฟล์ authorized_keys ของคุณไปที่ / etc / ssh / your-username / authorized_keys

โพสต์เอกสารนี้เป็นอีกวิธีหนึ่งในการแก้ไขปัญหานี้


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

3
Josh - ผู้ใช้เป้าหมายเป็นเจ้าของไฟล์เหล่านั้นและได้รับอนุญาต 600 (700 สำหรับ dir) หรือไม่
NVRAM

1
ดูที่ลิงค์นี้สำหรับคำแนะนำแบบเต็ม: คีย์ SSH บน Ubuntu เลื่อนลงไปที่ส่วนการแก้ไขปัญหา
jjeaton

8

โซลูชันนี้ได้รับแรงบันดาลใจจากโพสต์นี้ IMHO เป็นการดีกว่าการแก้ไข / etc / ssh / sshd_config ของคุณเนื่องจากไม่ต้องการการเข้าถึงรูทเลย

# Make your public key accessible
mkdir -m 700 /home/.ecryptfs/$USER/.ssh
echo $YOUR_PUBLIC_KEY > /home/.ecryptfs/$USER/.ssh/authorized_keys
ln -s /home/.ecryptfs/$USER/.ssh/authorized_keys ~/.ssh/authorized_keys
ecryptfs-umount-private
chmod 700 $HOME
mkdir -m 700 ~/.ssh
ln -s /home/.ecryptfs/$USER/.ssh/authorized_keys ~/.ssh/authorized_keys

# Make it auto-mount with first login.
# Note: it can cause problems with automated login.
echo /usr/bin/ecryptfs-mount-private > ~/.profile
echo cd >> ~/.profile
echo source .profile >> ~/.profile
ecryptfs-mount-private

3
คุณสามารถให้คำแถลงสรุปเกี่ยวกับสิ่งที่เกิดขึ้นจริงได้ไหม?
mindless.panda

ฉันทำแก้ไขเพื่ออธิบายสิ่งที่เกิดขึ้น: คุณประหยัดกุญแจสาธารณะ (s) ที่คุณต้องการในการเข้าถึงเครื่องเพื่อauthorized_keysใน/home/**.ecryptfs**/$USERโดยไม่ต้องเข้ารหัสและการเชื่อมโยงไปจากคุณเข้ารหัสบ้านเช่นเดียวกับบ้านของคุณที่ไม่ได้เข้ารหัส ใหม่.profileในบ้านที่ไม่ได้เข้ารหัสของคุณควรติดไดเรกทอรีบ้านของคุณเข้ารหัส "ซีดี" .profileเป็นมันและแหล่งที่มาที่แท้จริงของคุณ
LiveWireBT

ทำงานได้ตามที่ต้องการในการติดตั้ง 16.04 ใหม่ ข้อสังเกตบางประการ: บ้านที่ไม่ได้เข้ารหัสไม่สามารถเขียนได้ (ซึ่งเหมาะสมคุณไม่ต้องการให้ผู้ใช้ล้มล้างทุกอย่างโดยบังเอิญเก็บข้อมูลไว้ที่นั่น) ดังนั้นเปลี่ยนสิทธิ์ชั่วคราว นอกจากนี้ยังมีสิ่งที่ต้องทำทั้งหมดนี้จากเทอร์มินัลออกจากระบบ GUI และ lightdm หรือที่คุณเคยใช้ DM หยุด ecryptfs-mount-privateขอรหัสผ่านผู้ใช้ทุกครั้งหลังจากล็อกอินสำเร็จผ่านกุญแจสาธารณะเว้นแต่คุณจะลงชื่อเข้าใช้ GUI การแก้ไขของฉันแทนที่ echos สองสามตัวด้วยเอกสารที่นี่มันซ้ำน้อยกว่าในการพิมพ์ไม่ต้องสับสน
LiveWireBT

2

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

ความจริงง่ายๆคือไดเรกทอรีบ้านที่เข้ารหัสของคุณถูกเข้ารหัสด้วยรหัสผ่าน * ดังนั้นวิธีเดียวที่จะถอดรหัสมันคือรหัสผ่านนั้น

และถ้าคุณคิดว่าในทางทฤษฎีแล้วมันเป็นไปได้ที่จะใช้กุญแจ ssh ของคุณในการถอดรหัสข้อความรหัสผ่านในการเข้าสู่ระบบนั่นจะไม่ทำงานเพราะกุญแจส่วนตัวของคุณไม่เคยถูกส่งไปยังเซิร์ฟเวอร์เลย

ดังนั้นโดยทั่วไปถ้าคุณต้องการเข้ารหัสคุณต้องใช้รหัสผ่าน โฮมไดเรกทอรีที่เข้ารหัสไม่เข้ากันกับการเข้าสู่ระบบด้วยลายนิ้วมือด้วยเหตุผลเดียวกัน


* ฉันรู้ว่ามันซับซ้อนกว่ารหัสผ่านเดียว แต่ตอนนี้ขอให้ง่ายขึ้น


คำตอบของ djhowell นั้นทำงานได้อย่างสมบูรณ์ดังนั้นสันนิษฐานว่าโฮมไดเร็กตอรี่ของฉันถูกเข้ารหัสด้วยกุญแจที่ระบบปฏิบัติการมีและสามารถใช้ถอดรหัสมันได้ นอกจากนี้เมื่อ SSHing เข้า sshd ไม่ทราบวิธีถอดรหัส direct home ของฉันดังนั้นจึงไม่ได้อธิบายว่าทำไมมันถึงทำงานกับการตรวจสอบรหัสผ่าน
Josh

รอดังนั้นเมื่อคุณเข้าสู่ระบบผ่าน ssh โดยไม่ต้องพิมพ์รหัสผ่านใด ๆ ไดเรกทอรีบ้านที่เข้ารหัสของคุณจะถูกเมานท์จริงหรือ
Ryan Thompson

ใช่แล้ว. และติดตั้งเมื่อฉันออกจากระบบ
Josh

นั่นมันแปลกนะ ฉันได้รับพฤติกรรมที่ฉันอธิบายในคำตอบของฉัน dir ส่วนตัวของฉันจะได้รับการติดตั้งเฉพาะเมื่อเข้าสู่ระบบของฉันเกี่ยวข้องกับรหัสผ่าน (โดยเฉพาะรหัสผ่านเข้าสู่ระบบของฉัน) ฉันสงสัยว่าคุณทำอะไรแตกต่างกันเพื่อให้มันทำงานกับกุญแจสาธารณะ
Ryan Thompson

@Ryan Thompson คุณใช้ Ubuntu 9.10 หรือไม่
Josh

1

หากคุณไม่ชอบการแก้ไขการตั้งค่าเริ่มต้น (ฉันไม่ชอบฉันต้องการให้ไฟล์ของฉันเป็นที่ที่ฉันคาดหวังไว้) จากนั้นคุณอาจต้องการดูโพสต์ของฉันเกี่ยวกับวิธีการดังกล่าว:

http://www.enetworkservices.net/wordpress/ssh-public-keys-with-encrypted-home-directory.html

ในระยะสั้น คุณวางกุญแจของคุณในเวอร์ชันที่เข้ารหัสของผู้ใช้ของคุณ~/.sshและ symlink เวอร์ชันที่เข้ารหัสของ~/.sshอีกอัน วิธีนี้มันอยู่ที่นั่นเสมอ

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

#!/bin/bash
#
# Encrypted Home DIR SSH Key fix.
# Requires modification to sshd_config
#  AuthorizedKeys /etc/ssh/authorized_keys/%u/authorized_keys
# sudo mkdir /etc/ssh/authorized_keys -m 777
# for existing users run from home directory when login.
# for new users modify /etc/skel to include .bashrc to call script.
#
# Author: Benjamin Davis <bdavis@enetworkservices.net>

# Check if directory exists.
if [ ! -d "/etc/ssh/authorized_keys/$LOGNAME" ]
then
    # Make directory with restricted permissions.
    echo "Creating user ssh directory."
    mkdir /etc/ssh/authorized_keys/$LOGNAME -m 700
fi

# Check real users home .ssh folder
if [ -d "/home/$LOGNAME/.ssh" ]
then
    # Check if dir is symlink
    if [ ! -h /home/$LOGNAME/.ssh ]
    then
        echo "Moving configs."
        mv /home/$LOGNAME/.ssh/. /etc/ssh/authorized_keys/$LOGNAME/.
        rm -rf /home/$LOGNAME/.ssh/
        ln -s -T /etc/ssh/authorized_keys/$LOGNAME /home/$LOGNAME/.ssh
        clear
    fi
else
    # Does not exist so link it.
    if [[ $EUID -ne 0 ]]
    then
        echo "User ssh config folder does not exist. Creating."
        mkdir /home/$LOGNAME/.ssh -m 700
        ln -s -T /etc/ssh/authorized_keys/$LOGNAME /home/$LOGNAME/.ssh
    fi
fi

0

คุณสามารถใช้กุญแจสาธารณะที่ปลอดภัยยิ่งขึ้นเพื่อเข้าสู่ระบบจากนั้นดำเนินการดังต่อไปนี้เพื่อติดตั้งไดเรกทอรีของคุณหลังจากพิมพ์รหัสผ่านของคุณ:

ecryptfs-mount-private

อ่าน~/README.txtไฟล์หลังจากเข้าสู่ระบบผ่าน SSH คุณจะพบว่าคุณไม่มีไฟล์เพราะไดเรกทอรีที่เข้ารหัสไม่ได้ถูกเมาท์

คุณไม่ควรใช้กุญแจสาธารณะที่ไม่มีรหัสผ่านเพื่อเข้าสู่ระบบ ดู ssh-agent สำหรับวิธีที่ดีกว่า

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