Một vài thiết lập cơ bản khi cài đặt máy chủ Linux

linux-server

Khi cài đặt xong máy chủ Linux như CentOS, Ubuntu, có một vài thiết lập bạn cần phải hiểu để cấu hình được. Cùng tìm hiểu với mình nhé.

1. Kiểm tra xem một máy tính cài được hệ điều hành (OS) 32bit hay 64bit

Để kiểm tra việc này, Bạn có thể dùng lệnh sau để kiểm tra thông qua giao diện command line:

lspcu

Lệnh này sẽ hiển thị thông tin cho bạn biết là CPU hỗ trợ phiên bản cài đặt nào.

Như hình trên máy mình, các bạn có thể thấy CPU hỗ trợ trên cả 2 chế độ là 32-bit và 64-bit, và hệ điều hành mình đang dùng là bản 64 bit (dòng Architecture là x86_64)

Ngoài ra, có một cách khác để bạn có thể kiểm tra nhanh xem máy bạn đang sử dụng hệ điều hành bản 32 bít hay 64 bít bằng lệnh sau:

uname -p

2. Thay đổi múi giờ (TimeZone) trên máy chủ Linux Server (CentOS, Ubuntu)

Thực tế, trường hợp hay gặp nhất là người dùng tại Việt Nam thuê VPS hay đặt máy chủ tại các quốc gia khác, khi đó hệ thống sẽ cập nhật thời gian theo múi giờ tại quốc gia đó. Việc đặt lại đúng múi giờ cho máy chủ tưởng chừng như không quan trọng nhưng thực tế là rất quan trọng. Đặc biệt trong một số trường hợp:

  • Xem log hệ thống
  • Cần đồng bộ thời gian giữa các dịch vụ chạy trên máy chủ với các dịch vụ tại các máy chủ khác
  • Các lệnh thực thi tự động theo lịch trình đặt trên máy chủ

Để đặt lại múi giờ cho máy chủ Linux Server, bạn làm như sau:

2.1. Đối với máy chủ CentOS

– Kiểm tra múi giờ hiện tại:

# date

– Cập nhật lại timezone sang Asia/Ho_Chi_Minh:

# rm -f /etc/localtime 
# ln -s /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime

– Xem lại kết quả đã thay đổi chưa bằng cách dùng lệnh: #date như trên. Ngoài ra, bạn có thể lựa chọn các timezone khác tại đây: /usr/share/zoneinfo/

2.2. Đối với máy chủ Ubuntu

– Kiêm tra thời gian hiện tại trên máy chủ

#timedatctl

– Xem danh sách giờ các nước trong khu vực Asia có trên hệ thống

#timedatectl list-timezones | grep Asia

– Cập nhật lại timezone cho server

#timedatectl set-timezone Asia/Ho_Chi_Minh

– Xem lại kết quả đã thay đổi chưa bằng cách dùng lệnh: #timedatectl như trên.

3. Cấu hình địa chỉ IP cho máy chủ

Trong bài viết này, mình sẽ hướng dẫn các bạn cấu hình địa chỉ IP tĩnh cho máy chủ Ubuntu Server 16.04. Trước tiên, bạn cần phải login vào máy chủ bằng cách ssh hoặc login trực tiếp thông qua giao diện cung cấp trên VPS hoặc Cloud Server. Sau đó, bạn thực hiện lần lượt theo các lệnh sau:

Bước 1: gõ lệnh sau để sửa file cấu hình:

sudo vim /etc/network/interfaces hoặc  sudo nano /etc/network/interfaces

Bước 2: cửa sổ hiện lên và bận cần cấu hình như sau:

# card mạng loopback (giữ nguyên không cần cấu hình) 
auto lo 
iface lo inet loopback 
# cấu hình địa chỉ IP cho card mạng chính ở đây 
auto ens160 
iface ens160 inet static 
address 192.168.1.130 
netmask 255.255.255.0 
gateway 192.168.1.1 
dns-nameservers 8.8.8.8 8.8.4.4

Chú ý: ens160 là tên card mạng, bạn cần kiểm tra tên card mạng trên máy bạn và sửa lại cho phù hợp bằng cách dùng lệnh:

ifconfig 
hoặc 
ifconfig -a

Bước 3: Cuối cùng, bạn hãy lưu lại file trên và khởi động lại dịch vụ mạng bằng lệnh:

sudo /etc/init.d/networking restart

Bạn có thể kiểm tra lại bằng cách dùng lệnh ifconfig.

4. Cấp quyền sudo cho người dùng trong Linux Server

