Thứ hai, 13/10/2014 | 00:00 GMT+7

Cách sử dụng cấu hình cloud để thiết lập server ban đầu của bạn

Với sự ra đời của dịch vụ metadata DigitalOcean , bạn có thể bắt đầu cấu hình server của bạn trước khi đăng nhập. Nói tóm lại, dịch vụ metadata là một vị trí HTTP mà server của bạn có thể truy cập trong quá trình khởi động.

Vị trí metadata sẽ chứa dữ liệu cơ bản về cấu hình và môi trường của server , chẳng hạn như địa chỉ mạng, tên server , v.v. Trong quá trình cài đặt ban đầu, các giá trị này có thể được kéo xuống bởi một chương trình gọi là cloud-init để giúp cấu hình các dịch vụ thiết yếu.

Tính năng mạnh mẽ nhất là bạn có thể chuyển một tập lệnh tới dịch vụ metadata khi bạn tạo một server bằng cách sử dụng trường có tên là user-data . Điều này sẽ được chạy trong quá trình khởi động ban đầu và rất linh hoạt, cho phép bạn thực hiện bất cứ điều gì bạn có thể viết kịch bản.

Loại tập lệnh phổ biến nhất để chuyển vào được gọi là tập lệnh cloud-config . Đây là một file được định dạng YAML cung cấp các phương pháp đơn giản, dễ đọc để cài đặt các mục cấu hình thông thường bằng cách khai báo. Nó cũng có khả năng chạy các lệnh tùy ý cho các việc khác.

Trong hướng dẫn này, ta sẽ làm quen với dịch vụ metadata DigitalOcean và các file cloud-config bằng cách thử một ví dụ đơn giản. Ta sẽ tạo lại một số bước được nêu trong hướng dẫn cài đặt server ban đầu cho Ubuntu 14.04 để minh họa.

Bàn thắng

Để sao chép thành công các bước trong hướng dẫn cài đặt server ban đầu Ubuntu 14.04 , tập lệnh của ta sẽ phải thực hiện một số tác vụ.

Đây là những nhiệm vụ cơ bản mà hướng dẫn trên hoàn thành:

  • Thay đổi password của user root
  • Tạo user mới
  • Tạo password của user mới
  • Cung cấp các quyền root cho user mới
  • (Tùy chọn) Thay đổi cổng mà daemon SSH sẽ lắng nghe
  • (Tùy chọn) Hạn chế đăng nhập SSH root
  • (Tùy chọn) Cho phép rõ ràng user mới của ta

Sửa đổi các Mục tiêu để Giải quyết Môi trường

Đối với các server của ta được tạo bằng file cloud-config , ta sẽ phải sửa đổi mục tiêu của bạn một chút. Bất kỳ user nào của hệ thống cũng có thể truy cập bất kỳ thông tin nào được chuyển qua file cloud-config trong suốt thời gian hoạt động của server .

Phần này giới thiệu một số vấn đề bảo mật quan trọng cần hiểu và giải quyết. Một số điều cần ghi nhớ là:

  • Mọi thông tin được truyền trong cloud-config của bạn đều có thể truy cập được cho mọi user trên hệ thống. Không đặt bất kỳ thứ gì bí mật trong các file cloud-config của bạn.
  • Bạn có thể đặt password cho user hiện tại, nhưng bạn phải chuyển password đó ở dạng văn bản thuần túy.
  • Đối với user mới, bạn có thể chuyển password version băm, nhưng những băm này có thể bị phá rất dễ dàng bằng phần cứng hiện đại.

Với những điều này, cài đặt của ta phải làm mọi thứ có thể để tránh sử dụng password , dưới mọi hình thức, trong file cloud-config . Ta có thể điều chỉnh mục tiêu của bạn để đáp ứng các nhu cầu cụ thể của môi trường triển khai của ta .

