Tìm hiểu Linux System Configuration

Mở đầu

Xu hướng sử dụng linux ở cả desktop và server ngày càng tăng, bài viết này sẽ cung cấp một vài kiến thức cơ bản về cấu hình trong linux system.

Thư mục /etc

Hầu hết các files cấu hình của linux system sẽ nằm ở thư mục này, tuy nhiên với sự phát triển của Linux, dẫn đến có quá nhiều pakages khác nhau khiến thư mục này sẽ nhanh chóng trở thành 1 đống hỗn độn. Hơn nữa nếu để tất cả configuration files trong thư mục này khi update phiên bản mới của Linux các file này sẽ bị ghi đè khiến các cấu hình thay đổi sẽ bị mất đi. Để giải quyết 2 vấn đề này những distribution mới của linux đặt các file cấu hình vào từng sub-folder tùy theo mục đích, các file cấu hình do user thiết lập sẽ đặt ở thư mục riêng (ví dụ: /etc/grub.d).

System Logging

Logger: System log là một phần rất quan trọng của hệ thống, khi có vấn đề xảy ra với hệ thống mà bạn vẫn chưa biết nguyên nhân là gì thì hãy bắt đầu xem lại log files. Các files log của linux đặt ở /var/log/. Mặc dù không có chuẩn nào cho tất cả linux system log nhưng hầu hết các version của linux sử dụng rsyslogd, và hầu hết các log của linux tuân theo syslog. Log configuration file: rsyslogd sử dụng file base config đặt tại /etc/rsyslog.conf, tuy nhiên config cho cấu hình hiện tại sẽ đặt ở /etc/rsyslog.d Log Facility và Priority:

kern.*						/dev/console
*.info;authpriv.none		/var/log/messages
authpriv.*					/var/log/secure,root
mail.*						/var/log/maillog
cron.*						/var/log/cron
*.emerg						*
local7.*					/var/log/boot.log

phía bên trái là selector[facility + priority], phía bên phải là action. Facility sẽ chỉ ra log thuộc loại nào, priority là giá trị sau dấu [.] ngay sau facility. Độ ưu tiên sẽ là: debug < info < notice < warning < err < crit < alert and emerg.

User's Files

Linux cho phép nhiều User có thể sử dụng hệ thống. Linux kernel quản lý user thông qua UID, mọi request từ User đến kernel đều phải thông qua UID. UserName và password chỉ tồn tại ở tầng User. /etc/passwd File:

root:x:0:0:Superuser:/root:/bin/sh
daemon:*:1:1:daemon:/usr/sbin:/bin/sh
bin:*:2:2:bin:/bin:/bin/sh
sys:*:3:3:sys:/dev:/bin/sh
nobody:*:65534:65534:nobody:/home:/bin/false
juser:x:3119:1000:J. Random User:/home/juser:/bin/bash

Mỗi dòng trong file này tương ứng với 1 User và các trường của User đó cách nhau bằng dấu [:].

No Name Descriptions
1 User name -
2 Password Password của user ở dạng đã được mã hóa.
3 UID userID, dùng để identify với kernel
4 GID user group id, có thể xem list group ở /etc/group
5 user real name tên thật của user, có thể có thêm vài thông tin khác cách nhau bởi dấu phẩy.
6 home user home directory
7 shell user's shell, chương trình này

chú ý rằng ở mục 2 nếu giá trị là [x] thì password được lưu ở shadow file, nếu giá trị là dấu * thì user không thể login, nếu giá trị là blank chỉ ra user không cần login. Screen Shot 2016-12-27 at 19.05.10.png

Các user đặc biệt:

  • root có UID = 0 và GID = 0
  • một số user hệ thống như deamons không thể login được.
  • nobody user không có quyền ghi, sử dụng để chạy 1 số process nhằm đảm bảo tính an toàn cho hệ thống.

chú ý: root có thể sửa trực tiếp file /etc/passwd ở dạng plaintext tuy nhiên để hạn chế nhầm lẫn thông thường việc chỉnh sửa /etc/passwd được sử dụng qua command ở user space(ex: adduser, userdel, user passwd...).

Group User

Để share quyền quản lý file với một nhóm trên linux sử dụng group useruser, thông tin này được đặt tại /etc/group.

