Thứ sáu, 24/03/2017 | 00:00 GMT+7

Cách bảo mật database OrientDB của bạn trên Ubuntu 16.04

OrientDB là một database NoSQL đa mô hình với sự hỗ trợ cho database tài liệu và đồ thị. Nó là một ứng dụng Java và có thể chạy trên bất kỳ hệ điều hành nào. Nó cũng có đầy đủ ACID-phàn nàn với sự hỗ trợ cho việc sao chép đa tổng thể.

Ngoài ra, OrientDB có một tư thế bảo mật rất tốt trong đó kết nối với version server và kết nối với database đều yêu cầu xác thực. Các schemas bảo mật khác, như xác thực Kerberos và user LDAP cũng được hỗ trợ, nhưng chúng liên quan đến việc cài đặt hệ thống phần mềm bổ sung.

Trong bài viết này, thay vào đó, ta sẽ tập trung vào việc đảm bảo cài đặt version Cộng đồng của OrientDB chỉ sử dụng các tài nguyên có sẵn theo mặc định. Cụ thể, bạn sẽ mã hóa database OrientDB, hạn chế quyền truy cập vào web server OrientDB và version server , đồng thời quản lý các account database OrientDB từ cả giao diện user web và console .

Yêu cầu

Để làm theo hướng dẫn này, bạn cần những thứ sau:

Bài viết này giả định OrientDB được cài đặt trong folder /opt/orientdb , như trong bài viết cài đặt root . /opt là vị trí truyền thống để cài đặt các ứng dụng của bên thứ ba trong Linux.

Bước 1 - Hạn chế quyền truy cập vào Server Web OrientDB

OrientDB là một ứng dụng web server thông thường, nhưng nó không nhằm mục đích tiếp xúc với Internet hoặc các mạng công cộng. Quyền truy cập quản lý vào nó phải được giới hạn trong mạng local .

Bước đầu tiên để chạy một ứng dụng OrientDB an toàn là bảo mật hệ điều hành mà nó đang chạy. Bạn nên chạy firewall . Nếu bạn không, hãy làm theo hướng dẫn Cài đặt Server Ban đầu trên Ubuntu 16.04 để cài đặt UFW. Hướng dẫn cài đặt OrientDB ban đầu cho phép truy cập vào OrientDB Studio từ mạng công cộng cho mục đích thử nghiệm bằng cách cho phép chuyển sang cổng 2480 thông qua firewall .

Nếu bạn cần đảm bảo quyền truy cập từ Internet vào OrientDB Studio và console luôn bị từ chối, dù cài đặt firewall như thế nào, bạn chỉ cần thực hiện một vài thay đổi đối với file cấu hình, /opt/orientdb/config/orientdb-server-config.xml .

Mở file đó để chỉnh sửa.

  • sudo nano /opt/orientdb/config/orientdb-server-config.xml

Sau đó, tìm thẻ listeners :

/opt/orientdb/config/orientdb-server-config.xml
. . . <listeners>   <listener protocol="binary" socket="default" port-range="2424-2430" ip-address="0.0.0.0"/>   <listener protocol="http" socket="default" port-range="2480-2490" ip-address="0.0.0.0">   . . . </listeners> . . . 

Và thay đổi các thông số ip-address từ 0.0.0.0 thành 127.0.0.1 .

/opt/orientdb/config/orientdb-server-config.xml
<listeners> . . .   <listener protocol="binary" socket="default" port-range="2424-2430" ip-address="127.0.0.1"/>   <listener protocol="http" socket="default" port-range="2480-2490" ip-address="127.0.0.1">   . . . </listeners> . . . 

Lưu và đóng file .

Khi một thay đổi được thực hiện đối với file cấu hình trong khi daemon OrientDB đang chạy, hãy đảm bảo khởi động lại nó:

  • sudo systemctl restart orientdb

Điều đó cắt đứt tất cả các kết nối đến Studio từ Internet công cộng. Bây giờ, hãy thử kết nối với Studio bằng cách truy cập lại http:// your_server_ip :2480 trong trình duyệt của bạn. Lần này, kết nối sẽ bị từ chối.

Trong bước này, bạn tập trung vào bảo mật từ mạng bên ngoài. Trong bước tiếp theo, bạn sẽ làm cho version server OrientDB an toàn hơn trong nội bộ.

Bước 2 - Bảo mật version server OrientDB

Tại đây, bạn sẽ tìm hiểu cách xóa account khách và sửa đổi quyền đối với file cấu hình của OrientDB.