Chiến lược đã điều chỉnh của ta sẽ trông giống như sau:

  • Không đặt password và không cung cấp SSH key cho account root thông qua cloud-config (bất kỳ SSH key nào được thêm vào mặc dù giao diện DigitalOcean vẫn sẽ được thêm như bình thường)
  • Tạo user mới
  • Không đặt password cho account user mới
  • Cài đặt quyền truy cập SSH cho account user mới
  • Cấp cho user mới các quyền sudo không cần password để áp dụng các thay đổi quản trị.
  • (Tùy chọn) Thay đổi cổng mà daemon SSH sẽ lắng nghe
  • (Tùy chọn) Hạn chế đăng nhập SSH root (đặc biệt nếu bạn không bao gồm SSH key thông qua giao diện DigitalOcean)
  • (Tùy chọn) Cho phép rõ ràng user mới của ta

Bên cạnh việc gỡ bỏ password cho cả hai account , thay đổi mạnh mẽ nhất ở đây là account mới sẽ được phép sử dụng sudo mà không cần nhập password account . Điều này là cần thiết vì ta không cho phép đăng nhập root và ta không đặt password account cho user mới của bạn .

Sau khi user mới đăng nhập, họ sẽ có quyền tự do đặt password cho mình một cách an toàn và sửa đổi các quyền sudo để yêu cầu password , nếu muốn.

Với những mục tiêu đã điều chỉnh này, hãy bắt đầu.

Sử dụng file cấu hình cloud

Tệp cloud-config về cơ bản là một file YAML hiểu các lệnh nhất định. YAML là một định dạng tuần tự hóa dữ liệu nghĩa là con người rất dễ đọc, giúp dễ hiểu và chỉnh sửa.

Tệp YAML dựa trên một số luật để định dạng:

  • Thụt lề với khoảng trắng cho biết cấu trúc và mối quan hệ của các mục với nhau. Các mục được thụt lề nhiều hơn là các mục con của mục đầu tiên có mức độ thụt lề thấp hơn ở trên chúng.
  • Các thành viên trong danh sách có thể được xác định bằng dấu gạch ngang ở đầu.
  • Các mục nhập mảng liên kết được tạo bằng cách sử dụng dấu hai chấm (:) theo sau là dấu cách và giá trị.
  • Các khối văn bản được thụt vào. Để cho biết khối sẽ được đọc như hiện tại, với định dạng được duy trì, hãy sử dụng ký tự ống dẫn (|) trước khối.

Dòng đầu tiên của file cloud-config phải chứa một số nhận dạng đặc biệt để chương trình cloud-init biết rằng file đó là file cloud-config . Nó trông như thế này:

#cloud-config 

Điều này phải được đặt một mình trên dòng đầu tiên. Tệp cloud-config phải được cung cấp khi server được tạo. Điều này có thể được thực hiện theo hai cách khác nhau.

Lưu ý dịch vụ metadata chỉ khả dụng ở các khu vực triển khai cloud 1.5. Ngoài ra, version cloud-init cần thiết để sử dụng trường dữ liệu user hiện chỉ có sẵn trong Ubuntu 14.04 và CentOS 7, cũng như hình ảnh ứng dụng dựa trên các bản phát hành này.

Thông qua giao diện console , có một hộp kiểm tùy chọn để kích hoạt dữ liệu user . Khi bạn chọn mục này, một hộp văn bản sẽ hiển thị nơi bạn có thể dán file cloud-config của bạn :

Dữ liệu  user  DigitalOcean

Nếu bạn đang sử dụng API, đối tượng JSON được chuyển vào trong một yêu cầu tạo có thể sử dụng một trường được gọi là user_data . Ví dụ: bạn có thể truyền vào một đối tượng JSON trông giống như sau:

{     "name": "test",     "private_networking": true,     "region": "nyc3",     "size": "512mb",     "image": "ubuntu-14-04-x64",     "user_data":"#cloud-config         config_data         more_config"     "ssh_keys":[ 12345,56789 ] } 

Cả hai phương pháp này đều hoạt động hoàn toàn giống nhau trong thực tế, vì vậy hãy sử dụng phương pháp nào cảm thấy thoải mái nhất cho bạn.

Cài đặt account user mới

Điều đầu tiên ta cần làm là cấu hình account user mới của bạn .

