Cloud-init là giải pháp tiêu chuẩn công nghiệp để tự động hóa việc triển khai máy chủ, hỗ trợ trên nhiều nền tảng và bản phân phối. Kết hợp siêu dữ liệu nền tảng với các tập lệnh dữ liệu người dùng tùy chỉnh, cloud-init có thể đơn giản hóa đáng kể quá trình khởi tạo máy chủ mới.

Với dịch vụ Metadata của Akamai , bạn có thể tận dụng cloud-init để triển khai Compute Instances. Một tập lệnh dữ liệu người dùng cloud-config có thể xác định mọi thứ bạn cần để khởi tạo các phiên bản, từ bảo mật và thiết lập người dùng đến cài đặt phần mềm và tập lệnh shell.

Hướng dẫn này trình bày chi tiết cách bắt đầu làm việc với người dùng như một phần của triển khai cloud-init của bạn. Đọc tiếp để biết các tập lệnh cloud-config để cung cấp người dùng, thêm khóa SSH và vô hiệu hóa quyền truy cập root từ xa.

Trước khi bắt đầu, bạn nên xem lại hướng dẫn của chúng tôi về cách sử dụng Cloud-Init để tự động cấu hình và bảo mật máy chủ của bạn . Ở đó, bạn có thể xem cách tạo tệp cloud-config, tệp mà bạn cần làm theo hướng dẫn hiện tại. Khi bạn đã sẵn sàng triển khai cloud-config, hướng dẫn được liên kết ở trên sẽ cho biết cách thực hiện.

Tạo người dùng

Trong một tập lệnh cloud-config, userstùy chọn này xử lý việc tạo người dùng và hầu hết các tính năng để quản lý người dùng. Ở mức đơn giản nhất, tùy chọn này có thể hoạt động với ít nhất một mục, đảm bảo rằng cloud-init tạo ra người dùng mặc định. Bất kể bạn thêm người dùng nào khác, bạn cũng defaultnên giữ một mục nhập cho người dùng đó.default

users:
  - default

Để tạo thêm người dùng, hãy thêm một mục khác vào danh sách với ít nhất một nametrường xác định tên người dùng. Ví dụ, để tạo example-user, bạn có thể sử dụng cấu hình như thế này.

users:
  - default
  - name: example-user

Quá trình cloud-init thiết lập người dùng với một loạt các mặc định, như thư mục home và nhóm người dùng. Tuy nhiên, bạn thường muốn kiểm soát nhiều hơn một chút việc tạo người dùng, đặc biệt là nếu bạn định truy cập người dùng qua SSH. Các phần tiếp theo sẽ đề cập đến các tính năng như chỉ định nhóm (bao gồm sudoquyền truy cập) và thêm khóa SSH cho người dùng. Trong ví dụ bên dưới và phần phân tích đi kèm, có một số tùy chọn hữu ích bổ sung để quản lý người dùng mới.

users:
  - default
  - name: example-user
    gecos: Example User,600-700-8090
    shell: /bin/bash
    lock_passwd: false
    passwd: <PASSWORD_HASH>

Điều này tạo ra một người dùng cơ bản, có thể truy cập bằng tên người dùng và mật khẩu. Sau đây là giải thích về chức năng của từng phần trong ví dụ:

  • name: Xác định tên người dùng cho người dùng. Trường này là bắt buộc.
  • gecos: Cung cấp bình luận về người dùng. Đây là nơi bạn có thể nhập thông tin GECOS cho người dùng, chẳng hạn như tên thật và thông tin liên lạc. Mỗi thông tin phải được phân tách bằng dấu phẩy.
  • shell: Trỏ đến shell cho người dùng. Mặc dù không bắt buộc, shell của người dùng có thể hoạt động không mong muốn nếu bạn không cung cấp rõ ràng trường này.
  • lock_passwd: Có nên vô hiệu hóa đăng nhập bằng mật khẩu cho người dùng hay không. Mặc định truelà khuyến nghị sử dụng quyền truy cập SSH thay thế. Điều này là do, ngoài việc khóa SSH thường an toàn hơn, hàm băm mật khẩu được bao gồm trong cloud-config, khiến việc bảo mật trở nên khó khăn hơn.
  • passwd: Xác định mật khẩu cho người dùng dưới dạng băm mật khẩu. Để đăng nhập bằng người dùng sử dụng mật khẩu này, tùy lock_passwdchọn cần được đặt thành false. Bạn có thể tạo băm mật khẩu bằng lệnh sau:mkpasswd --method=SHA-512 --rounds=4096