Một điều bạn có thể làm để tăng cường bảo mật server là để cho đọc-ghi truy cập vào config folder duy nhất cho người sử dụng OrientDB. Quyền mặc định của folder đó là 755 , nhưng nó thậm chí không cần phải đặt bit thực thi.

  • sudo chmod 600 /opt/orientdb/config

Và để gỡ rối mọi thứ hơn một chút, hãy tăng cường quyền của chính file cấu hình.

  • sudo chmod 600 /opt/orientdb/config/orientdb-server-config.xml

Lưu ý : Các quyền này sẽ được đặt thành 600 theo mặc định trong phiên bản OrientDB trong tương lai . Tuy nhiên, tại thời điểm xuất bản, các bước này vẫn cần thiết.

Phần còn lại của các mẹo bảo mật trong hướng dẫn này sẽ được thực hiện thông qua console OrientDB, vì vậy hãy kết nối với nó ngay bây giờ.

  • sudo /opt/orientdb/bin/console.sh

Mỗi version server OrientDB có thể hỗ trợ nhiều database OrientDB. Ra khỏi hộp, mỗi trường hợp server đi kèm với hai account user : kháchroot. Bạn đã được cung cấp tùy chọn để đặt password account root khi lần đầu tiên bạn cài đặt và chạy server OrientDB. Dạng băm của password được lưu trữ trong file cấu hình /opt/orientdb/config/orientdb-server-config.xml , /opt/orientdb/config/orientdb-server-config.xml . Dạng băm của password được tạo tự động cho account khách cũng được lưu trữ trong file đó.

Từ console OrientDB, bạn có thể xem thông tin về cả hai account bằng lệnh :

  • list server users

Lưu ý : Hiện có một lỗi trong OrientDB sẽ gây ra lỗi sau khi bạn cố gắng chạy list server users :

Output
Error: com.orientechnologies.orient.core.exception.OConfigurationException: Cannot access to file ../config/orientdb-server-config.xml

Nếu bạn nhận được lỗi này, bạn có thể khắc phục nó bằng cách thoát khỏi console OrientDB và kết nối lại sau khi chuyển đến folder bin .

  • cd /opt/orientdb/bin
  • sudo ./console.sh

Sau đó, bạn có thể chạy list server users và nó sẽ hoạt động như mong đợi.

Kết quả sẽ cho bạn biết cả hai account có quyền gì. Tài khoản khách có các quyền hạn chế, nhưng user root được phép thực hiện tất cả các việc . Đó là những gì dấu hoa thị thay cho quyền của nó cho biết:

Output
SERVER USERS - 'guest', permissions: connect,server.listDatabases,server.dblist - 'root', permissions: *

Ngay cả với các quyền hạn chế, bạn có thể không muốn giữ account khách. Để xóa nó khỏi console , hãy sử dụng lệnh drop .

  • drop server user guest

Lần tới khi bạn list server users từ console OrientDB, nó sẽ chỉ hiển thị user gốc . Nếu bạn nhìn vào bên trong file /opt/orientdb/config/orientdb-server-config.xml , bạn sẽ thấy rằng account khách đã bị xóa khỏi thẻ user .

Bây giờ cá thể server đã an toàn hơn, tiếp theo bạn sẽ làm cho chính database đó an toàn hơn.

Bước 3 - Hạn chế quyền truy cập vào database OrientDB

Bước tiếp theo đảm bảo cài đặt OrientDB của bạn là làm cho nó rất khó truy cập trái phép vào chính database .

Theo mặc định, mọi database OrientDB bạn tạo đều có ba account tích hợp sẵn với các tên user sau: admin , readerwriter , mỗi account có một password giống với tên user . Điều này tốt cho việc thử nghiệm, nhưng không tốt cho một hệ thống production . Ít nhất, bạn nên thay đổi password cho cả ba account . Thậm chí tốt hơn, bạn nên xóa hoặc tạm ngưng bất kỳ thứ gì bạn không cần.

Cách bạn chọn để quản lý các account này tùy thuộc vào nhu cầu và môi trường của bạn. Đối với hướng dẫn này, bạn sẽ học cách thay đổi password của account quản trị , tạm ngưng account người viết và xóa account người đọc . Bạn có thể thực hiện bất kỳ hành động nào trong ba thao tác này từ console OrientDB và OrientDB Studio dựa trên trình duyệt.

Quản lý Tài khoản User từ Control panel OrientDB