Đây là nơi hầu như tất cả các công việc sẽ diễn ra. Tài khoản root không có password theo mặc định, vì vậy ta không cần phải “bỏ đặt” bất kỳ password nào ở đó.

Tạo user mới

Để tạo user mới, ta sử users chỉ thị users . Điều này sẽ chứa một danh sách tất cả các account mới mà ta muốn tạo. Vì ta chỉ tạo một account duy nhất nên ta sẽ có danh sách một account . Để làm theo hướng dẫn mà ta đã liên kết, ta sẽ gọi đây là demo account mới.

Lưu ý , ta phải bắt đầu các file cloud-config #cloud-config mình với #cloud-config trên dòng đầu tiên. Lúc này, file của ta sẽ trông như thế này:

#cloud-config users:   - name: demo 

Nếu ta muốn thêm user bổ sung, ta có thể thực hiện bằng cách đặt một mục bên dưới và căn chỉnh theo chiều ngang với mục này, bắt đầu lại bằng dấu gạch ngang, như sau:

#cloud-config users:   - name: demo   - name: second_user 

Mỗi dấu gạch ngang biểu thị một account user riêng biệt mà theo đó ta có thể thêm thông tin chi tiết của user ( ta sẽ thực hiện ngay). Tuy nhiên, ta chỉ tạo một user duy nhất, vì vậy ta sẽ không có dòng thứ hai trong hướng dẫn này.

Thêm khóa được ủy quyền

Để đăng nhập vào account mới này mà không cần password , ta cần cung cấp một hoặc nhiều public key SSH của bạn . Chúng sẽ được thêm vào file authorized_keys của user mới trong .ssh trong thư .ssh của họ.

Điều này được thực hiện với chỉ thị ssh-authorized-keys , là một mục con của mục nhập users . Về cơ bản, điều này nghĩa là ta căn chỉnh nó với chỉ thị name của ta , nhưng không đặt nó một dấu gạch ngang, vì nó không phải là phần bắt đầu của một mục nhập user mới.

Mục nhập ssh-authorized-keys thực sự có một danh sách các khóa. Điều này cho phép bạn thêm nhiều hơn một public key SSH vào file . Ví dụ: nếu bạn có một cặp SSH key cho notebook , máy tính để bàn và máy tính của bạn tại nơi làm việc, bạn có thể thêm tất cả chúng dưới dạng các mục riêng biệt trong danh sách ssh-authorized-keys .

Để nhận nội dung của public key của máy tính local , có thể chạy lệnh:

cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com 

Sau đó, bạn có thể dán nội dung hoàn chỉnh dưới dạng một mục dưới mục nhập ssh-authorized-keys của ta . Khóa công khai SSH có thể được đăng công khai, vì vậy điều này không thể hiện rủi ro bảo mật:

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com 

Nếu bạn muốn thêm các khóa bổ sung, điều đó có thể được thực hiện bằng cách thêm một dấu gạch ngang khác, sau đó là public key thứ hai:

#cloud-config users:   - name: demo     ssh-authorized-keys:       - key_one       - key_two 

Thêm bất kỳ khóa nào bạn muốn sử dụng để đăng nhập vào account này tại đây.

Cài đặt quyền truy cập Sudo

Bước tiếp theo là cấu hình quyền truy cập sudo vào account mới của ta . Để nhắc lại, ta sẽ cấu hình quyền truy cập sudo không cần password vì ta sẽ không đặt password trên account này do các giới hạn bảo mật.

Để cấu hình quyền truy cập, ta thực sự sẽ thực hiện hai bước riêng biệt.

Đầu tiên, ta sẽ tạo mục nhập mà ta muốn sử dụng cho file sudoers . Các thay đổi của ta sẽ thực sự được ghi vào một file riêng trong folder /etc/sudoers.d , mà /etc/sudoers bao gồm khi phân tích cú pháp.

Mục nhập ta cần tạo sẽ không cần bao gồm tên user , vì cloud-init đủ thông minh để tìm ra tên account từ thông tin mục nhập. Lệnh mà ta cần sử dụng là sudo , được căn chỉnh với các lệnh cấp users khác của ta .

