Wednesday, October 16, 2024

Tạo người dùng và sshkey trên Proxmox

-

1. Tổng quan.

Tạo người dùng mới là bước đầu tiên trong việc thiết lập quyền truy cập hệ thống. Người dùng có thể được tạo với các đặc quyền khác nhau tùy theo nhu cầu sử dụng.

Khi cấu hình truy cập từ xa qua SSH (Secure Shell), việc sử dụng SSH key thay vì mật khẩu là một trong những biện pháp bảo mật hiệu quả nhất. SSH key là cặp khóa mã hóa (public key và private key) giúp xác thực người dùng một cách an toàn mà không cần sử dụng mật khẩu thông thường.

  • Lợi ích của SSH key:
    • Bảo mật cao hơn: Khó khăn trong việc tấn công brute force so với việc dùng mật khẩu.
    • Tiện lợi: Có thể cấu hình để không cần nhập mật khẩu mỗi lần đăng nhập.
    • Tự động hóa: SSH key rất hữu ích trong việc tự động hóa các tác vụ, như triển khai cod, đồng bộ dữ liệu, khi không cần sự can thiệp của con người để nhập mật khẩu.

2. Tạo user mới có quyền sudo trên Proxmox.

Tạo user mới.

Trên tất cả các node Proxmox, bạn cần tạo một user mới và cấp quyền sudo cho user này.

Đăng nhập vào node Proxmox và tạo user mới bằng lệnh adduser <username>.

shell> adduser hoanghd
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_TERMINAL = "iTerm2",
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
Adding user `hoanghd' ...
Adding new group `hoanghd' (1000) ...
Adding new user `hoanghd' (1000) with group `hoanghd (1000)' ...
Creating home directory `/home/hoanghd' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for hoanghd
Enter the new value, or press ENTER for the default
	Full Name []: Ha Dang Hoang
	Room Number []:
	Work Phone []:
	Home Phone []:
	Other []:
Is the information correct? [Y/n] y
Adding new user `hoanghd' to supplemental / extra groups `users' ...
Adding user `hoanghd' to group `users' ...

Thêm quyền sudo cho username bằng lệnh usermod -aG sudo <username>.

usermod -aG sudo hoanghd

Cài đặt sudo.

Với Proxmox bạn sẽ không có sẵn sudo như Ubuntu, hãy cài đặt nó bằng lệnh dưới.

apt update
apt install sudo -y

Xác nhận lại việc tạo user mới có quyền sudo trên Proxmox.

Khi bạn sử dụng lệnh sudo ls -al /root, bạn đang yêu cầu liệt kê danh sách các file và thư mục trong thư mục /root và bởi vì thư mục này chỉ có quyền truy cập bởi user root, bạn cần có quyền sudo để thực hiện lệnh này.

shell> sudo ls -al /root
[sudo] password for hoanghd:
total 32
drwx------  3 root root 4096 Oct 14 17:46 .
drwxr-xr-x 18 root root 4096 Jun 23 10:45 ..
-rw-------  1 root root  609 Oct 14 17:47 .bash_history
-rw-r--r--  1 root root  571 Apr 11  2021 .bashrc
-rw-r--r--  1 root root   31 Jun 23 10:45 .forward
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
-rw-------  1 root root 1024 Oct 14 17:27 .rnd
drwx------  2 root root 4096 Jun 23 10:46 .ssh
-rw-r--r--  1 root root    0 Oct 14 17:46 .sudo_as_admin_successful

Quá trình diễn ra như sau:

  • Bạn nhập lệnh: sudo ls -al /root
    • sudo: Cho phép bạn thực hiện lệnh với quyền superuser (root).
    • ls -al: Liệt kê tất cả các file và thư mục (bao gồm cả các file ẩn) trong thư mục /root với các chi tiết về quyền truy cập, kích thước, thời gian sửa đổi và chủ sở hữu.
  • Yêu cầu nhập mật khẩu: Hệ thống sẽ yêu cầu bạn nhập mật khẩu của user của bạn (ở đây là user hoanghd) để xác nhận quyền sudo. Bạn sẽ không cần nhập mật khẩu của root mà chỉ cần nhập mật khẩu của chính user của mình.
  • Kết quả: Sau khi xác thực thành công, bạn sẽ nhận được danh sách các file và thư mục trong /root, bao gồm cả các file ẩn như bạn đã thấy trong kết quả ở trên.

3. Tạo SSHKkey.

Hãy sử dụng lệnh ssh-keygen -t rsa -b 4096 tạo một cặp khóa SSH gồm private key (khóa riêng) và public key (khóa công khai).

