SSH với ủy quyền cho một hệ thống Ubuntu với homedir được mã hóa?


38

Gần đây tôi đã thiết lập một máy chủ mới với Ubuntu karmic 9.10 và khi tôi tạo thư mục chính của mình, tôi đã chọn để mã hóa nó. Bây giờ, sau khi tải tệp ủy quyền của tôi vào ~ / .ssh, nó không được nhận ra vì thư mục chính của tôi không được giải mã cho đến khi tôi đăng nhập. Có cách nào để khóa SSH hoạt động với các thư mục nhà được mã hóa trong Ubuntu không?


Đề xuất thẻ tốt hơn được hoan nghênh, không thể tìm thấy kết quả phù hợp thực sự tốt trong các thẻ được đề xuất.
Josh

1
Tôi nghĩ rằng đó là tại chỗ trên thực tế. có một ubuntuthẻ nhưng tôi không nghĩ vấn đề này là dành riêng cho bất kỳ HĐH cụ thể nào.
quack quixote

Một triệu chứng của vấn đề này đối với tôi trong Ubuntu 11.10 là nỗ lực đầu tiên để ssh vào máy là yêu cầu xác thực mật khẩu (vì authorized_keyschưa thể truy cập được). Nếu tôi khởi chạy một kết nối ssh khác, xác thực khóa sẽ hoạt động.
mindless.panda

Câu trả lời:


39

Thay đổi dòng này trong tệp sshd_config của bạn:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

Và sau đó di chuyển tệp ủy quyền của bạn sang / etc / ssh / your-username / ủy quyền

Bài viết này tài liệu một cách khác để giải quyết điều này.


1
Tôi nghĩ giải pháp đầu tiên nghe có vẻ hoàn hảo nhưng nó không hiệu quả với tôi. Không chắc chắn lý do tại sao. Nhưng bài viết bạn liên kết để làm việc tuyệt vời. Cảm ơn!
Josh

3
Josh - người dùng mục tiêu có phải là chủ sở hữu của các tệp đó và quyền 600 (700 cho thư mục) không?
NVRAM

1
Xem liên kết này để biết hướng dẫn đầy đủ: Khóa SSH trên Ubuntu . Cuộn xuống phần xử lý sự cố.
jjeaton

8

Giải pháp này được lấy cảm hứng từ bài viết này . IMHO tốt hơn nhiều so với sửa đổi / etc / ssh / sshd_config vì nó không yêu cầu quyền truy cập root.

# 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
Bạn có thể cung cấp một tuyên bố tóm tắt về những gì thực sự làm điều này?
mindless.panda

Tôi đã thực hiện một chỉnh sửa để giải thích những gì sẽ xảy ra: giúp bạn tiết kiệm khóa công khai của bạn (s) mà bạn muốn truy cập vào máy để authorized_keys/home/**.ecryptfs**/$USERmà không cần mã hóa và liên kết đến nó từ bạn mã hóa nhà cũng như nhà không được mã hóa của bạn. Cái mới .profiletrong ngôi nhà không được mã hóa của bạn sẽ gắn thư mục nhà được mã hóa của bạn, "cd" vào đó và lấy nguồn thực của bạn .profile.
LiveWireBT

Hoạt động như dự định trên bản cài đặt 16.04 mới. Một số lưu ý: ngôi nhà không được mã hóa không thể ghi được (điều này hợp lý, bạn không muốn người dùng lật đổ mọi thứ bằng cách vô tình lưu trữ dữ liệu ở đó) vì vậy tạm thời thay đổi quyền. Ngoài ra, người ta phải thực hiện tất cả những điều này từ thiết bị đầu cuối, đăng xuất khỏi GUI và lightdm hoặc bất kỳ DM nào bạn đang sử dụng đều dừng lại. ecryptfs-mount-privatehỏi mật khẩu người dùng mỗi lần sau khi đăng nhập thành công qua khóa chung trừ khi bạn đăng nhập vào GUI. Chỉnh sửa của tôi thay thế một vài tiếng vang bằng một tài liệu ở đây, nó ít lặp đi lặp lại để gõ, đừng nhầm lẫn bởi điều đó.
LiveWireBT