Để thay đổi account user từ console , bạn cần kết nối với database có account mà bạn định quản lý. Ví dụ này kết nối với database GratefulDeadConcerts , một database mẫu đi kèm với mọi cài đặt OrientDB, sử dụng user quản trị và password mặc định ( administrator ):

  • connect remote:127.0.0.1/GratefulDeadConcerts admin admin

Ngoài ra, bạn cũng có thể kết nối với account gốc và password của server OrientDB. Trong cả hai trường hợp, dấu nhắc sẽ thay đổi để cho biết rằng bạn đã kết nối với một database cụ thể.

Output
Connecting to database [remote:127.0.0.1/GratefulDeadConcerts] with user 'admin'...OK orientdb {db=GratefulDeadConcerts}>

Để liệt kê những user của database , hãy nhập như sau. ouser là bản ghi OrientDB nơi lưu trữ password user :

  • select from ouser

Đầu ra hoàn chỉnh phải như sau. Lưu ý cả ba account đều có trạng thái HOẠT ĐỘNG .

Output
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+ |# |@RID|@CLASS|name |password |status|roles | +----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+ |0 |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}6668FC52BF1D2883BEB4DC3A0468F734EA251E6D5B13AC51:39B1E812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE|[#4:0]| |1 |#5:1|OUser |reader|{PBKDF2WithHmacSHA256}1168D930D370A0FB1B6FA11CAFF928CCB412A153C127C25F:0C287793DF156FB72E6E2D9D756E616995BBAC495D4A1616:65536|ACTIVE|[#4:1]| |2 |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}22D3068CC3A39C08A941B4BF8B4CEB09D2609C20661529E3:8D6DA7FB4AF329234CA643663172EE913764E3096F63D007:65536|ACTIVE|[#4:2]| +----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+------+------+ 3 item(s) found. Query executed in 0.736 sec(s).

Để thay đổi password cho user quản trị , hãy sử dụng lệnh sau:

  • update ouser set password = 'new_account_password' where name = 'admin'

Để tắt user người viết , hãy thay đổi trạng thái từ ACTIVE thành SUSPENDED .

  • update ouser set status= 'SUSPENDED' where name = 'writer'

Để xóa hoàn toàn account người đọc khỏi database , hãy sử dụng:

  • drop user reader

Nếu bạn đã thực hiện tất cả những điều trên và xem lại danh sách account , bạn sẽ thấy kết quả sau. Một trong các account bị thiếu và một account khác bị tạm ngưng:

Output
+----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+ |# |@RID|@CLASS|name |password |status |roles | +----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+ |0 |#5:0|OUser |admin |{PBKDF2WithHmacSHA256}6668FC52BF1D2883BEB4DC3A0468F734EA251E6D5B13AC51:39B1E812DEC299DC029A7922E206ED674EB52A6D6E27FE84:65536|ACTIVE |[#4:0]| |1 |#5:2|OUser |writer|{PBKDF2WithHmacSHA256}22D3068CC3A39C08A941B4BF8B4CEB09D2609C20661529E3:8D6DA7FB4AF329234CA643663172EE913764E3096F63D007:65536|SUSPENDED|[#4:2]| +----+----+------+------+-----------------------------------------------------------------------------------------------------------------------------+---------+------+

Sau khi hoàn thành tất cả các việc quản lý user , bạn có thể ngắt kết nối khỏi database (nghĩa là đóng nó) bằng lệnh :

  • disconnect

Quản lý account user OrientDB từ OrientDB Studio

Trong phần này, bạn sẽ học cách quản lý account user OrientDB từ OrientDB Studio. Để bắt đầu, hãy chạy studio bằng cách truy cập http:// your_server_ip :2480 trong trình duyệt của bạn. Nếu bạn đã hạn chế quyền truy cập vào Studio ở Bước 1, bạn cần phải cho phép lại.

Màn hình đầu tiên bạn sẽ thấy là màn hình đăng nhập. Đăng nhập bằng quyền root và password bạn đã cài đặt OrientDB. Sau khi đăng nhập, hãy nhấp vào tab Bảo mật . Trên trang đó, bạn sẽ thấy tất cả ba user mặc định.

Để thay đổi password của account quản trị :

  1. Nhấp vào CHỈNH SỬA bên dưới cột Hành động , sẽ xuất hiện một cửa sổ Chỉnh sửa User nhỏ.
  2. Thay đổi password trong trường mật khẩu .
  3. Nhấp vào LƯU NGƯỜI DÙNG .

