Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

27 tháng 1, 2019

Ý nghĩa các bản ghi DNS

1. Bản ghi A
Được sử dụng để gắn một domain với một địa chỉ IPv4 cụ thể theo cấu trúc name - value, trong đó name sẽ là hostname hoặc một subdomain.
Giá trị nhận vào là một IPv4.
Trên Amazon Route 53,  value có thể là một alias trỏ tới một tên miền khác.
2. Bản ghi AAAA
Có ý nghĩa tương tự như bản ghi A nhưng value là một địa chỉ IPv6
Giá trị nhận vào là một IPv6
3. Bản ghi CNAME
Là viết tắt của Canonical Name.
Bản ghi được sử dụng để trỏ một domain tới một domain khác.
Giá trị là một domain/subdomain.
Ví dụ: domain1.com --> domain2.com.
4. Bản ghi MX
Là bản ghi được sử dụng để trỏ tới các máy chủ mail.
5. Bản ghi NS
Là viết tắt của Name Server.
Là bản ghi chứa danh sách các Name Server (hoặc hiểu nôm na là các DNS server) được sử dụng để trả về các truy vấn tên miền.
Giá trị nhận vào là danh sách domain DNS
Ví dụ khi bạn truy vấn 1 tên miền sẽ thấy danh sách các server trả lời truy vấn như sau:
ns1.itahost.com
ns2.itahost.com
6. Bản ghi SOA
Là viết tắt của Server Of Authority.
Mọi domain bắt buộc phải có bản ghi này.
Cấu trúc của bản ghi này bao gồm:
https://www.techopedia.com/2/28806/internet/12-dns-records-explained
  • Địa chỉ Name Server chính của tên miền (thường là địa chỉ DNS)
  • Địa chỉ mail của người có trách nhiệm nếu gặp sự cố (Lưu ý, bản ghi SOA không chấp nhận @ nên địa chỉ này sẽ thay @ bằng dấu ".", admin@gmail.com sẽ thành admin.gmail.com)
  • Timestamp của lần cập nhật gần nhất.
  • Tần suất để làm mới nội dung bản ghi, tính bằng giây.
  • Số giây để hệ thống thử cập nhật lại nội dung bản ghi nếu việc làm mới bị lỗi.
  • Số giây tối đa để hệ thống coi một máy chủ gốc giữ nội dung bản ghi tham chiếu là lỗi.
  • Chỉ ra thời gian sống (TTL) tối đa mà một kết quả mà DNS trả về có hiệu lực, nếu quá thời điểm này, client cần truy vấn lại để lấy thông tin.
7.Bản ghi RP
Là viết tắt của Responsible Person.
Bản ghi này thường nằm trong bản ghi SOA, thường là địa chỉ email của người quản trị để liên hệ khi gặp sự cố.
8. Bản ghi SPF
Là viết tắt của Sender Policy Framework.
Bản ghi này được sử dụng để chỉ ra danh sách các máy chủ được phép gửi mail từ domain này.
9. Bản ghi TXT
Đây là một bản ghi tùy chọn, được sử dụng cho rất nhiều mục đích khác nhau. Ví dụ ta có thể dùng nội dung bản ghi này để xác thực chủ sở hữu tên miền,...
Xem thêm tại:

27 tháng 10, 2018

Mẹo nhỏ để học một ngôn ngữ lập trình mới

Bài viết này mình viết để hướng dẫn các bạn lập trình viên cách để học một ngôn ngữ lập trình mới.
Yêu cầu:

  • Bạn phải nắm vững một ngôn ngữ lập trình trước đó, mình khuyên nên là Java hoặc C vì 2 ngôn ngữ này có cách viết khá hệ thống và quy củ, các ngôn ngữ khác khiến người học bị rối khi chuyển ngôn ngữ nên mình không khuyên dùng (theo ý kiến chủ quan thì một số ngôn ngữ đó là Ruby on rails, Python, PHP)
  • Hãy tự tạo cho mình một phong cách viết code riêng (ví dụ cách thụt đầu dòng, cách đặt dấu '{') để tránh bị rối khi học quá nhiều ngôn ngữ lập trình.
  • Loại bỏ tư tưởng bắt buộc ngôn ngữ mới phải có được những tính năng như ngôn ngữ cũ (ví dụ đừng đòi hỏi java phải có con trỏ giống như C).
  • Khi gặp các ví dụ trong ngôn ngữ mới, hãy gõ lại nó bằng tay, tự chạy nó để cảm nhận.
  • Hãy viết ngôn ngữ mới theo cách mình đã viết ngôn ngữ cũ, ví dụ mình có thể viết javascript theo phong cách viết của Java (điều này rất tiện cho mình khi quay lại đọc code sau này, và đỡ phải nhớ quá nhiều quy ước viết code)
