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-configcủ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 filecloud-configcủ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 : 
 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ị path và content .
 Đườ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.
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 Bash2014-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
Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên CentOS 7
2014-07-21
Thiết lập server ban đầu với 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 làm server DNS chỉ ủy quyền trên Ubuntu 14.04
2014-07-01
So sánh các loại server DNS: Cách chọn cấu hình DNS phù hợp
2014-07-01
 