2

Tôi chỉ dành một chút thời gian để loay hoay với điều này, và câu trả lời là về cơ bản là không thể. Nó có thể thiết lập mật mã đăng nhập public-key-xác thực thông qua ssh, vì vậy bạn không cần phải nhập mật khẩu của bạn để đăng nhập , nhưng điều đó không giúp bạn có được ở bất cứ đâu, vì thư mục home của bạn vẫn được mã hóa.

Một thực tế đơn giản là thư mục chính được mã hóa của bạn được mã hóa bằng mật khẩu *, vì vậy cách duy nhất để giải mã nó là với mật khẩu đó.

Và nếu bạn nghĩ rằng về mặt lý thuyết thì có thể sử dụng khóa ssh của bạn để giải mã cụm mật khẩu gắn kết khi đăng nhập, điều đó sẽ không hoạt động vì khóa riêng của bạn không bao giờ được gửi đến máy chủ.

Về cơ bản, nếu bạn muốn mã hóa, bạn phải sử dụng mật khẩu. Các thư mục nhà được mã hóa không tương thích với thông tin đăng nhập vân tay vì lý do tương tự.


* Tôi biết nó phức tạp hơn một mật khẩu, nhưng bây giờ hãy giữ nó đơn giản.


Chà, câu trả lời của djhowell đã hoạt động hoàn hảo nên có lẽ thư mục nhà của tôi được mã hóa bằng một khóa mà HĐH có và có thể sử dụng để giải mã nó. Ngoài ra, khi SSH vào, sshd không biết cách giải mã chỉ thị nhà của tôi, vì vậy điều đó không giải thích tại sao nó hoạt động với xác thực mật khẩu.
Josh

Đợi đã, vậy khi bạn đăng nhập qua ssh mà không cần nhập bất kỳ mật khẩu nào, thư mục chính được mã hóa của bạn có thực sự được gắn kết không?
Ryan C. Thompson

Vâng, nó làm. Và bị bỏ rơi khi tôi đăng xuất.
Josh

Chà, thật lạ. Tôi nhận được hành vi mà tôi mô tả trong câu trả lời của tôi. Thư mục riêng của tôi chỉ được gắn nếu thông tin đăng nhập của tôi liên quan đến mật khẩu (cụ thể là mật khẩu đăng nhập của tôi). Tôi tự hỏi những gì bạn đã làm khác nhau để làm cho nó hoạt động với các khóa công khai.
Ryan C. Thompson

@Ryan Thompson bạn đang sử dụng Ubuntu 9.10?
Josh

1

Nếu bạn không muốn sửa đổi thiết lập mặc định (Tôi không thích, tôi thích các tệp của mình là nơi tôi mong đợi) thì bạn có thể muốn xem bài đăng của tôi về cách thực hiện điều đó:

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

Nói ngắn gọn. Bạn đặt các khóa của mình trong phiên bản được mã hóa của người dùng ~/.sshvà liên kết phiên bản được mã hóa ~/.sshvới nhau. Bằng cách này, nó luôn luôn ở đó.

Đối với những người lười biếng như tôi, đây là một kịch bản để làm điều đó cho bạn. Chỉ cần chạy nó như người dùng bình thường. Không có quyền truy cập hoặc quyền cần thiết và không cần thay đổi cấu hình máy chủ. Cài đặt người dùng thuần túy bình thường.

#!/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

Bạn có thể sử dụng khóa chung an toàn hơn để đăng nhập và sau đó thực hiện các thao tác sau để gắn thư mục của mình sau khi nhập mật khẩu:

ecryptfs-mount-private

Đọc ~/README.txttệp sau khi đăng nhập qua SSH, bạn sẽ thấy rằng bạn không có tệp của mình vì thư mục được mã hóa không được gắn kết.

Bạn không nên sử dụng khóa công khai không mật khẩu để đăng nhập. Nhìn vào ssh-agent để biết cách tốt hơ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.