shell> ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoanghd/.ssh/id_rsa):
Created directory '/home/hoanghd/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hoanghd/.ssh/id_rsa
Your public key has been saved in /home/hoanghd/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:YV2NP93ZnilO6AHKzPsj4xdK+F+uFY2sTS9aWC1kICU hoanghd@node1
The key's randomart image is:
+---[RSA 4096]----+
|       E.o  .o   |
|        o.... .  |
|        o .o . .+|
|       . o+ + o.+|
|      = S .B.o oo|
|     . * .*o+o o.|
|      o ooo*+..  |
|       * o*...   |
|      ..*=o.     |
+----[SHA256]-----+
  • Trong đó:
    • Private key:
      • Đây là khóa bí mật và phải được bảo vệ an toàn, không nên chia sẻ với bất kỳ ai. Private key được lưu trữ ở file ~/.ssh/id_rsa.
      • Khóa này được sử dụng để xác thực bạn với các hệ thống khác, cho phép bạn đăng nhập mà không cần nhập mật khẩu nếu bạn đã cấu hình đúng public key trên máy chủ từ xa.
    • Public key:
      • Đây là khóa công khai, bạn có thể chia sẻ khóa này với các hệ thống mà bạn muốn truy cập. Public key được lưu trữ ở file ~/.ssh/id_rsa.pub.
      • Khi bạn đăng nhập vào một máy chủ từ xa, máy chủ sẽ so sánh public key đã được cài đặt trên hệ thống với khóa public mà bạn cung cấp. Nếu nó khớp, nó sẽ yêu cầu bạn chứng minh rằng bạn sở hữu private key tương ứng.
  • -t rsa: Xác định loại thuật toán sử dụng để tạo khóa SSH, ở đây là RSA (Rivest-Shamir-Adleman). RSA là một trong những thuật toán mã hóa phổ biến nhất.
  • -b 4096: Xác định kích thước của khóa. Ở đây, kích thước của khóa là 4096 bits. Kích thước càng lớn thì khóa càng mạnh (về mặt bảo mật), nhưng sẽ yêu cầu nhiều tài nguyên tính toán hơn khi sử dụng.
  • Phần nhập passphrase:
    • Khi bạn chạy lệnh ssh-keygen, hệ thống sẽ hỏi Enter passphrase (empty for no passphrase):. Đây là tùy chọn để thêm một lớp bảo mật bổ sung cho private key.
      • Nếu bạn nhập passphrase, bạn sẽ cần nhập passphrase này mỗi khi sử dụng private key để xác thực. Điều này bảo vệ private key trong trường hợp file bị đánh cắp hoặc truy cập trái phép.
      • Nếu bạn để trống (không đặt passphrase), bạn có thể sử dụng khóa SSH mà không cần nhập passphrase, tiện lợi nhưng ít bảo mật hơn.

Kết quả bạ nhận được như sau:

Private Key.

Đây là khóa bí mật và phải được bảo vệ an toàn, không nên chia sẻ với bất kỳ ai.

shell> cat /home/hoanghd/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
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
FvoArSpFv+ycn5LFS3Ri0gIIs=
-----END OPENSSH PRIVATE KEY-----

Public Key.

Khóa này bạn sẽ cung cấp cho các hệ thống mà bạn muốn truy cập.

shell> cat /home/hoanghd/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDhSq9uVOp3JlE4bvJ0AlZMuwTX/E46dcV5iUG4EkAyKjZ7StEDlyzHSF5zQJGVjhMXFzjN9ZXceTM+UgBsgu7gvFpRIRdiKiLwiKCPociJbZw1+s3aKUy3/fM79IyflxW719M4xBQ2J8m1gbf0yGskgte/EBTmPPSnmzsszgpGz6anOcTjF2pzsOzInAlxoe3ngMmC94woUQwfXKEkYU6KajVCJNa4iPWnQLwQvbP6coVc8c59kAUY8VaegTpHayEhsFcwwcGqLVa0fjqAm2fwc2y57txneYNiafaMsvOL68VdaQ0QcUgJ5xyuj19hwWT+N7qhZ9Q1ZbL+J7KCETLC1t34e4tetSn7w/M3GiLGb8l9Qiih+FMHpwBNoW7QaQqQhnSHzY8qh6t0+KA9iCsHyVyqADzRS387sF3cnGXbD8mKnQKjo2uTfrXq3r/o0GJQr2NfrXsTh1tFQZOR3D2WW+A3kv7NqDnEMIi0LRDVYNylbchq45IaOYq+Qu8natnl88N/m9onqq6qLfuCQZMBqzHPqOW/JGa42tlah4OFATBIhSxWJf6IziNfNWeHW+SOOFXpf4G0Mjst9UjhOhYH/MCNMWvYzrcm798pxPFg5R+eygg40QQzckvHEQZ5u7KWWAgg6KY13spkyFlU6aS2eyl9AR01LU1rkuWML8/Q6Q== hoanghd@node1

