[Quan trọng] Login - startup file - login/non-login shell - interactive/non-interactive script

GETTY
Sau khi init tắt và khởi chạy các script thông qua các symbolic link trong /etc/rc.d/rcX.d, init sẽ chạy getty để phục vụ quá trình đăng nhập.
Lần lượt quá trình đăng nhập diễn ra như sau:
  • Mở tty lines, (nôm na là khởi chạy giao diện của tty), thiết lập modes,
  • In ra dấu nhắc đăng nhập, lấy username,
  • Bắt đầu khởi tạo quá trình đăng nhập đối với user đã được chứng thực trên,
File cấu hình của Getty là /etc/conf.getty.
Getty khởi chạy, in ra dòng nhắc gõ username, và khi bạn gõ username, Getty sẽ triệu gọi chương trình login, lúc này chương trình login sẽ thay thế getty, login nhận username, hỏi password của bạn, kiểm tra chúng rồi thực thi các quá trình đăng nhập theo chỉ định ở /etc/passwd (xem mục dưới đây).
Quá trình login sẽ chạy bash shell (được chỉ định trong /etc/passwd), và bash shell này lại thay thế login, tóm lại là GETTY -> LOGIN -> SHELL.
Một điều đáng lưu ý là nếu shell hay login bị ngắt, getty sẽ được "hồi sinh". Người ta giải thích điều này là do quá trình login, shell thực chất là thay thế lẫn nhau và thay thế cho getty, nếu login hay shell bị ngắt có nghĩa là getty cũng bị ngắt và nó sẽ hồi sinh lại, login và shell cũng thừa kế các tín hiệu kết nối đã được khởi tạo bởi tiến trình trước đó. Nếu để ý, các tiến trình login, shell có cùng ID với getty.
LOGIN
Khi user đăng nhập xong (gõ xong username và đúng password), nếu file /etc/nologin tồn tại, và nếu không phải là user root, nội dung của file /etc/nologin sẽ được in ra màn hình và quá trình đăng nhập chấm dứt.
Nếu có sự hạn chế truy cập nào được ấn định trong /etc/usertty, đăng nhập bị từ chối và syslog sẽ ghi lại các cố gắng này. Nếu user là root thì trình đăng nhập sẽ lắng nghe tại /etc/securetty.
Tất nhiên, mọi cố gắng đăng nhập bất thường sẽ bị syslog ghi lại.
Nếu .hushlogin tồn tại trong home directory của user này thì quá trình đăng nhập sẽ yên tĩnh hơn (quiet login) với việc không kiểm tra mail và không in ra lần đăng nhập gần nhất (được lưu ở /var/log/lastlog).
Lúc này, chương trình login sẽ thực hiện các thao tác chuẩn của “administrative tasks”, bao gồm:
- set UID và GID,
- set các biến HOME, PATH, SHELL, TERM, MAIL, LOGNAME,
- set default path cho user thường: /usr/local/bin:/bin:/usr/bin và với root là /sbin:/bin:/usr/sbin
- Nếu không phải “quiet login”, kiểm tra mail tại đường dẫn ở biến MAIL, in lần đang nhập gần nhất tại /var/log/lastlog
- Chạy shell, được chỉ định trong /etc/passwd, nếu không thì mặc định là /bin/bash
- Set home directory, được chỉ định tại /etc/passwd, nếu không lấy thông tin HOME trong /etc/default/useradd
LOGIN - NON-LOGIN / INTERACTIVE SHELL - STARTUP FILE
Trên hệ thống Linux, shell là chương trình thực thi các lệnh từ người dùng (gõ vào thông qua dòng lệnh) hay đọc từ file script, nó làm trung gian chuyển lệnh từ người dùng vào kernel, bao gồm các công đoạn đọc lệnh, chạy file thực thi tương ứng với lệnh đó.
Có nhiều shell, ta có thể liệt kê 1 số shell phổ biến:
- SH shell: là shell ban đầu của các hệ thống UNIX, rất phổ biến, được phát triển bởi Stephen Bourne tại Bell Labs vào 1974. Đây là shell nhỏ và ít tính năng, chủ yếu phù hợp với điều khiển I/O chứ không mạnh mẽ với tương tác người dùng.
- Bash shell: tên khác là Bourne-Again, là shell mặc định trên hệ thống Linux, phát triển từ SH shell nên mạnh mẽ hơn nhiều.
- C shell, tức CSH: phát triển bởi Bill Joy tại ĐH Berkeley, cú pháp và phương pháp sử dụng giống với ngôn ngữ C
- TCSH: phiên bản phát triển của CSH, hoàn thiện hơn CSH.
Bạn có thể xem các shell trong máy mình tại /etc/shells
Interactive / Non-interactive shell script
Các script có 2 loại :
- Interactive script là những script mang tính tương tác với người dùng, kiểu như các lệnh được nhập vào từ bàn phím, đặc biệt là các lệnh chờ các phản hồi của người dùng.
- Non-interactive: ngược lại, loại này chạy âm thầm và không tương tác với người dùng, kiểu như các lệnh được viết sẵn trong các file script.
Login shell và Nologin shell
Một khái niệm cần hiểu rõ của shell là việc phân loại thành Login và Non-login shell.
Khi bạn login thành công, tiến trình login sẽ được thay thế bởi shell, (thông thường theo mặc định là bash shell), shell này là LOGIN shell. Khi LOGIN shell chạy, nó sẽ đọc và thực thi trước hết các STARTUP file sau theo thứ tự:
- /etc/profile
- ~/.bash_profile
- ~/.bash_login (nếu có)
- ~/.profile (nếu có)

Như hình trên, shell bash có dấu "-" đằng trước thể hiện rằng đây là login shell, nó có PID là 5678 và có PPID là 5662 (tiến trình cha này chính là login).
Các NON-LOGIN shell là các shell không phải LOGIN shell, khi khởi chạy, nó đọc file ~/.bashrc
Tại dấu nhắc dòng lệnh, bạn gõ tên shell để khởi chạy shell mới thay cho shell cũ, nếu dùng lệnh ps như trên hình, PPID shell mới chính là PID của shell cũ.
Shell mới này là interactive non-login shell (là NON-LOGIN shell). Các biến môi trường tự đinh nghĩa, history lệnh của các shell khác nhau thì độc lập với nhau.
Một cái khác nữa giữa NOLOGIN và LOGIN shell là khi ở NON-LOGIN shell, bạn không thể gõ logout để thoát mà phải gõ exit.
Chú ý rằng biến SHELL (echo $SHELL) KHÔNG hiển thị đúng shell hiện hành.

Nhận xét

Đăng nhận xét