Làm cách nào để Khóa chia sẻ .ssh / ủy quyền_key và sudo hoạt động cùng nhau?


15

Tôi đã thiết lập .ssh / ủy quyền Tôi cố gắng thực hiện một lệnh sudo, một cái gì đó đơn giản như:

$ sudo cd /root

nó sẽ nhắc tôi nhập mật khẩu mà tôi nhập, nhưng nó không hoạt động (tôi đang sử dụng mật khẩu khóa riêng tôi đã đặt)

Ngoài ra, tôi đã vô hiệu hóa mật khẩu người dùng bằng cách sử dụng

$ passwd -l user

Tôi đang thiếu gì?

Đâu đó những nhận xét ban đầu của tôi đang bị hiểu lầm ...

Tôi đang cố gắng làm cứng hệ thống của mình ... mục tiêu cuối cùng là sử dụng khóa pub / private để đăng nhập so với xác thực mật khẩu đơn giản. Tôi đã tìm ra cách thiết lập tất cả thông qua tệp ủy quyền.

Ngoài ra, cuối cùng tôi sẽ ngăn đăng nhập máy chủ thông qua tài khoản root. Nhưng trước khi tôi làm điều đó, tôi cần sudo để làm việc cho người dùng thứ hai (người dùng mà tôi sẽ đăng nhập vào hệ thống mọi lúc).

Đối với người dùng thứ hai này, tôi muốn ngăn đăng nhập mật khẩu thông thường và chỉ bắt buộc đăng nhập khóa pub / private, nếu tôi không khóa người dùng thông qua "người dùng passwd -l ... thì nếu tôi không sử dụng khóa, tôi vẫn có thể vào máy chủ bằng mật khẩu thông thường

Nhưng quan trọng hơn tôi cần để sudo hoạt động với thiết lập khóa pub / private với người dùng bị vô hiệu hóa mật khẩu.


Chỉnh sửa: OK, tôi nghĩ rằng tôi đã có nó (giải pháp):

1) Tôi đã điều chỉnh / etc / ssh / sshd_config và đặt PasswordAuthentication no Điều này sẽ ngăn đăng nhập mật khẩu ssh (đảm bảo có thiết lập khóa công khai / riêng tư trước khi thực hiện việc này

2) Tôi đã điều chỉnh danh sách sudoers visudovà thêm

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3) root là tài khoản người dùng duy nhất sẽ có mật khẩu, tôi đang thử nghiệm với hai tài khoản người dùng "dimas" và "sherry" không có mật khẩu được đặt (mật khẩu trống, passwd -d user)

Những điều trên về cơ bản ngăn chặn mọi người đăng nhập vào hệ thống bằng mật khẩu (khóa công khai / riêng tư phải được thiết lập).

Ngoài ra, người dùng trong danh sách sudoers có khả năng quản trị viên. Họ cũng có thể suđến các tài khoản khác nhau. Vì vậy, về cơ bản "dimas" có thể sudo su sherry, tuy nhiên "dimas KHÔNG thể làm được su sherry. Tương tự như vậy, bất kỳ người dùng nào KHÔNG có trong danh sách sudoers KHÔNG thể làm su userhoặc sudo su user.

CHÚ THÍCH Các công trình trên nhưng được coi là bảo mật kém. Bất kỳ tập lệnh nào có thể truy cập mã dưới dạng người dùng "dimas" hoặc "sherry" sẽ có thể thực thi sudo để có quyền truy cập root. Một lỗi trong ssh cho phép người dùng từ xa đăng nhập bất chấp cài đặt, thực thi mã từ xa trong một cái gì đó như Firefox hoặc bất kỳ lỗ hổng nào khác cho phép mã không mong muốn chạy vì giờ đây người dùng sẽ có thể chạy bằng root. Sudo phải luôn yêu cầu mật khẩu hoặc bạn cũng có thể đăng nhập bằng root thay vì một số người dùng khác.

Câu trả lời:


10

sshsudokhông có gì để làm với nhau. Thiết lập một sshphương thức xác thực sẽ không làm gì cả sudo. sudosẽ không hiểu sshmật khẩu.

passwd -lđược dự định khóa tài khoản của người dùng để anh ta không còn có thể xác thực bằng mật khẩu. Điều đó hoàn toàn trái ngược với những gì bạn muốn, đó là cho phép người dùng xác thực mà không cần mật khẩu.

Tôi nghĩ những gì bạn muốn là NOPASSWDtùy chọn trong tập tin của bạnsudoers .

(PS, không có lý do gì để chạy một cdlệnh với sudo. cdKhông truyền đến các tiến trình cha, vì vậy ngay khi sudothoát ra, bạn quay lại nơi bạn đã bắt đầu.)

Chỉnh sửa: Bạn cứ nói rằng bạn muốn khóa mật khẩu tài khoản và muốn sudo hiểu khóa công khai / riêng tư. Xin lỗi, sudo sẽ không sử dụng các phím ssh. Nó không phải là ssh. Nếu bạn không muốn người dùng có thể đăng nhập bằng mật khẩu của họ, tôi nghĩ câu trả lời là vô hiệu hóa xác thực mật khẩu ssh , không khóa tài khoản. Sau đó, bạn có thể giữ lại mật khẩu cho người dùng mà họ có thể sử dụng để sudo sau khi họ đăng nhập thông qua ssh ủy quyền.


ok, nhưng thực tế là người dùng không có mật khẩu thông qua: người dùng passwd -l ... khiến lệnh sudo không hoạt động?
khoảng cách

