Tìm hiểu Linux System Configuration
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. 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 ...
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.
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).
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.
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.
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...).
Để 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
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.
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
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
[1] how linux work chapter 7