Để xóa account người đọc :

  1. Nhấp vào nút XÓA trong cột Hành động của account .

Để tạm ngưng account người viết :

  1. Nhấp vào CHỈNH SỬA bên dưới Tác vụ , sẽ xuất hiện một cửa sổ Chỉnh sửa User nhỏ.
  2. Trong menu thả xuống Trạng thái , chọn TẠM NGỪNG .
  3. Nhấp vào LƯU NGƯỜI DÙNG .

Trong bước tiếp theo, bạn sẽ học cách mã hóa database OrientDB.

Bước 4 - Mã hóa Database OrientDB

OrientDB hỗ trợ database được mã hóa, cho phép bạn bảo mật thêm trên dữ liệu được lưu trữ của bạn . Bạn chỉ có thể mã hóa database OrientDB khi nó được tạo; nếu bạn cần mã hóa database hiện có, bạn sẽ phải xuất và nhập nó vào database được mã hóa. Đối với phần này, ta sẽ đi qua quá trình xác định rằng một database được mã hóa tại thời điểm tạo.

OrientDB hỗ trợ cả thuật toán mã hóa AES và DES, nhưng AES được ưa thích hơn vì nó mạnh hơn. Ta cần đặt khóa mã hóa, tạo database và chỉ định phương pháp mã hóa (AES hoặc DES). Lưu ý độ dài của khóa mã hóa phải là 24 ký tự và hai ký tự cuối cùng phải là == .

Để tạo khóa mã hóa, bạn có thể sử dụng pwgen , một công cụ tạo password .

  • sudo apt-get install pwgen

Sau đó, tạo một khóa 24 ký tự kết thúc bằng == bằng lệnh sau:

  • echo `pwgen 22 1`==

Hãy nhớ cất giữ khóa này ở một nơi an toàn, giống như bạn làm password . Để đặt khóa mã hóa cho database mới mà bạn muốn tạo, hãy nhập thông tin sau vào console OrientDB:

  • config set storage.encryptionKey Ohjojiegahv3tachah9eib==

Sau đó, tạo database được mã hóa bằng khóa đó. Điều này tạo ra database dựa trên tài liệu, được mã hóa trong hệ thống file local ( plocal ).

  • create database plocal:/opt/orientdb/databases/name_of_encrypted_db root root_password plocal document -encryption=aes

Bạn sẽ tự động được kết nối với database mới và dấu nhắc sẽ thay đổi để phản ánh điều đó. Để ngắt kết nối khỏi database , chỉ cần nhập:

  • encrypted-db}>'>disconnect

Lưu ý khóa mã hóa được sử dụng để mã hóa database OrientDB không được lưu trữ trên hệ thống. Khi nào bạn muốn tương tác với database từ console , bạn sẽ phải nhập cùng một lệnh mà bạn đã sử dụng để đặt khóa mã hóa.

  • config set storage.encryptionKey Ohjojiegahv3tachah9eib==

Sau đó, để mở database , bạn sẽ nhập:

  • connect plocal:/opt/orientdb/databases/name_of_encrypted_db admin admin_password

Lưu ý mặc dù bạn có thể tạo database mới từ OrientDB Studio, nhưng bạn không thể tạo database được mã hóa. Tại thời điểm xuất bản, bạn chỉ có thể tạo database được mã hóa từ console .

Kết luận

Trong hướng dẫn này, bạn đã hạn chế quyền truy cập vào cài đặt OrientDB, quản lý account user cả từ console và giao diện user web, đồng thời mã hóa database OrientDB ở trạng thái còn lại. Đây là những cấu hình bảo mật cơ bản nhưng quan trọng mà bạn có thể thực hiện để tăng cường cấu hình bảo mật của server OrientDB và database .

Hiện tại, bạn có thể truy cập thông tin bổ sung về bảo mật OrientDB bằng cách truy cập tài liệu OrientDB này về chủ đề đó.


Tags:

Các tin liên quan

Cách backup, khôi phục và di chuyển database MongoDB trên Ubuntu 14.04
2016-04-15
Cách nhập và xuất database MongoDB trên Ubuntu 14.04
2016-04-15
Cách chạy database cụm đa node với Cassandra trên Ubuntu 14.04
2016-03-31
Cách nhập và xuất database OrientDB trên Ubuntu 14.04
2016-01-06
Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL
2014-04-17
Cách kết nối Node.js với database MongoDB trên VPS
2013-10-09
Cách thiết lập database MongoDB có thể mở rộng
2013-02-26