Xác minh khóa đã hoạt động bằng cách ssh với tham số -i để chỉ đến file private key của bạn. Lúc này nếu có passphrase bạn sẽ nhận được dấu nhắc Enter passphrase for key '/Users/hoanghd/.ssh/id_rsa': để nhập mật khẩu passphrase.

shell> ssh -i ~/.ssh/id_rsa hoanghd@192.168.100.131
Enter passphrase for key '/Users/hoanghd/.ssh/id_rsa':
Linux node1 6.5.11-8-pve #1 SMP PREEMPT_DYNAMIC PMX 6.5.11-8 (2024-01-30T12:27Z) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Oct 14 17:38:49 2024 from 192.168.100.100

Sau khi login thành công bạn có thể dùng lệnh sudo -i để chuyển qua người dùng root.

shell> sudo -i
[sudo] password for hoanghd:

4. Automation tạo SSHKey.

Bạn sử dụng lệnh dưới, sự khác biệt của lệnh này so với lệnh gốc là bạn không cần qua các bước xác nhận khi tạo key mà sẽ truyền thẳng các tham số vào lệnh chạy.

-N "": Xác định passphrase cho private key. Ở đây, "" có nghĩa là không đặt passphrase (tức là không bảo vệ private key bằng mật khẩu) hoặc tham số -N "password" sẽ đặt passphrase cho private key trực tiếp. Passphrase bạn đặt sẽ là “password”.

-f ~/.ssh/id_rsa: Xác định tên và vị trí file nơi cặp khóa sẽ được lưu. Ở đây, cặp khóa sẽ được lưu tại ~/.ssh/id_rsa (private key) và ~/.ssh/id_rsa.pub (public key).

ssh-keygen -t rsa -b 4096 -N "password" -f ~/.ssh/id_rsa

Vấn đề bảo mật khi dùng lệnh này:

  • Lộ mật khẩu: Việc đặt trực tiếp passphrase trong lệnh như vậy có thể không an toàn vì:
    • Bị ghi vào history của terminal: Lệnh này có thể bị ghi lại trong lịch sử lệnh của terminal (~/.bash_history hoặc tương đương). Nếu ai đó truy cập được file này, họ có thể thấy passphrase của bạn.
    • Ghi vào log: Nếu hệ thống ghi log các lệnh đã chạy, passphrase có thể bị lộ trong các file log.

Để an toàn nhất, bạn nên tránh đặt passphrase trực tiếp trong lệnh, thay vào đó, nhập passphrase thủ công khi được nhắc.

Dùng HISTCONTROL để tránh lưu lịch sử lệnh:

Bạn có thể tạm thời tránh ghi lệnh vào lịch sử bằng cách thêm một khoảng trắng trước lệnh:

ssh-keygen -t rsa -b 4096 -N "password" -f ~/.ssh/id_rsa

Điều này chỉ hiệu quả nếu HISTCONTROL được đặt là ignorespace (nhiều hệ thống mặc định như vậy).

Xóa lệnh khỏi lịch sử:

Nếu bạn đã chạy lệnh mà quên mất việc có thể lộ mật khẩu, bạn có thể xóa lịch sử lệnh sau khi chạy:

history -d <line-number>

Việc sử dụng lệnh với passphrase trong automation cũng phải được cân nhắc kỹ lưỡng, bạn có thể lựa chọn sử dụng SSH keys không có passphrase (nếu bảo mật mạng của bạn đủ chặt chẽ) hoặc tìm cách an toàn hơn để bảo vệ passphrase của mình trong các quy trình tự động.

5. Kết luận.

Việc sử dụng SSH key thay vì mật khẩu giúp tăng cường bảo mật đáng kể cho hệ thống của bạn, đặc biệt trong môi trường mạng rộng lớn. Chúng mang lại sự tiện lợi trong việc quản lý truy cập, đồng thời giúp đơn giản hóa quá trình tự động hóa. Tuy nhiên, việc quản lý và bảo vệ private key là điều bắt buộc để đảm bảo an toàn tuyệt đối.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories