xác thực khóa công khai CHỈ thất bại khi sshd là daemon


33

Tôi không có manh mối về việc này xảy ra như thế nào. Bản phân phối là Science Linux 6.1 và mọi thứ được thiết lập để thực hiện xác thực thông qua khóa chung. Tuy nhiên, khi sshd đang chạy như một daemon (dịch vụ sshd bắt đầu), nó không chấp nhận các khóa công khai. (Để có được đoạn nhật ký này, tôi đã thay đổi tập lệnh sshd để thêm tùy chọn -ddd)

debug1: trying public key file /root/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys2
debug1: restore_uid: 0/0
Failed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug3: mm_answer_keyallowed: key 0x7f266e1a8840 is not allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
debug3: Wrote 64 bytes for a total of 1853
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 1

Nếu sshd được chạy trong chế độ gỡ lỗi /usr/sbin/sshd -ddd, xác thực hoạt động như một bùa mê:

debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
debug1: matching key found: file /root/.ssh/authorized_keys, line 1
Found matching RSA key: d7:3a:08:39:f7:28:dc:ea:f3:71:7c:23:92:02:02:d8
debug1: restore_uid: 0/0
debug3: mm_answer_keyallowed: key 0x7f85527ef230 is allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug3: Wrote 320 bytes for a total of 2109
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
Postponed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 0

Có ý kiến ​​gì không ?? Đã ai thấy cái gì như thê chưa?

Ghi chú:

Quyền truy cập tệp đã được kiểm tra hai lần:

# ll -d .ssh
drwx------. 2 root root 4096 Oct 14 10:05 .ssh
# ll .ssh
total 16
-rw-------. 1 root root  786 Oct 14 09:35 authorized_keys
-rw-------. 1 root root 1675 Oct 13 08:24 id_rsa
-rw-r--r--. 1 root root  393 Oct 13 08:24 id_rsa.pub
-rw-r--r--. 1 root root  448 Oct 13 12:51 known_hosts

Tôi đã được hỏi nếu sshd có thể truy cập các tập tin root trong "chế độ daemon". Câu trả lời gần nhất tôi nhận được cho câu hỏi này là:

# netstat -ntap | grep 22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      19847/sshd 
# ps -ef | grep 19847
root     19847     1  0 09:58 ?        00:00:00 /usr/sbin/sshd

Nếu sshd đang chạy với quyền root, tôi không biết làm thế nào không thể truy cập các tệp của chính nó. Selinux có thể là nguyên nhân?


1
Tập lệnh sshd init có làm gì thú vị không? (Nên là /etc/init.d/sshd?) Mà bạn không làm trên dòng lệnh? Thay vì 'dịch vụ sshd bắt đầu' hãy thử 'sh -x /etc/init.d/ssh start'.
PT

Câu trả lời:


42

Có, SELinux có khả năng là nguyên nhân. Các .sshdir có thể được dán nhãn sai. Nhìn vào /var/log/audit/audit.log. Nó nên được dán nhãn ssh_home_t. Kiểm tra với ls -laZ. Chạy restorecon -r -vv /root/.sshnếu cần.


1
Đúng, Selinux là nguyên nhân: type = AVC dir = aud (1318597097.413: 5447): avc: bị từ chối {read} cho pid = 19849 comm = "sshd" name = "ủy quyền" dev = dm-0 ino = 262398 scontext : system_r: sshd_t: s0-s0: c0.c1023 tcontext = unconfined_u: object_r: admin_home_t: s0 t class = file Nó hoạt động sau khi chạy "restorecon -r -vv /root/.ssh". Cảm ơn rất nhiều.
user666412