Kết quả mong muốn:

  • Nắm được cách sử dụng ngôn ngữ lập trình mới ở mức cơ bản (Cách sử dụng nâng cao hơn bạn sẽ tự hình thành được trong quá trình sử dụng ngôn ngữ lập trình này)
  • Lập trình Hello world không gặp lỗi ^.^
Bạn chuẩn bị những thứ như sau:

  • Lựa chọn một ebook dạy ngôn ngữ đó (nếu có), mình khuyên nên chọn những cuốn có tiêu đề kiểu "Học trong 7 ngày", "Học trong 21 ngày" vì thường những cuốn này có nội dung rất cô đọng và dễ hiểu.
  • Cài đặt IDE phù hợp, cái này thì tùy bạn chọn, các hướng dẫn cài đặt rất nhiều trên mạng.
Rồi, giờ là thứ tự học:
  • Học cách khai báo biến, các kiểu biến như số nguyên, xâu, số thực,...(trừ một số kiểu phức tạp như array, list, map,...)
  • Học các phép toán: cộng, trừ, nhân, chia, số mũ,...
  • Học cách sử dụng lệnh rẽ nhánh.
  • Học cách sử dụng vòng lặp.
  • Học cách sử dụng mảng, danh sách, từ điển (dictionary)
  • Học cách sử dụng hàm: tạo hàm, gọi hàm
  • Học về phạm vi của biến: toàn cục (local) hay toàn bộ (global)
  • Học cách sử dụng class: hàm khởi tạo, hàm, thuộc tính.
  • Học cách khai báo Object
  • Học mở rộng, nếu muốn:
    • Kế thừa.
    • Import thư viện
    • Học cách bắt Exception
    • Cách sử dụng comment
Với cách học này, mình thường chỉ tốn tối đa là 7 ngày để nắm được cách sử dụng một ngôn ngữ mới :)
Chúc các bạn vui vẻ,

19 tháng 9, 2018

Cài đặt Kerberos trên Linux

Lưu ý: Kerberos sử dụng giao thức dựa trên việc đồng bộ thời gian giữa các server thành phần nên yêu cầu các server phải đồng bộ thời gian với nhau ==> Sử dụng NTP. Thời gian lệch giữa các client  tối đa là 5 phút.

Cài đặt server KDC:

Bước 1: cài đặt phiên bản mới nhất của KDC

RHEL/CentOS/Oracle Linux
yum install krb5-server krb5-libs krb5-workstation
SLES
zypper install krb5 krb5-server krb5-client
Ubuntu/Debian
apt-get install krb5-kdc krb5-admin-server

Bước 2: Sửa file

vi /etc/krb5.conf
Đổi phần [realms] thành hostname của máy chủ cài đặt KDC, ví dụ:

[realms]
EXAMPLE.COM = {
   kdc = my.kdc.server
   admin_server = my.kdc.server
}

Bước 3: Một số thành phần, ví dụ HUE, yêu cầu phải có một ticket có thể làm mới được vì thế cần cấu hình để KDC hỗ trợ yêu cầu này bằng cách thêm tùy chọn sau vào file /etc/krb5.conf:
renew_lifetime = 7d

Lưu ý: Trên Ubuntu/Debian, các bước thiết lập được thực hiện khi cài đặt mới KDC, bạn có thể cài đặt lại bằng cách chạy lệnh dpkg-reconfigure krb5-kdc, vì thế có thể bỏ qua bước 1 và 2 ở trên.

Tạo cơ sở dữ liệu cho Kerberos:

Bước 1: Sử dụng tool kdb5_util:

RHEL/CentOS/Oracle Linux
kdb5_util create -s
SLES
kdb5_util create -s
Ubuntu/Debian
krb5_newrealm

Nhập mật khẩu cho database (lưu ý phải nhớ mật khẩu này, nếu không thì không thể giải mã được dữ liệu nữa)

Bước 2: khởi động máy chủ KDC và máy chủ quản trị KDC

RHEL/CentOS/Oracle Linux 6
/etc/rc.d/init.d/krb5kdc start
/etc/rc.d/init.d/kadmin start
RHEL/CentOS/Oracle Linux 7
systemctl start krb5kdc
systemctl start kadmin
SLES 11
rckrb5kdc start
rckadmind start
SLES 12
systemctl start krb5kdc
systemctl start kadmind
Ubuntu/Debian
service krb5-kdc restart
service krb5-admin-server restart

Bước 3(tùy chọn): khởi động KDC cùng với máy bằng cách:
RHEL/CentOS/Oracle Linux 6
chkconfig krb5kdc on
chkconfig kadmin on
RHEL/CentOS/Oracle Linux 7
systemctl enable krb5kdc
systemctl enable kadmin
SLES 11
chkconfig rckrb5kdc on
chkconfig rckadmind on
SLES 12
systemctl enable krb5kdc
systemctl enable kadmind
Tạo tài khoản quản trị Kerberos:
Có thể tạo tài khoản này từ các máy chạy KDC trong cùng mạng, sử dụng quyền admin. Trong hướng dẫn này, giả sử bạn sử dụng kadmin.local trên máy chạy KDC. kadmin.local cho phép bạn phân quyền mà không cần sử dụng tài khoản admin.
Bước 1: tạo tài khoản admin
kadmin.local -q "addprinc admin/admin"
Bước 2: xác nhận lại tài khoản này có đủ quyền cần thiết trong KDC ACL bằng cách kieer tra file kadm5.acl
RHEL/CentOS/Oracle Linux
vi /var/kerberos/krb5kdc/kadm5.acl
SLES
vi /var/lib/kerberos/krb5kdc/kadm5.acl
Ubuntu/Debian
vi /etc/krb5kdc/kadm5.acl
Ví dụ bạn có tài khoản admin@EXAMPLE.COM, bạn cần thêm dòng sau vào file:
*/admin@EXAMPLE.COM *
Bước 3: khởi động lại kadmin:
RHEL/CentOS/Oracle Linux 6
/etc/rc.d/init.d/kadmin restart
RHEL/CentOS/Oracle Linux 7
systemctl restart kadmin
SLES
rckadmind restart
Ubuntu/Debian
service krb5-admin-server restart

Bài tham khảo: https://docs.hortonworks.com/HDPDocuments/Ambari-2.5.0.3/bk_ambari-security/content/optional_install_a_new_mit_kdc.html

07 tháng 9, 2018

Tản mạn một vài dạng lưu trữ database

1. Hbase

Hbase lưu trữ dữ liệu theo cấu trúc column family.
Có thể nhìn vào hình sau để hình dung:



Trong đó:

  • Một table có thể có nhiều column family.
  • Một column family có thể có nhiều column.
Một số note:
  • Có thể query Hbase theo dạng sql bằng cách sử dụng Hive
2.  MongoDB:
MongoDB lưu trữ dữ liệu phẳng dạng Json:
Có thể nhìn vào hình sau để hình dung:

03 tháng 1, 2017

Hướng dẫn sử dụng Iptables nâng cao

Trong bài viết trước tôi đã có giới thiệu các kiến thức cơ bản về iptables.
Trong bài này, tôi sẽ hướng dẫn cụ thể các bạn cách sử dụng iptables để bảo vệ hệ thống của mình.