root:*:0:juser
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
disk:*:6:juser,beazley
nogroup:*:65534:
user:*:1000:
No Name Descriptions
1 Group name -
2 Group password Hầu như không sử dụng
3 GID userID, dùng để identify với kernel
4 list of users danh sách các user thuộc group

để biết user đang sử dụng thuộc những group nào sử dụng command: groups

Set thời gian cho hệ thống linux

Linux kernel quản lý thời gian thông qua system clock. Giá trị của system clock có thể sử dụng command date:

No Command Descriptions
1 date xem giá trị của system clock
2 date --set="STRING" set lại giá trị của system clock, ex: STRING="2 OCT 2006 18:00:00"
3 date +%Y%m%d -s "20161227" set lại date cho system clock
4 date +%T -s "10:13:13" set lại time cho system clock

Tại thời điểm kernel boot nó sẽ lấy giá trị của RTC(battery-backed real-time clock) set cho system clockclock. Bạn có thể set lại bằng command:

hwclock --hctosys --utc

TimeZone: kernel quản lý thời gian dưới dạng số giây tính từ 1/1/1970 0:00, tuy nhiên để User có thể xem được thì ở user-space sẽ convert ra định dạng user mong muốn.Local TimeZone của linux system được cấu hình tại /etc/localtime(dạng binary).List các TimeZone được đặt tại /usr/share/zoneinfo, khi muốn set lại local TimeZone hãy copy 1 file tương ứng ở thư mục này vào /etc/localtime. Trong một số trường hợp bạn chỉ muốn set TimeZone tạm thời hãy dùng command:

export TZ=Asia/Central

TimZone này sẽ có giá trị đến hết shell session mà bạn sử dụng lệnh.

Lập lịch cho hệ thống với crontab, at

Crontab: Linux cung cấp cron service cho phép User chạy chương trình nào đó theo lịch định kỳ. Các chương trình chạy dưới trigger cron service được gọi là cron job. Để tạo 1 cron job chỉ cần thêm 1 dòng vào crontab file.

mm ss DayOfMonth Month DayOfWeek command

ví dụ:

15 09 5,14 * * shutdown -h now

sẽ shutdown máy vào lúc 15:09 các ngày 5 và 14 hàng tháng.

No Name Descriptions
1 crontab -l list tất cả cron job trong hệ thống
2 crontab -r remove cron job
3 crontab -e edit crontab file.

At: at service là một cách nữa để schedule chạy 1 task trong tương lai mà không dùng cron. Để schedule 1 task sử dụng at

at 17:30
shutdown -h now
ctr+D

kết quả:

job 1 at Tue Dec 27 17:30:00 2016

để check job đã được schedule sử dụng:

atq

để hủy job

atrm  jobID

Vài điều về User IDs

User sử dụng username và password để xác thực UID sau đó UID sẽ làm việc với kernel, tuy nhiên process vẫn có thể sử dụng setuid để chạy dưới danh nghĩa của 1 user khác. Vậy làm thế nào để kernel phân biệt và xử lý được? Khi xử lý các process kernel có sử dụng 3 luật cơ bản dưới đây.

  • process chạy dưới quyền root (UID=0) có thể sử dụng setuid để trở thành user bất kỳ.
  • process không chạy dưới quyền root nhưng thỏa mãn các điều kiện cần thiết cũng có thể setuid để trở thành user khác.
  • bất kỳ process nào có đủ file permission đều có thể setuid. Effective UID, Real UID, and Saved UID Trên thực tế 1 process sẽ quản lý không chỉ original-UID, ngoài ra còn có EUID(effective userid) đây chính là ID khởi tạo process.Khi process sử dụng setuid nó sẽ set lại giá trị của euid và giữ nguyên giá trị của original-UID. Mặc dù process chạy dưới quyền của euid nhưng chủ của process đó vẫn là original-UID. Khi user A khởi tạo process và setuid thành UserB thì UserA vẫn là chủ của process đó và có thể kill process đó. Sử dụng lệnh dưới đây bạn sẽ thấy uid và euid cho từng process.
ps -eo pid,euser,ruser,comm

Tham khảo

[1] how linux work chapter 7