Đối với hướng dẫn của ta , vì ta đang cấu hình khả năng sudo không cần password , sẽ giống như sau:

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL'] 

Thao tác này sẽ tạo một file trong folder /etc/sudoers.d được gọi là 90-cloud-init-users . Bên trong file này, mục nhập sẽ giống như sau:

demo ALL=(ALL) NOPASSWD:ALL 

Điều thứ hai ta sẽ làm là thêm user của ta vào group sudo . Điều này không hoàn toàn cần thiết vì ta có một mục nhập cụ thể cho account mới của ta được sudo phân tích cú pháp, nhưng nó mang lại cho ta sự linh hoạt hơn.

Sau đó, ta có thể cần đặt password cho user của bạn theo cách thủ công và yêu cầu password đó cho các lệnh sudo . Nếu user của ta đã ở trong group sudo , tất cả những gì ta phải làm là đặt password và xóa mục nhập trong file 90-cloud-init-users .

Để thêm một group bổ sung, ta có thể sử dụng chỉ thị groups :

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo 

Điều này sẽ giúp việc chuyển đổi sang cài đặt sudo truyền thống dễ dàng hơn. Ta sẽ chỉ cho bạn cách thực hiện việc này ở phần cuối của hướng dẫn này.

Đặt Môi trường Shell

Theo mặc định, user mới được tạo có shell mặc định của họ được đặt thành shell /bin/sh rất cơ bản.

Đây là một môi trường đơn giản hơn nhiều so với hầu hết mọi người quen thuộc, vì vậy ta muốn chỉ định thủ công môi trường bash shell cho user mới của ta .

Điều này có thể được thực hiện với lệnh shell trong mục cấp users . Tất cả những gì ta cần làm là trỏ nó đến đường dẫn đầy đủ của file thực thi bash :

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo     shell: /bin/bash 

Ta đã hoàn thành cấu hình user mới của bạn . Bây giờ ta có thể chuyển sang các bước tùy chọn để khóa daemon SSH của ta .

Cấu hình và SSH key Daemon (Tùy chọn)

Các bước tiếp theo có thể hữu ích để tăng cường bảo mật. Bạn có thể triển khai bất kỳ hoặc tất cả chúng khi bạn thấy phù hợp. Hãy xem hướng dẫn mà ta đang tự động hóa để biết thêm thông tin về các tùy chọn này. Ta sẽ chỉ cho bạn cách triển khai từng mục bằng hai phương pháp khác nhau.

Tất cả những thay đổi mà ta cần thực hiện sẽ nằm trong file /etc/ssh/sshd_config . Để nhắc lại, những thay đổi mà ta muốn thực hiện là:

  • (Tùy chọn) Thay đổi cổng mà daemon SSH sẽ lắng nghe
  • (Tùy chọn) Hạn chế đăng nhập SSH root (đặc biệt nếu bạn không bao gồm SSH key thông qua giao diện DigitalOcean)
  • (Tùy chọn) Cho phép rõ ràng user mới của ta

Các cài đặt này có thể được triển khai bằng cách áp dụng các thay đổi này trong file sshd_config , tương ứng:

  • Cổng 4444
  • PermitRootLogin không
  • AllowUsers bản demo

Có hai cách tiếp cận để thực hiện những thay đổi này. Đầu tiên là viết lại hoàn toàn file bằng cách cung cấp toàn bộ file cấu hình trong file cấu hình cloud-config của ta . Thứ hai là áp dụng các thay đổi một cách chiến lược bằng cách sử dụng các tiện ích văn bản phổ biến của Linux.

Cả hai điều này đều có lợi thế của chúng và cả hai đều thể hiện các chỉ thị khác nhau trong cloud-config . Ta sẽ trình bày lần lượt từng cái.

Cấu hình SSH Daemon bằng cách cung cấp file cấu hình mới

Chiến lược đầu tiên để áp dụng các thay đổi mà ta muốn là viết lại hoàn toàn file với nội dung chính xác mà ta muốn.

Điều này cho phép ta có toàn quyền kiểm soát file , dù những gì có sẵn ở đó theo mặc định. Phương pháp luận là thẳng thắn và dễ dàng dự đoán kết quả của các hành động của ta .