Một lưu ý trước khi sử dụng iptables để tránh xảy ra các vấn đề không mong muốn:

  • Nên bắt đầu sử dụng Iptables với hướng tiếp cận Accept từ mọi nguồn hoặc Drop từ mọi nguồn (Cái này bạn cần xác định xem nhu cầu của mình là số lượng cổng mở nhiều hơn hay số lượng cổng muốn đóng là nhiều hơn - tương ứng với Accept all và Drop all)
  • Nên cho một địa chỉ nguồn nằm trong danh sách Accept all để tránh việc sau khi chạy iptable ta không thể remote hệ thống.
  • Mức độ ưu tiên sẽ là từ trên xuống và nếu gặp một luật khớp thì các luật phía sau sẽ bị bỏ qua.
Dưới đây là một số tùy chọn thường dùng:
  • A: nối tiếp luật vào một bảng luật có sẵn. Ví dụ nếu ta dùng:
    iptables -A INPUT -s 1.2.3.4 -j DROP
    Có nghĩa là thêm một luật vào cuối cùng của bảng INPUT.
  • I: chèn luật lên đầu một bảng luật có sẵn.
  • s: ip máy chủ sẽ được áp dụng luật.
  • j: luật sẽ áp dụng là gì.
    ACCEPT: cho phép thông luồng
    DROP: cấm luồng và không thông báo gì cho máy kết nối
    REJECT: cấm luồng và thông báo cho máy kết nối
    LOG: thông luồng nhưng có ghi lại log.
  • dport: cổng áp dụng là gì.
  • m -conntrack: áp dụng luật với trạng thái của kết nối (thường đi với tùy chọn --ctstate)
  • ctstate: định nghĩ các trạng thái sẽ áp dụng luật, bao gồm:
    NEW: là các kết nối mới mà hệ thống chưa gặp bao giờ.
    RELATED: là kết nối mới nhưng có liên quan tới kết nối đã được cho phép.
    ESTABLISHED: là kết nối đã được thiết lập.
    INVALID: là kết nối mà hệ thống không thể nhận diện.
  • p: giao thức của kết nối, có thể là TCP hoặc UDP
  • i: giao diện kết nối.
  • d: đích kết nối.
Dưới đây là một số thủ thuật khi sử dụng Iptables:
  • Với tham số "d", Ip có thể có định dạng a.b.c.d/x.y.z.w, hoặc a.b.c.d/x. Trong đó a.b.c.d là địa chỉ IP còn x.y.z.w hoặc x là IP mask.
  • Với tham số "i", đầu vào có thể sử dụng thêm tùy chọn:
    • ! - nghĩa là áp dụng trừ giao diện này.
    • + - nghĩa là chỉ áp dụng giao diện này.
  • Với tham số dport: có thể chỉ ra dải cổng cần tác động theo cấu trúc a:b, là cổng tác động bắt đầu từ a tới b.

Tham khảo:

01 tháng 12, 2016

Hướng dẫn cài đặt Maven trên Centos

Trong bài viết này, tôi sẽ giới thiệu về cách cài đặt Maven trên môi trường Centos.
Yêu cầu:

  • Bạn phải có quyền sudo trên hệ thống.
  • Bạn phải cài đặt JDK trên hệ thống.
  • Download bộ cài Maven từ địa chỉ http://maven.apache.org/download.cgi
Các bước thực hiện:

  • Giải nén bộ cài bằng lệnh (chú ý thay đổi thông tin phiên bản cho phù hợp):
    sudo tar xzf apache-maven-3.0.5-bin.tar.gz -C /usr/local
  • Chuyển tới thư mục /usr/local.
  • Tạo link với thư mục Maven bằng lệnh (chú ý thay đổi phiên bản cho phù hợp):
    sudo ln -s apache-maven-3.0.5 maven
  • Tạo biến môi trường cho hệ thống bằng cách tạo tập tin maven.sh như sau:
    sudo vi /etc/profile.d/maven.sh
    export M2_HOME=/usr/local/maven
    export PATH=${M2_HOME}/bin:${PATH}
  • Cuối cùng logout và login lại rồi kiểm tra bằng lệnh
    mvn -version
    Nếu thấy hiện ra phiên bản của maven là được.