Trong hệ điều hành Linux, sudo được dùng khi muốn thực thi một lệnh với quyền của một user khác. Các khai báo cấp quyền này được đặc tả trong file “/etc/sudoers”. Những ghi nhận (log) của hệ thống khi sudo được sử dụng theo mặc định nằm trong file /var/log/secure (Red Hat/Fedora / CentOS Linux) hoặc /var/log/auth.log (Ubuntu / Debian Linux).

– Nếu người triệu gọi sudo là root hoặc khi người triệu gọi và người được “mượn” quyền là một thì sẽ không có xác nhận mật khẩu. Còn ngoài ra, sudo yêu cầu người dùng phải tự xác nhận bằng mật khẩu. Lưu ý ở đây là trong cấu hình mặc định thì mật khẩu để xác nhận này là mật khẩu của người triệu gọi, chứ không phải mật khẩu của root. Khi người dùng đã được xác nhận xong, hệ thống sẽ thiết lập một khoảng thời gian cho phép người triệu gọi tiếp tục dùng sudo mà không cần phải xác nhận mật khẩu lại (mặc định là 15 phút).

– Nếu không có khai báo định danh của user đích rõ ràng, mặc định sudo sẽ xem như ta đang mượn quyền root để thực thi. Nếu ta muốn “mượn” một người dùng nào khác thì khai báo định danh rõ ràng của người đó. Bài viết này sẽ hướng dẫn các bạn khai báo và sử dụng với sudo

4.1. Cấp quyền sudo cho người dùng

Mở tệp tin /etc/sudoers
Đây là file chứa tất cả những thiết lập cho sudo. Nội dung trong file này thường được đặc tả bằng cú pháp sau:

USER HOSTNAME=(TARGET-USERS) COMMAND

Trong đó:

  • USER: Tên của người sử dụng
  • HOSTNAME: Tên máy mà luật được áp dụng lên. Tham số này cần thiết vì sudo được thiết kế để bạn có thể dùng một file sudoers cho các máy khác. Lúc này sudo sẽ xem máy đang chạy được dùng các luật nào. Nói cách khác, bạn có thể thiết kế các luật cho từng máy trong hệ thống.
  • TARGET-USERS: Tên người dùng đích cho “mượn” quyền thực thi.
  • COMMAND: Tên “lệnh” (thực ra là các chương trình thực thi) mà người dùng được quyền thực thi với bất kỳ tham số nào mà họ muốn. Tuy nhiên bạn cũng có thể đặc tả các tham số của lệnh (bao gồm các dấu thay thế wildcards). Ngược lại, có thể dùng kí hiệu “” để ám chỉ là lệnh chỉ được thực thi mà không có tham số nào cả.
  • Nếu là cấp quyền cho group, ta thay tham số USER bằng %GROUP

Ví dụ 1: Trên Ubuntu, các giá trị mặc định trong file sudoers gồm có

Defaults !lecture,!tty_tickets,!fqdn 
root ALL=(ALL) ALL 
%admin ALL=(ALL) ALL

Chỉ thị ” root ALL=(ALL) ALL” tuân theo đúng cú pháp thường gặp, có nghĩa là người dùng root, trên tất cả các máy, có thể mượn quyền tất cả các người dùng, để thực thi tất cả các lệnh.
Chỉ thị “%admin ALL=(ALL) ALL” cũng tuân theo cú pháp đó, có nghĩa là nhóm người dùng admin, trên tất cả các máy, có thể mượn quyền tất cả các người dùng, để thực thi tất cả các lệnh.

Ví dụ 2: cho phép user1 được cấp quyền sudo full

Có 2 cách để thực hiện việc này như sau:
– thêm user1 vào nhóm admin (mặc định đã có quyền sudo)
– thêm lệnh cấp quyền cho user1 như sau:

user1 ALL=(ALL) ALL

Ví dụ 3: Cho phép subadmin được thực hiện bất kỳ lệnh nào trong /usr/bin ở máy linux01