Để ghi một file mới vào đĩa, ta có thể sử dụng chỉ thị write_files . Đây là chỉ thị cấp cao nhất, vì vậy nó nên được đặt bên ngoài phần users mà ta đã làm việc trước đây.

Ta cung cấp một danh sách (được đại diện lại bằng một dấu gạch ngang cho mỗi mục) các file ta muốn viết.

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo     shell: /bin/bash write_files:   - item_one   - item_two 

Trong trường hợp của ta , ta sẽ chỉ viết một file . Đối với mỗi file , ta cung cấp thông tin chi tiết về các ký tự mà ta muốn tạo. Ví dụ: các tham số mà bạn có thể sử dụng là path , content , owner , permissions và thậm chí cả encoding .

Theo mặc định, chủ sở hữu của các file được tạo bằng phương pháp này là root và các quyền là 644 , đây chính xác là những gì ta muốn. Vì vậy, ta chỉ cần cung cấp các chỉ thị pathcontent .

Đường path chỉ là vị trí trong hệ thống file để ghi file .

Đối với content , ta sẽ muốn cung cấp toàn bộ nội dung của file , được viết như hiện tại. Lưu ý , ta có thể sử dụng ký tự ống dẫn (|) để chuyển vào một khối văn bản sẽ duy trì định dạng của nó.

Đối với nội dung của file sshd_config của ta , ta sẽ chỉ sử dụng nội dung mặc định, loại bỏ các comment (cho ngắn gọn), với những thay đổi mà ta muốn thực hiện. Phần hoàn chỉnh để viết lại file của ta sẽ trông như thế này:

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo     shell: /bin/bash write_files:   - path: /etc/ssh/sshd_config     content: |          Port 4444          Protocol 2          HostKey /etc/ssh/ssh_host_rsa_key          HostKey /etc/ssh/ssh_host_dsa_key          HostKey /etc/ssh/ssh_host_ecdsa_key          HostKey /etc/ssh/ssh_host_ed25519_key          UsePrivilegeSeparation yes          KeyRegenerationInterval 3600          ServerKeyBits 1024          SyslogFacility AUTH          LogLevel INFO          LoginGraceTime 120          PermitRootLogin no          StrictModes yes          RSAAuthentication yes          PubkeyAuthentication yes          IgnoreRhosts yes          RhostsRSAAuthentication no          HostbasedAuthentication no          PermitEmptyPasswords no          ChallengeResponseAuthentication no          X11Forwarding yes          X11DisplayOffset 10          PrintMotd no          PrintLastLog yes          TCPKeepAlive yes          AcceptEnv LANG LC_*          Subsystem sftp /usr/lib/openssh/sftp-server          UsePAM yes          AllowUsers demo 

Điều này sẽ thay thế hoàn toàn nội dung của /etc/ssh/sshd_config bằng nội dung mới mà ta đã cung cấp. Đây là file sshd_config mặc định cho Ubuntu với chỉ các mục ta đã đề cập ở trên được sửa đổi.

Đây là một phương pháp áp dụng các thay đổi đối với daemon SSH.

Cấu hình Daemon SSH thông qua các thay đổi tập trung

Cách thứ hai mà ta có thể sửa đổi file sshd_config là thông qua các chỉnh sửa tập trung. Hệ thống Linux đi kèm với nhiều công cụ thao tác văn bản mạnh mẽ mà ta có thể tận dụng để chỉ thực hiện những thay đổi mà ta cần.

Để chạy các lệnh tùy ý, ta sẽ sử dụng một lệnh gọi là runcmd , lệnh này cho phép ta chạy bất kỳ lệnh nào trên hệ thống. Mỗi lệnh sẽ là một mục danh sách dưới lệnh. Chúng có thể được cung cấp dưới dạng chuỗi đại diện cho toàn bộ lệnh hoặc dưới dạng một mảng với lệnh và tất cả các tùy chọn dưới dạng phần tử.