Ghi chú: Cấu hình hỗ trợ plain_text_passwdtùy chọn, trong đó bạn có thể đặt mật khẩu người dùng từ văn bản thuần túy, thay vì băm. Tuy nhiên, bạn không nên sử dụng tùy chọn này trong môi trường sản xuất, vì mật khẩu thậm chí còn dễ bị lộ hơn.

Để biết đầy đủ các tùy chọn cấu hình người dùng, hãy xem tài liệu tham khảo mô- đun Người dùng và Nhóm của cloud-init .

Quản lý và chỉ định nhóm

Tập lệnh cloud-config của bạn có thể quản lý nhóm người dùng độc lập bằng tùy groupschọn hoặc trong một usersmục nhập. Tùy chọn này groupscung cấp cho bạn nhiều quyền kiểm soát hơn đối với chính các nhóm và cho phép bạn thêm người dùng hiện tại, như rootngười dùng mặc định, vào các nhóm mới.

Bên dưới groups, bạn có danh sách các nhóm cần thêm vào hệ thống. Chỉ cần liệt kê tên của một nhóm, như user-groupbên dưới, sẽ tạo ra một nhóm trống. Thêm danh sách tên người dùng bên dưới tên nhóm, như bên admin-groupdưới, sẽ khởi tạo hệ thống với những người dùng thuộc nhóm đó.

groups:
  - admin-group:
    - root
  - user-group

Cloud-config cũng hỗ trợ một groupstùy chọn trong mỗi usersmục nhập. Sử dụng groupstùy chọn này cung cấp một cách tiếp cận tập trung vào người dùng hơn, cho phép bạn tạo và chỉ định các nhóm theo từng người dùng. Trong ví dụ dưới đây, một example-groupnhóm mới được tạo cùng với người dùng và người dùng được chỉ định vào nhóm đó.

users:
  - name: example-user
    groups:
      - example-group

Theo mặc định, cloud-init tạo và gán mỗi người dùng cho một nhóm người dùng tự đặt tên. Vì vậy, người dùng ở trên, example-user, thực sự thuộc về hai nhóm: example-uservà example-group. Bạn có thể thiết lập no_user_group: truengười dùng không tạo nhóm mặc định example-user.

Chỉ định quyền truy cập Sudo

Cloud-init kiểm soát sudoquyền truy cập của người dùng chủ yếu thông qua sudotùy chọn. Tùy chọn này lấy danh sách sudocác chuỗi quy tắc, chỉ cần chúng xuất hiện trong sudoerstệp. Bạn có thể tìm hiểu thêm về sudoquyền truy cập và sudoquy tắc trong các phần thích hợp của hướng dẫn Người dùng và Nhóm Linux của chúng tôi .

Trong ví dụ dưới đây, một cái mới example-userđược tạo và cấp sudoquyền truy cập. Một quy tắc được áp dụng cho phép người dùng chạy bất kỳ lệnh nào sudosau khi nhập mật khẩu của người dùng. Ví dụ này cũng thêm người dùng vào sudonhóm người dùng.

users:
  - name: example-user
    groups:
      - sudo
    sudo:
      - ALL=(ALL:ALL) ALL

Ngoài ra, bạn có thể sử dụng quy tắc sau sudoersđể cho phép sudotruy cập mà không cần nhập mật khẩu. Điều này hữu ích cho những người dùng mà bạn đã thiết lập quyền truy cập khóa SSH nhưng chưa cung cấp mật khẩu.

...
    sudo:
      - ALL=(ALL) NOPASSWD:ALL

Thêm Khóa SSH cho Người dùng

Sử dụng tùy chọn này ssh_authorized_keys, bạn có thể ủy quyền danh sách khóa công khai SSH để truy cập người dùng từ xa. Làm như vậy cung cấp một tuyến ủy quyền an toàn hơn so với mật khẩu và do đó được khuyến nghị hơn là cấu hình mật khẩu.

Nếu bạn chưa có cặp khóa SSH, hãy tạo một cặp bằng cách làm theo phần có liên quan trong hướng dẫn của chúng tôi về cách sử dụng Xác thực khóa công khai SSH .