subadmin linux01 = /usr/bin/*

4.2. Thực thi quyền sudo

Sử dụng lệnh sudo trước câu lệnh thực thi thông thường:

sudo rm -rf /home/training/.recently-used

Nếu ta muốn “mượn” một người dùng nào khác thì khai báo định danh rõ ràng của người đó:

sudo -u training rm -rf /home/training/.recently-used

5. Phân biệt Hard Link và Soft Link trên Linux

Đây là một bài viết khá hay mình có sưu tầm được, các bạn đọc để hiểu và phân biệt rõ về hard link và soft link nhé:

Hard Link và Soft Link trên Linux là 2 khái niệm khá phức tạp nhưng rất hay. Hay vì nếu hiểu được các nguyên tắc cơ bản của hệ thống file thì ta thấy phân biệt nó đơn giản hơn nhiều. Một số điểm cần nắm trước:

  • Về phía người sử dụng, file chứa data và được phân biệt với nhau bằng file name.
  • Về phía hệ thống, file được phân biệt bằng chỉ số index node, viết tắt là inode. Mỗi file name có 1 inode đi kèm. Chỉ số inode tham chiếu đến 1 vùng nhớ trong đó có chứa địa chỉ vùng nhớ lưu trữ data.

Hard Link

  • File gốc có tên là filename, số inode là inode#, vùng dữ liệu là data.
  • Khi tạo hard link với tên là othername thì inode đi kèm với nó sẽ chính là inode# của filename. Vì cùng inode# nên sẽ cùng tham chiếu đến 1 vùng nhớ chứa địa chỉ của data do đó có cùng tham chiếu đến vùng data.

Soft Link

  • Khi tạo soft link với tên là othername thì inode đi kèm sẽ là 1 inode# khác. Inode# này tham chiếu đến vùng nhớ chứa địa chỉ dẫn đến vùng data của soft link. Trong data này chứa đường dẫn đến file gốc.
  • Đây là điểm khác biệt cơ bản nhất của Hard Link và Soft Link. Từ đó ta có thể giải thích được tất cả những khác biệt khác, chẳng hạn chuyện gì xảy ra khi xóa file gốc.

6. Quản lý tiến trình (Process) và Service trong Linux Server

Chúng ta biết rằng, Các bản phân phối hệ điều hành ngày này đều hoạt động được theo cơ chế đa nhiệm, tức là có thể thực thi cùng lúc nhiều tác vụ khác nhau tại cùng một thời điểm. Mặc dù thực tế nếu xét ở khía cạnh hệ thống thì các chương trình đã được phân chia thời gian hoạt động và hệ điều hành Linux sẽ điều phối hoạt động của các chương trình này theo một thứ tự tuần tự.

Ngoài cơ chế đa nhiệm, Linux còn hỗ trợ cơ chế đa người dùng, tức là có nhiều người dùng cùng sử dụng hệ thống với các chương trình khác nhau. Để quản lý được các chương trình này thì hệ điều hành cần phải quản lý và điều phối tốt tất cả các tiến trình phát sinh ra trong hệ thống.

Trong quá trình vận hành, chúng ta cũng cần nắm được cách quản lý process và service trong hệ điều hành Linux.

6.1. Quản lý Process

* Lệnh quản lý: TOP

top

Câu lệnh top là một phương thức cổ điển nhất để bạn xem việc chiếm dụng tài nguyên hệ thống, và xem những tiến trình nào chiếm dụng tài nguyên nhiều nhất. Những tiến trình chiếm dụng tài nguyên nhiều nhất sẽ được hiển thị đầu tiên.

Một số thông tin biết được qua lệnh Top:

  • Dòng đầu tiên cho biết thời gian uptime kể từ khi hệ thống khởi động, số người dùng thực tế đang hoạt động và tải trung bình của hệ thống.
  • Dòng thứ hai là thống kê về số lượng tiến trình, bao gồm tổng số tiến trình (total), số đang hoạt động (running), số đang ngủ/chờ (sleeping), số đã dừng (stopped) và số không thể dừng hẳn (zombie).
  • Dòng thứ 3-5 lần lượt cho biết thông tin về CPU, RAM và bộ nhớ Swap
  • Các dòng còn lại liệt kê chi tiết về các tiến trình như định danh (PID), người dùng thực thi (USER), độ ưu tiên (PR), dòng lệnh thực thi (COMMAND) …..
  • Để thoát khỏi top, ấn tổ hợp phím tắt Ctrl + C. Tổ hợp phím này cũng dùng để kill các ứng dụng đang chạy từ Terminal.

*) Lệnh quản lý PS

  • Câu lệnh ps liệt kê danh sách các tiến trình đang chạy.
  • Câu lệnh ps -A sẽ liệt kê danh sách tất cả tiến trình đang chạy trên hệ thống.
  • Nếu cảm thấy danh sách có vẻ quá dài, bạn có thể dùng lệnh sau để hiển thị một danh sách ngắn hơn:
ps 
ps -A 
ps -A | less

Ngoài ra, bạn có thể chỉ định tiến trình cụ thể bằng lệnh grep. Ví dụ sau đây sẽ tìm kiếm tiến trình firefox trên hệ thống:

ps -A | grep firefox

Ngoài ra, nếu bạn muốn xem tiến trình hiển thị theo dạng danh sách cấu trúc cây thì có thể dùng lệnh:

pstree

So với lệnh Top hiển thị một cách realtime các tiến trình thì PS chỉ hiển thị thông tin tại thời điểm khởi chạy lệnh. Để thoát nhấn phím q

*) Lệnh kết thúc một tiến trình

Nhiều khi trong quá trình sử dụng hệ thống, một tiến trình nào đó bị treo (not responding), chúng ta cần phải ngắt tiến trình này nhưng không thể ngắt theo cách thông thường. Để làm được việc này, bạn phải thực hiện một trong các cách sau:

kill PID

Để kill các ứng dụng cứng đầu, bạn dùng lệnh kill -KILL PID hoặc kill -9 PID.
Câu lệnh này dùng để tắt các tiến trình, bằng cách cung cấp PID của chúng. PID này có thể được lấy từ một số các lệnh sau:

ps -A hoặc ps -A | grep firefox 
pgrep firefox 
ps aux | grep firefox

Ngoài ra, trong một số trường hợp để ngắt tiến trình một cách nhanh chóng, bạn có thể dùng lệnh sau:

pkill killall

Hai câu lệnh này cho phép bạn kill tiến trình bằng cách cung cấp tên của chúng:
ví dụ:

-> pkill firefox
-> killall firefox

6.2. Quản lý Service

*). Lệnh quản lý Service hay dùng:

service -–status-all

Lệnh này dùng kiểm tra tất cả các service và tình trạng của nó, Trong đó:

  • + là biểu hiện cho các Service đang chạy (running)
  • – là biểu hiện cho các Service đang không chạy (stopped)
  • ? là biểu hiện cho các Service không xác định được trạng thái

*). Lệnh khởi động dịch vụ:

service tên_dịch_vụ start | stop | restart 
hoặc 
/etc/init.d/tên_dịch_vụ start | stop | restart

Ví dụ:
service mysql stop
/etc/init.d/mysqld start

Tuy nhiên, tùy theo từng bản distro của Linux, các lệnh quản lý service có thể khác đôi chút hoặc là có thể vẫn sử dụng các lệnh chung này hoặc là có các cách sử dụng riêng khác.

Ví dụ: để restart dịch vụ nginx trên ubuntu có thể sử dụng một trong các lệnh sau:

#systemctl restart nginx-service 
#service nginx restart 
#system -s nginx

7. Viết Shell Script trên máy chủ Linux

Các Bạn có thể hình dung thay vì phải viết nhiều câu lệnh cùng lúc thì có một cách đơn giản hơn đó là dùng Shell Script => viết vào một file sau đó chạy file này để thực thi tập các câu lệnh. Trong Linux có nhiều loại shell khác nhau như: SH, Dash, Bash, trong đó Bash shell là phổ biến hơn cả.

Để xem hệ thống của bạn hỗ trợ những loại shell nào, có thể dùng lệnh

#cat /etc/shells.

Mỗi loại shell có cú pháp, cách dùng khác nhau, cung cấp cho bạn các chức năng khác nhau.
Trong MS-DOS, Shell là được cọi là COMMAND.COM, cũng được sử dụng cho mục đích tương tự, nhưng không mạnh mẽ bằng Shell Linux.

Tất cả các loại Shell phía trên đều đọc các lệnh người dùng nhập và đưa đến Linux OS để nói với OS rằng người dùng đang muốn gì. Các dòng lệnh được gọi là command line.
Để xem system đang chạy shell gì, bạn có thể dùng lệnh

#echo $SHELL

Dưới đây là một vài ví dụ về bash shell ở mức độ đơn giản nhất:
Ví dụ 1:

#!/bin/bash 
# declare STRING variable 
STRING=”Hello World” 
#print variable on a screen 
echo $STRING

Dòng đầu tiên chúng ta luôn đặt #!/bin/bash, đây là cú pháp bắt buộc. Sau # được hiểu là comment, chú thích của các đoạn mã.
STRING=”Hello World” // Khai báo biến STRING.
echo $STRING // Hiển thị biến STRING ra màn hình.

Lưu file lại, tiến hành chmod cho file:

#chmod 755 hello_world.sh

Chạy file:

sh hello_world.sh

Kết quả sẽ nhận về là : Hello World

Ví dụ 2:

#!/bin/bash 
tar -czf www.tar.gz /home/www

Đoạn script trên giúp ta nén lại thư mục /home/www thành file www.tar.gz, như thế ta đã có một bản backup của thư mục này.

Ví dụ 3:

#!/bin/bash 
OF=www_$(date +%Y%m%d).tar.gz 
tar -czf $OF /home/www

Đoạn script giúp nén lại thư mục /home/www thành file .tar.gz và có đặt tên file theo ngày tháng năm

Kết luận: Bash Shell được coi như một ngôn ngữ lập trình, trong đó có đọc dữ liệu đầu vào, xử lý các dữ liệu bằng việc sử dụng các hàm lập trình, cấu trúc điều khiển lệnh (if else, for, do while, while,…) để xử lý và trả ra kết quả cho người dùng.

Nguồn: Tổng hợp.

Chúc các bạn thành công.

Đánh giá bài viết

About The Author

Scroll to Top