Ta sẽ sử dụng lệnh sed , được thực hiện để thay thế chuỗi. Mặc dù bạn có thể chuyển nhiều thao tác cho một lệnh sed , ta sẽ thực hiện một thao tác duy nhất cho mỗi lệnh sed . Điều này sẽ cho phép ta khắc phục mọi sự cố dễ dàng hơn. Tất cả các lệnh sed của ta sẽ chỉnh sửa file sshd_config tại chỗ.

Lệnh sed đầu tiên của ta sẽ thay đổi dòng cấu hình cổng lắng nghe. Ta sẽ xác định điều này bằng cách tìm kiếm một dòng bắt đầu bằng "Cổng". Ta sẽ yêu cầu sed thay thế toàn bộ dòng (được chỉ định bởi biểu thức chính quy ^.*$ ) Bằng cấu hình Port 4444 của ta :

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo     shell: /bin/bash runcmd:   - sed -i -e '/^Port/s/^.*$/Port 4444/' etc/ssh/sshd_config 

Dòng sed tiếp theo của ta sẽ sửa đổi chỉ thị “PermitRootLogin” bằng cách tìm kiếm chuỗi đó ở đầu dòng. , ta sẽ thay thế toàn bộ dòng, lần này bằng PermitRootLogin no :

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo     shell: /bin/bash runcmd:   - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config 

Lệnh sed tiếp theo sẽ thêm một dòng vào cuối file vì hiện tại không có chỉ thị “AllowUsers” trong file . Ta thực hiện việc này bằng cách đối sánh dòng cuối cùng (được chỉ định bởi “$”) và nối dòng ta cần.

Sau đó, ta cần khởi động lại daemon SSH để các thay đổi của ta được phổ biến. Ta có thể thực hiện việc này một cách dễ dàng bằng lệnh Upstart “khởi động lại”:

#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo     shell: /bin/bash runcmd:   - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config   - sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config   - restart ssh 

Điều này đủ để thực hiện các chỉnh sửa mà ta cần đối với file của bạn và khởi động lại dịch vụ.

Sản phẩm hoàn thiện

Hiện ta đã hoàn thành tất cả các mục tiêu đã điều chỉnh của bạn bằng cách sử dụng file cloud-config . Bạn có thể tạo server của bạn bằng console hoặc sử dụng API để tạo server .

Nếu bạn chọn sử dụng API, tải trọng dữ liệu mẫu có thể giống như sau:

{"name": "your_server_name", "private_networking": true, "region": "nyc3", "size": "512mb", "image": "ubuntu-14-04-x64", "user-data": "#cloud-config users:   - name: demo     ssh-authorized-keys:       - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIVv0RE6rDLNal1quXZ3nqAlANpl5qmhDQ+GS/sOtygSG4/9aiOA4vXO54k1mHWL2irjuB9XbXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IkaKdlK0hbC1ds0+8h83PTb9dF3L7hf3Ch/ghvj5++tWJFdFeG+VI7EDuKNA4zL8C5FdYYWFA88YAmM8ndjA5qCjZXIIeZvZ/z9Kpy6DL0QZ8T3NsxRKapEU3nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip user@example.com     sudo: ['ALL=(ALL) NOPASSWD:ALL']     groups: sudo     shell: /bin/bash runcmd:   - sed -i -e '/^Port/s/^.*$/Port 4444/' /etc/ssh/sshd_config   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config   - sed -i -e '$aAllowUsers demo' /etc/ssh/sshd_config   - restart ssh"} 

Xử lý sự cố

Nếu bạn đang gặp một số vấn đề để file cloud-config của bạn hoạt động bình thường, bạn có thể kiểm tra manh mối trong file log .

Chúng được đặt tại:

  • /var/log/cloud-init.log : Nhật ký quy trình thực tế cho quá trình xử lý file cấu hình của cloud-init.
  • /var/log/cloud-init-output.log : Mọi kết quả được tạo ra từ quá trình xử lý cấu hình đều có thể tìm thấy tại đây.

Bạn thường có thể tìm thấy một số thông tin tốt về những gì đã xảy ra bằng cách sử dụng grep để tìm kiếm các file này.

