Tôi phải thừa nhận rằng tôi thích máy chủ không có mật khẩu trong một số trường hợp. Một máy chủ điển hình dễ bị tổn thương đối với bất kỳ ai có quyền truy cập vật lý vào nó. Vì vậy, trong một số trường hợp, nó là thực tế để khóa nó về mặt vật lý và từ đó tin tưởng bất kỳ truy cập vật lý nào .
Các khái niệm cơ bản
Về lý thuyết, khi tôi tiếp cận một máy chủ như vậy, tôi sẽ có thể thực hiện các tác vụ quản trị mà không cần mật khẩu bằng cách nhập root
như đăng nhập và tôi không nên yêu cầu nhập mật khẩu. Điều tương tự có thể áp dụng cho tài khoản người dùng nhưng người ta sẽ không thực sự truy cập chúng. Do đó, không cần mật khẩu hệ thống để truy cập cục bộ (thỉnh thoảng).
Khi truy cập máy chủ từ xa, để quản trị hoặc cho tài khoản người dùng, tôi hy vọng sẽ luôn sử dụng khóa riêng SSH. Rất dễ dàng để thiết lập khóa SSH cho tài khoản vừa tạo và do đó không cần mật khẩu hệ thống để truy cập từ xa (thông thường).
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
Kết luận là về lý thuyết, chúng tôi sẽ không nhận bất kỳ mật khẩu hệ thống nào cho các trường hợp sử dụng như thế. Vì vậy, câu hỏi là, làm thế nào để chúng ta cấu hình hệ thống và tài khoản người dùng để làm cho nó xảy ra một cách nhất quán và an toàn.
Chi tiết truy cập địa phương
Làm thế nào để chúng tôi đảm bảo tài khoản root có thể được truy cập cục bộ mà không cần mật khẩu? Tôi không nghĩ rằng chúng ta có thể sử dụng passwd -d
vì điều đó sẽ khiến quyền truy cập root quá dễ dàng và người dùng không có khả năng có thể chuyển sang root miễn phí, điều đó là sai. Chúng tôi không thể sử dụng passwd -l
vì nó ngăn chúng tôi đăng nhập.
Lưu ý rằng truy cập cục bộ chỉ dành riêng cho truy cập bằng bàn phím cục bộ. Do đó, một giải pháp hợp lệ không được cho phép bất kỳ người dùng chuyển đổi (dù sử dụng su
hay sudo
).
Chi tiết truy cập từ xa
Cho đến gần đây, giải pháp trên sẽ hoạt động nhưng bây giờ SSH bắt đầu kiểm tra tài khoản người dùng bị khóa. Chúng tôi có lẽ không thể sử dụng passwd -d
cho cùng một lý do. Chúng ta không thể sử dụng passwd -u
vì nó chỉ phàn nàn rằng nó sẽ dẫn đến những gì passwd -d
.
Có một cách giải quyết với mật khẩu giả cho phần này.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
Cũng có thể tắt hoàn toàn việc kiểm tra tài khoản bị khóa trong SSH nhưng sẽ tốt hơn nếu giữ lại sự hỗ trợ của các tài khoản bị khóa và chỉ có thể mở khóa chúng.
Ghi chú cuối cùng
Điều tôi quan tâm là một giải pháp cho phép bạn đăng nhập vào tài khoản root cục bộ và tất cả các tài khoản bao gồm root từ xa mà không cần bất kỳ mật khẩu nào. Mặt khác, một giải pháp không được tác động đến bảo mật ngoại trừ theo những cách được mô tả rõ ràng, đặc biệt là không cho phép người dùng từ xa truy cập vào tài khoản root hoặc tài khoản của người dùng khác. Giải pháp phải đủ mạnh mẽ để không gây ra sự cố bảo mật một cách gián tiếp.
Một câu trả lời được chấp nhận và trao giải có thể hoặc không thể mô tả cấu hình chi tiết của các công cụ riêng lẻ nhưng phải chứa các điểm chính để đạt được các mục tiêu đã nêu. Lưu ý rằng điều này có lẽ không thể được giải quyết thông qua sử dụng thông thường của các công cụ như passwd
, ssh
, su
, sudo
và những thứ tương tự.
Thêm ý tưởng sau khi đọc câu trả lời đầu tiên
Chỉ cần một ý tưởng - truy cập root cục bộ có thể đạt được bằng cách bắt đầu shell gốc thay vì các quá trình đăng nhập. Nhưng vẫn cần khóa chỉ xác thực mật khẩu, không phải xác thực khóa công khai.