1
cảm ơn CẢM ƠN đã sửa lỗi dòng lệnh selinux Tôi đã cố gắng tìm kiếm từ lâu vì sao tôi có thể root với máy chủ redhat Enterprise 6.2 của mình bằng cách sử dụng xác thực khóa ssh, nhưng tôi không thể sử dụng với tư cách là người dùng không root mà không cần phải nhập mật khẩu. "Ssh -v" không cho thấy điều gì bất thường cả. Tôi đã kiểm tra và kiểm tra lại các bảo vệ tệp trên /home/example/.ssh Mãi đến khi tôi chạy "/ usr / sbin / sshd -d" và vì một số lý do hoạt động bình thường mà tôi nhận ra điều gì đó khác đang xảy ra, và đã thử một tìm kiếm google khác và tìm thấy điều này. Vì vậy, các triệu chứng là tôi có thể ssh như ro
Paul M

1
Tôi đã phải làm điều này trên toàn bộ hệ thống tập tin, tức là restorecon -r /YMMV.
Irfy

1
Tôi đã thử điều này - nhưng vẫn không hoạt động. trong nhật ký kiểm toán tôi có type=AVC msg=audit(1434642809.455:94717): avc: denied { search } for pid=27032 comm="sshd" name="/" dev=dm-2 ino=2 scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir- không chắc ý nghĩa của nó
Yehosef

1
Câu trả lời là trong name="/"- Tôi đã phải chạy restorecon -r /như @Irfy đề xuất.
Yehosef

3

Tôi gặp vấn đề tương tự. Trong trường hợp của tôi, restorecon và chcon không hoạt động.

Tôi không muốn tắt selinux. Sau rất nhiều nghiên cứu, cuối cùng tôi đã hiểu ra rằng đó là vì thư mục nhà của tôi được gắn từ nơi khác (NFS). Tôi tìm thấy báo cáo lỗi này mà bám vào tôi.

Tôi đã chạy

> getsebool use_nfs_home_dirs
use_nfs_home_dirs --> off

để xác nhận use_nfs_home_dirs đã tắt và sau đó:

sudo setsebool -P use_nfs_home_dirs 1

bật lên.

Bây giờ tôi có thể ssh vào máy của mình bằng khóa của mình và không cần nhập mật khẩu. Việc sử dụng boolean use_home_nfs_dirs là những gì nó mang lại cho tôi.


1

Để thêm vào câu trả lời của Mark Wagner, nếu bạn đang sử dụng đường dẫn thư mục nhà tùy chỉnh (nghĩa là không /home), bạn cần đảm bảo rằng bạn đã đặt bối cảnh bảo mật SELinux. Để làm như vậy, ví dụ: nếu bạn có thư mục nhà của người dùng, /myhomehãy chạy:

semanage fcontext -a -e /home /myhome
restorecon -vR /myhome

Nếu bạn đang sử dụng CentOS, bạn sẽ cần chạy ứng dụng này để có được semanage:sudo yum install policycoreutils-python
sm4rk0

0

Có vẻ như bạn sử dụng các khóa khác nhau khi kiểm tra các kết nối, 0x7f266e1a8840 so với 0x7f85527ef230. Hãy thử kết nối bằng cách sử dụng 'ssh -v example.com' để sshd chạy dưới dạng daemon và trong chế độ gỡ lỗi và tìm các khóa được sử dụng bởi ssh xung quanh chuỗi "Cung cấp khóa công khai RSA".


Vâng, đã có id_rsa và id_dsa. Khóa DSA không còn nữa và tôi sẽ làm lại bài kiểm tra.
user666412

Giá trị được đề cập trong debug3: mm_answer_keyallowed: key 0xFFFFFFFFFFsẽ thay đổi mỗi khi sshd nhận được kết nối mới. Để xác nhận điều này, hãy tìm một máy chủ nơi SSH hoạt động, khởi động sshd LOGLEVEL để gỡ lỗi3, khởi động lại sshd, chạy tail -f /var/log/secure |grep mm_answer_keyallowedvà sau đó đăng nhập một vài lần, đợi vài giây (hoặc vài phút) giữa mỗi kết nối. Bạn sẽ thấy rằng giá trị thay đổi mỗi lần. Và thực sự nó trông giống như một đối trọng với tôi.
Stefan Lasiewski
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.