Nếu bạn đã gặp phải trường hợp không thể đăng nhập vào server mà bạn đã tạo do một số vấn đề về cấu hình, tốt nhất là bạn nên phá hủy server và bắt đầu lại. Để khắc phục sự cố, đôi khi cần cài đặt tạm thời một server thử nghiệm với password root trong file cloud-config để bạn có thể xem điều gì đang xảy ra.

Điều này có thể được thực hiện bằng cách bao gồm thông tin như thế này trong cloud-config của bạn:

#cloud-config chpasswd:   list: |     root:yourpassword   expire: False . . . 

Điều này sẽ cho phép bạn đăng nhập bằng console DigitalOcean, không dựa vào SSH. Lưu ý bất kỳ password nào bạn đặt ở đây sẽ có thể đọc được đối với mọi user trên server của bạn trong suốt thời gian hoạt động của hệ thống, vì vậy hãy tiêu hủy Server này sau khi bạn tìm ra sự cố. Sau đó, bạn có thể khởi động một server khác bằng cách sử dụng file cloud-config đã sửa.

Cài đặt quyền truy cập Sudo truyền thống

Nếu bạn muốn cấu hình quyền truy cập sudo thông thường, được xác thực bằng password sau khi server của bạn đã được triển khai, bạn có thể dễ dàng thực hiện các bước sau:

Đầu tiên, bạn cần đặt password cho account mới. Cách duy nhất để làm điều này mà không cần phải nhập password hiện tại (không tồn tại) là thông qua sudo . Bạn sẽ phải chỉ định tên account user mới của bạn ở cuối lệnh để không đặt password root :

sudo passwd demo 

Đến đây bạn đã có password cho account của bạn , hãy xác minh trên thực tế, bạn thuộc group sudo . Điều này có thể được thực hiện bằng lệnh :

groups 
demo sudo 

Nếu bạn chưa có trong group sudo , bạn có thể thêm chính mình bằng lệnh :

sudo usermod -a -G sudo demo 

Bây giờ, hãy chỉnh sửa file 90-cloud-init-users bằng lệnh visudo , bằng cách chuyển file dưới dạng đối số:

sudo visudo -f /etc/sudoers.d/90-cloud-init-users 

Comment hoặc xóa dòng liên quan đến user của bạn:

#demo ALL=(ALL) NOPASSWD:ALL 

Lưu và đóng file . Tài khoản của bạn bây giờ sẽ yêu cầu password của bạn để thực hiện các lệnh sudo .

Kết luận

Sử dụng các file cloud-config để hoàn thành cấu hình ban đầu của server có thể dễ dàng và giúp bạn tiết kiệm thời gian về lâu dài. Các file dễ dàng tinh chỉnh và xây dựng một số cấu hình khác nhau có thể mang lại cho bạn sự linh hoạt tuyệt vời trong việc nhanh chóng cài đặt server .

Bằng cách kết hợp cloud-config với hệ thống quản lý cấu hình truyền thống hơn sau khi máy đã được đưa lên mạng, bạn có thể nhanh chóng và dễ dàng đưa máy mới về trạng thái mong muốn một cách nhanh chóng và dễ dàng.


Tags:

Các tin liên quan

Cách bảo vệ server của bạn trước lỗ hổng bảo mật do Shellshock Bash
2014-09-25
Cách cài đặt server Percona mới hoặc thay thế MySQL
2014-09-18
Cách cài đặt puppet để quản lý cơ sở hạ tầng server của bạn
2014-08-15
Cách cấu hình BIND làm server DNS Mạng riêng trên Ubuntu 14.04
2014-08-12
Cách cấu hình BIND làm server DNS Mạng riêng trên Ubuntu 14.04
2014-08-12
Thiết lập server ban đầu với CentOS 7
2014-07-21
Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên CentOS 7
2014-07-21
Cách sử dụng NSD, một server DNS chỉ ủy quyền, trên Ubuntu 14.04
2014-07-03
Cách cấu hình bind server lưu trữ hoặc chuyển tiếp DNS trên Ubuntu 14.04
2014-07-01
cách cấu hình bind làm server DNS chỉ ủy quyền trên Ubuntu 14.04
2014-07-01