Sau khi bạn có cặp khóa SSH, bạn có thể thêm khóa công khai SSH của mình vào ssh_authorized_keysdanh sách trong cấu hình người dùng. Trong ví dụ này, example-userđã ủy quyền truy cập từ hai khóa SSH:

users:
  - name: example-user
    shell: /bin/bash
    ssh_authorized_keys:
      - <SSH_PUBLIC_KEY_FIRST>
      - <SSH_PUBLIC_KEY_SECOND>

Với thiết lập này, một máy có khóa riêng SSH phù hợp (thường là nơi bạn tạo cặp khóa) có thể truy cập example-userqua SSH. Khóa SSH cung cấp xác thực và thực hiện việc này an toàn hơn so với nhập mật khẩu thủ công.

Vô hiệu hóa người dùng gốc

Về mặt bảo mật, thường thì nên vô hiệu hóa đăng nhập root qua SSH. Điều này hạn chế khả năng người dùng root của bạn bị lộ và khả năng hệ thống của bạn bị truy cập với toàn bộ quyền root.

Để vô hiệu hóa quyền truy cập gốc qua SSH, bạn cần sửa đổi tệp cấu hình SSH và khởi động lại dịch vụ SSH của hệ thống. Tất cả những điều này có thể được thực hiện bằng một loạt lệnh shell, mà cloud-config sử dụng trong tùy runcmdchọn. Ví dụ bên dưới sử dụng ba lệnh để sửa đổi cấu hình dịch vụ SSH:

  • Lệnh này sedxóa bất kỳ PermitRootLogindòng nào đã có trong tệp cấu hình. Do đó, bất kỳ thiết lập hiện có nào cũng bị xóa và bỏ qua các lệnh phức tạp hơn cố gắng xác định các thiết lập đã được chú thích.
  • Lệnh này echothêm một thiết lập mới PermitRootLoginvào tệp cấu hình, với giá trị là novô hiệu hóa đăng nhập root.
  • Lệnh này systemctlkhởi động lại dịch vụ SSH để đảm bảo cài đặt có hiệu lực ngay lập tức.
runcmd:
  - sed -i '/PermitRootLogin/d' /etc/ssh/sshd_config
  - echo "PermitRootLogin no" >> /etc/ssh/sshd_config
  - systemctl restart sshd

Xác minh cấu hình người dùng

Sau khi cloud-init hoàn tất quá trình khởi tạo máy chủ, hãy xác minh rằng cấu hình người dùng và nhóm của bạn đã triển khai theo đúng dự định. Đối với một số thành phần được cấu hình trong suốt hướng dẫn này, xác minh đơn giản nhất thường chỉ là kết nối với người dùng đã cho qua SSH.

Ví dụ, nếu cloud-config của bạn được tạo example-userbằng khóa SSH, bạn sẽ có thể kết nối với máy chủ với tư cách là người dùng đó qua SSH. Thay thế 192.0.2.17bên dưới bằng địa chỉ IP thực tế của máy chủ đã triển khai.

ssh example-user@192.0.2.17

Nếu bạn đã tắt quyền truy cập root từ xa, bạn sẽ có thể xác minh điều đó tương tự khi cố gắng truy cập máy chủ với tư cách là người rootdùng:

ssh root@192.0.2.17

Để xác minh chi tiết hơn, bạn có thể sử dụng lệnh getentvà groupssau khi đã đăng nhập vào máy chủ. Lệnh trước, được sử dụng với tùy passwdchọn và tên người dùng, cung cấp tóm tắt thông tin chi tiết của người dùng trên hệ thống.

Trong ví dụ này, bạn có thể thấy mục nhập example-usercó chú thích GECOS, thư mục gốc và chương trình shell được chỉ định:

sudo getent passwd example-user
example-user:x:1000:1002:Example User,600-700-8090:/home/example-user:/bin/bash

Những gì còn thiếu ở trên là xác minh nhóm người dùng. Bạn có thể thực hiện điều đó bằng lệnh theo groupssau là tên người dùng. Ví dụ bên dưới thực hiện điều này cho example-user, cho thấy người dùng thuộc về một nhóm người dùng tự đặt tên cùng với example-group.

sudo groups example-user
example-user : example-user sudo example-group

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn: https://www.linode.com/docs/guides/manage-users-with-cloud-init/