Lưu ý nếu bạn cài maven trong môi trường proxy thì cần thêm nội dung sau để sử dụng:
  • Tạo tập tin settings.xml bằng lệnh:
    vi ~/.m2/settings.xml
  • Nội dung của tập tin sẽ như sau:
    
      
        
          true
          http
          proxy.host.com
          port_number
          proxy_user
          proxy_user_password
          www.google.com
        
      
    
  • Trong đó:
    •  proxy.host.com là địa chỉ máy chủ proxy.
    • port_number là cổng máy chủ proxy
    • proxy_user là user để đăng nhập proxy.
    • proxy_user_pasword là mật khẩu đăng nhập proxy
    • nonProxyHosts là các host không cần phải qua proxy
Tham khảo thêm tại địa chỉ:

12 tháng 11, 2016

Hướng dẫn cài đặt Hbase ở chế độ Distributed

Tiếp tục loạt bài hướng dẫn làm quen với BigData, hôm nay tôi sẽ hướng dẫn các bạn cách cài đặt Hbase.
Hbase là gì thì các bạn có thể tìm thông tin trên mạng.
Bài này được tóm tắt từ công việc thực tế của tác giả (mất 2 ngày ngồi ngẫm nghĩ và xử lý các vấn đề phát sinh) vì thế nên tỉ lệ cài thành công khá cao, nên nếu gặp lỗi thì chắc chắn bạn đã làm sai ở một bước nào đó.
Bài viết giả sử bạn đã cài đặt thành công Hadoop ở chế độ Distrubted từ trước.
1. Cài đặt HBase
Bạn có thể download bộ cài Hbase tại đây: http://www-us.apache.org/dist/hbase/
Tiến hành giải nén Hbase vào thư mục /opt/:
$ tar -xzf hbase-0.98.18-hadoop2-bin.tar.gz
Thêm biến môi trường vào tập tin ~/.bash_profile với nội dung sau:
export HBASE_HOME="/opt/hbase"
export PATH="$HBASE_HOME/bin:$PATH"
Kiểm tra xem đã cài đặt thành công chưa bằng lệnh:
hbase version
2. Cấu hình cho HBase
Sửa nội dung tập tin /opt/hbase/conf/hbase-env.sh với nội dung sau:
export JAVA_HOME=/usr/java/default
export HBASE_MANAGES_ZK=true
export HBASE_PID_DIR=/opt/hbase/var
Lưu ý:

  • Nếu HBASE_MANAGES_ZK = true tức là ta không phải cài thêm zookeeper nữa mà HBase sẽ tự quản lý bằng Zookeeper của mình (Cài đặt ZooKeeper riêng như nào sẽ được giới thiệu trong một bài viết khác)
  • HBASE_PID_DIR là thư mục đặt file pid của HBase, nếu chưa có thì phải tự tạo.
Tiếp tục sửa nội dung tập tin /opt/hbase/conf/hbase-site.xml và thêm vào nội dung sau;

        
                hbase.master
                sglamp.edumall.co.th:60000
        
        
                hbase.master.info.port
                60010
        
        
                hbase.rootdir
                hdfs://sglamp.edumall.co.th:9000/hbase
        
        
                hbase.cluster.distributed
                true
        
        
                
                        hbase.zookeeper.property.dataDir
                
                hdfs://sglamp.edumall.co.th:9000/zookeeper
        
        
                hbase.zookeeper.quorum
                sglamp2.edumall.co.th
        
        
                hbase.zookeeper.property.clientPort
                2181
        
        
                hbase.zookeeper.property.maxClientCnxns
                1000
        

Lưu ý:

  • Cần cấu hình thông tin  hbase.master.info.port thì mới có web ui để xem, nếu muốn disable thì bỏ dong này đi.
  • Số lượng Zookeeper quorum nên là số lẻ.
  • hbase.cluster.distributed phải là true.
  • hbase.master.info.port phải được để trên mọi file hbase-site.xml của các node.
Mở tập tin /opt/hbase/conf/regionservers trên tất cả các node của Hbase và thêm nội dung sau:
node1
node2
Trong đó nodex là hostname của tất cả các node trên Hbase.
3. Chạy Hbase
Để khởi động Hbase ta chạy lệnh sau:
/opt/hbase/bin/shServer.sh start 
Để tắt Hbase ta chạy lệnh sau:
/opt/hbase/bin/shServer.sh stop