@farinspace Có, tôi hiểu câu hỏi tốt hơn và đã mở rộng đáng kể nhận xét của tôi. passwd -lxóa mật khẩu theo nghĩa là tài khoản bị KHÓA - nghĩa là không có mật khẩu nào hoạt động. Bạn muốn tắt xác thực mật khẩu trong sudo.
coneslayer

Logic này như thế nào: tắt mật khẩu trong tệp sudoers vẫn sẽ được bảo mật, vì hệ thống được tăng cường thông qua thông tin đăng nhập khóa pub / private ... và một lần nữa chỉ quản trị viên mới có thể thêm người dùng vào danh sách sudoers
farinspace

Khi sử dụng khóa riêng là thông thường để đặt mật khẩu cho nó hoặc nó đủ an toàn để đơn giản là không đặt và bỏ qua bất kỳ mục nhập mật khẩu nào khi đăng nhập máy chủ
farinspace

4
@coneslayer trả lời này không chính xác 100%. Như bạn có thể thấy bên dưới, sudo có thể được cấu hình để tôn trọng xác thực ssh.
Andre de Miranda

18

Những gì bạn muốn làm là có thể nhưng nó sẽ đòi hỏi một số kinh nghiệm vì bạn sẽ phải biên dịch một mô-đun PAM gọi là pam-ssh-agent-auth .

Quá trình này rất đơn giản:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

Chỉnh sửa cấu hình sudo:

$ sudo visudo

Thêm những điều sau:

Defaults env_keep += SSH_AUTH_SOCK

Tiếp tục bằng cách thay đổi cài đặt sudo PAM:

$ sudo vi /etc/pam.d/sudo

Thêm (ngay phía trên dòng @incoide):

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account


4
Đây phải là câu trả lời được chấp nhận
Christopher Monsanto

1
Các hướng dẫn này (đặc biệt là /etc/pam.d/sudohướng dẫn) đã hết hạn đối với các phiên bản Ubuntu hiện tại. Tôi đã cung cấp hướng dẫn cập nhật trong câu trả lời của tôi.
Chris Pick

4

Câu trả lời của Andre de Miranda cung cấp một giải pháp hay bằng cách sử dụng pam_ssh_agent_auth , nhưng các phần đã lỗi thời. Đặc biệt là các /etc/pam.d/sudohướng dẫn khi sử dụng nhiều phiên bản Linux hiện tại.

Nếu bạn đang chạy Ubuntu 12.04 chính xác, tôi thực sự đã đơn giản hóa quy trình bằng cách cung cấp bản dựng pam_ssh_agent_auth từ ppa: ppa: cpick / pam-ssh-agent-auth .

Bạn có thể cài đặt gói bằng cách chạy:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

Sau khi cài đặt, nếu bạn muốn sử dụng mô-đun PAM này với sudo, bạn sẽ phải định cấu hình cài đặt sudo và cấu hình PAM, trong Ubuntu 12.04 chính xác, bạn có thể làm điều đó bằng cách tạo hai tệp sau:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

Nếu bạn đang sử dụng đầu bếp, quy trình trên có thể được tự động hóa với sách dạy nấu ăn của tôi, được tìm thấy tại một trong hai địa điểm sau:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / cookbooks / pam-ssh-agent-auth .

Thư mục của sách nấu ăn fileschứa các tệp /etc/pam.d/sudo/etc/sudoers.d/pam-ssh-agent-authcác tệp được mô tả ở trên hoạt động với Ubuntu 12.04 chính xác và phải là điểm khởi đầu hữu ích khi sử dụng các phiên bản / bản phát hành khác.


-1

Cách duy nhất tôi biết để bỏ qua việc nhập mật khẩu là vô hiệu hóa nó trong sudoerstệp của bạn .

Một cái gì đó như thế này sẽ cung cấp rootvà tất cả các thành viên truy cập wheel đầy đủ không có mật khẩu:

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

Điều này là hoàn toàn không nên , tuy nhiên. Nếu bạn có một lệnh cụ thể để máy chủ này thực thi, hãy cấp cho họ quyền truy cập vào lệnh đó. Hoặc tốt hơn nữa, tìm một cách khác để thực hiện những gì bạn muốn làm mà không yêu cầu đục lỗ bảo mật.


Tôi không phiền khi sử dụng mật khẩu, vấn đề có vẻ là sau khi tôi vô hiệu hóa mật khẩu người dùng thông qua: passwd -l user ... Tôi vẫn có thể đăng nhập vào hệ thống thông qua khóa pub / private (khóa riêng có mật khẩu an toàn) , khi tôi thực hiện một sudo, nó sẽ hỏi mật khẩu nhưng đây không phải là mật khẩu từ khóa riêng, mật khẩu này được đặt ở đâu nếu tôi đã vô hiệu hóa nó cho người dùng (tôi muốn thử duy trì mật khẩu trên ssystem và trên khóa riêng)
farinspace

"mật khẩu này được đặt ở đâu nếu ive vô hiệu hóa nó cho người dùng?" Hư không. Không có mật khẩu mà bạn có thể nhập vào sẽ hoạt động, vì bạn đã khóa tài khoản.
coneslayer

Bạn sẽ phải kích hoạt lại tài khoản trên hệ thống từ xa và sau đó đặt mật khẩu. Dù bằng cách nào, bạn chắc chắn nên duy trì mật khẩu trên cả hai máy. Nếu không vì lý do nào khác ngoài đăng nhập cục bộ trong trường hợp có lỗi.
Jack M.
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.