110.2 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
110 Bảo mật |
Mục tiêu: |
110.2 Thiết lập Bảo mật Máy chủ |
Bài: |
1 trên 1 |
Giới thiệu
Chương này sẽ trình bày về bốn cách cơ bản để cải thiện bảo mật máy chủ:
-
Một số lệnh và cài đặt cấu hình cơ bản nhằm nâng cao tính bảo mật xác thực bằng mật khẩu ẩn.
-
Cách sử dụng các siêu trình nền để nghe các kết nối mạng đến.
-
Kiểm tra các dịch vụ mạng để tìm các trình nền không cần thiết.
-
Trình bao bọc TCP (TCP wrappers) như một loại tường lửa đơn giản.
Cải thiện Bảo mật xác thực bằng Mật khẩu ẩn
Các thành phần cơ bản của dữ liệu tài khoản người dùng được lưu trữ trong tệp /etc/passwd
. Tệp này chứa bảy trường: tên đăng nhập, ID người dừng, ID nhóm, mật khẩu, chú thích (hay còn gọi là GECOS), vị trí thư mục chính và cuối cùng là vỏ mặc định. Một cách đơn giản để ghi nhớ thứ tự của các trường này là chia quá trình đăng nhập của người dùng ra làm các phần: đầu tiên là người dùng nhập tên đăng nhập; thứ hai là hệ thống ánh xạ tên đăng nhập này thành một ID người dùng (uid) và thứ ba là thành một ID nhóm (gid); thứ tư là hệ thống yêu cầu mật khẩu; thứ năm là tra cứu chú thích; thứ sáu là vào thư mục chính của người dùng; thứ bảy là đặt vỏ mặc định.
Trong các hệ thống hiện đại, mật khẩu đã không còn được lưu trong tệp /etc/passwd
. Thay vào đó, trường mật khẩu sẽ chỉ chứa một ký tự x
viết thường. Tệp /etc/passwd
phải đọc được bởi mọi người dùng nên chúng ta không nên lưu trữ mật khẩu ở đây. Thay vào đó, x
biểu thị việc mật khẩu được mã hóa (băm) trên thực tế đang được lưu trữ trong tệp /etc/shadow
. Tệp này không thể được đọc bởi mọi người dùng.
Các cài đặt mật khẩu được định cấu hình bằng lệnh passwd
và chage
. Cả hai lệnh đều sẽ thay đổi mục nhập của người dùng emma
trong tệp /etc/shadow
. Là một siêu người dùng, chúng ta có thể đặt mật khẩu cho người dùng emma
bằng lệnh sau:
$ sudo passwd emma New password: Retype new password: passwd: password updated successfully
Sau đó, chúng ta sẽ được nhắc hai lần để xác nhận mật khẩu mới.
Để liệt kê thời gian hết hạn mật khẩu và các cài đặt hết hạn mật khẩu khác cho người dùng emma
, hãy sử dụng:
$ sudo chage -l emma Last password change : Apr 27, 2020 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
Để ngăn người dùng emma
đăng nhập vào hệ thống, siêu người dùng có thể đặt ngày hết hạn mật khẩu trước ngày hiện tại. Ví dụ: nếu ngày hôm nay là 27/03/2020, ta có thể đặt ngày hết hạn mật khẩu của người dùng bằng cách sử dụng một ngày trước đó:
$ sudo chage -E 2020-03-26 emma
Ngoài ra, siêu người dùng cũng có thể sử dụng:
$ sudo passwd -l emma
để khóa tài khoản tạm thời thông qua tùy chọn -l
cho passwd
. Để kiểm tra tác động của những thay đổi này, hãy thử đăng nhập bằng tài khoản emma
:
$ sudo login emma Password: Your account has expired; please contact your system administrator Authentication failure
Để ngăn tất cả mọi người dùng ngoại trừ siêu người dùng đăng nhập tạm thời vào hệ thống, siêu người dùng có thể tạo một tệp có tên là /etc/nologin
. Tệp này có thể chứa thông báo gửi tới người dùng một thông báo về lý do tại sao họ không thể đăng nhập (ví dụ như thông báo bảo trì hệ thống). Để biết thêm chi tiết, hãy xem man 5 nologin
. Hãy lưu ý rằng chúng ta còn có lệnh nologin
có thể được sử dụng để ngăn một phiên đăng nhập khi được đặt làm vỏ mặc định cho người dùng. Ví dụ:
$ sudo usermod -s /sbin/nologin emma
Hãy xem man 8 nologin
để biết thêm chi tiết.
Cách sử dụng Siêu Trình nền để nghe các Kết nối Mạng đến.
Các dịch vụ mạng như máy chủ web, máy chủ email và máy chủ in thường vận hành như một dịch vụ độc lập và lắng nghe trên một cổng mạng chuyên dụng. Tất cả các dịch vụ độc lập này đều chạy song song với nhau. Trên hệ thống dựa trên Sys-V-init cổ điển, mỗi dịch vụ này đều có thể được điều khiển bằng lệnh service
. Trên các hệ thống dựa trên systemd hiện tại, ta có thể sử dụng systemctl
để quản lý chúng.
Trước đây, nguồn tài nguyên máy tính sẵn có ít hơn rất nhiều và việc chạy song song nhiều dịch vụ ở chế độ độc lập không phải là một lựa chọn tốt. Thay vào đó, một siêu trình nền đã được sử dụng để lắng nghe các kết nối mạng đến và khởi động dịch vụ thích hợp theo yêu cầu. Phương pháp xây dựng kết nối mạng này mất nhiều thời gian hơn so với phương thức cũ. Các siêu trình nền phổ biến là inetd
và xinetd
. Trên các hệ thống hiện tại dựa trên systemd, đơn vị systemd.socket
có thể được sử dụng theo cách tương tự. Trong phần này, chúng ta sẽ sử dụng xinetd
để chặn các kết nối đến trình nền sshd
và khởi động trình nền này theo yêu cầu để minh họa cách sử dụng siêu trình nền.
Chúng ta cần có vài sự chuẩn bị trước khi định cấu hình cho dịch vụ xinetd
, . Việc sử dụng hệ thống dựa trên Debian hay Red Hat sẽ không thành vấn đề. Mặc dù những lý giải này được thử nghiệm với Debian/GNU Linux 9.9 nhưng chúng sẽ hoạt động trên mọi hệ thống Linux hiện tại có tính năng systemd mà không có bất kỳ thay đổi đáng kể nào. Trước tiên, hãy đảm bảo rằng các gói openssh-server
và xinetd
đã được cài đặt. Sau đó, hãy xác minh rằng dịch vụ SSH đang hoạt động với:
$ systemctl status sshd ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-04-27 09:33:48 EDT; 3h 11min ago Docs: man:sshd(8) man:sshd_config(5) Process: 430 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) Main PID: 460 (sshd) Tasks: 1 (limit: 1119) Memory: 5.3M CGroup: /system.slice/ssh.service └─460 /usr/sbin/sshd -D
Đồng thời kiểm tra xem dịch vụ SSH có đang lắng nghe trên cổng mạng tiêu chuẩn 22 hay không:
# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1194 root 3u IPv4 16053268 0t0 TCP *:ssh (LISTEN) sshd 1194 root 4u IPv6 16053270 0t0 TCP *:ssh (LISTEN)
Cuối cùng là dừng dịch vụ SSH bằng:
$ sudo systemctl stop sshd.service
Trong trường hợp cần thực hiện thay đổi này vĩnh viễn và tiếp tục suy trì sau khi khởi động lại hệ thống, hãy sử dụng systemctl disable sshd.service
.
Bây giờ chúng ta có thể tạo tệp cấu hình xinetd /etc/xinetd.d/ssh
với một số cài đặt cơ bản:
service ssh { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/sshd server_args = -i flags = IPv4 interface = 192.168.178.1 }
Hãy khởi động lại dịch vụ xinetd bằng:
$ sudo systemctl restart xinetd.service
Hãy kiểm tra xem dịch vụ nào hiện đang lắng nghe các kết nối SSH đến.
$ sudo lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xinetd 24098 root 5u IPv4 7345141 0t0 TCP 192.168.178.1:ssh (LISTEN)
Chúng ta có thể thấy rằng dịch vụ xinetd đã nắm quyền kiểm soát truy cập vào cổng 22.
Dưới đây là một số chi tiết khác về cấu hình xinetd
. Tệp cấu hình chính là /etc/xinetd.conf
:
# Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { # Please note that you need a log_type line to be able to use log_on_success # and log_on_failure. The default is the following : # log_type = SYSLOG daemon info } includedir /etc/xinetd.d
Ngoài các cài đặt mặc định, chúng ta chỉ có một chỉ dẫn để đặt một thư mục bao hàm (include directory). Trong thư mục này, ta có thể thiết lập một tệp cấu hình duy nhất cho mỗi dịch vụ cần xinetd
xử lý. Chúng ta đã thực hiện điều này ở trên cho dịch vụ SSH và đặt tên tệp là /etc/xinetd.d/ssh
. Tên của các tệp cấu hình có thể được chọn tùy ý ngoại trừ các tên tệp có chứa dấu chấm (.
) hoặc kết thúc bằng dấu ngã (~
). Tuy nhiên, thông lệ phổ biến là đặt tên tệp theo tên dịch vụ cần định cấu hình.
Một số tệp cấu hình trong thư mục /etc/xinet.d/
đã được bản phân phối cung cấp sẵn:
$ ls -l /etc/xinetd.d total 52 -rw-r--r-- 1 root root 640 Feb 5 2018 chargen -rw-r--r-- 1 root root 313 Feb 5 2018 chargen-udp -rw-r--r-- 1 root root 502 Apr 11 10:18 daytime -rw-r--r-- 1 root root 313 Feb 5 2018 daytime-udp -rw-r--r-- 1 root root 391 Feb 5 2018 discard -rw-r--r-- 1 root root 312 Feb 5 2018 discard-udp -rw-r--r-- 1 root root 422 Feb 5 2018 echo -rw-r--r-- 1 root root 304 Feb 5 2018 echo-udp -rw-r--r-- 1 root root 312 Feb 5 2018 servers -rw-r--r-- 1 root root 314 Feb 5 2018 services -rw-r--r-- 1 root root 569 Feb 5 2018 time -rw-r--r-- 1 root root 313 Feb 5 2018 time-udp
Các tệp này có thể được sử dụng làm bản mẫu trong những trường hợp hiếm hoi người dùng cần sử dụng một số dịch vụ cũ chẳng hạn như daytime
(một triển khai rất cũ của máy chủ thời gian). Tất cả các tệp mẫu này đều có chứa chỉ thị disable = Yes
.
Dưới đây là một số chi tiết khác về các lệnh được sử dụng trong tệp ví dụ /etc/xinetd.d/ssh
cho ssh ở trên.
service ssh { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/sshd server_args = -i flags = IPv4 interface = 192.168.178.1 }
service
-
Liệt kê các dịch vụ mà xinetd phải kiểm soát. Chúng ta có thể sử dụng số cổng (chẳng hạn như 22) hoặc tên được ánh xạ tới số cổng trong
/etc/services
(ví dụ nhưssh
). {
-
Cài đặt chi tiết bắt đầu bằng dấu ngoặc nhọn mở.
disable
-
Để kích hoạt các cài đặt này, hãy đặt cài đặt này thành
no
. Nếu muốn vô hiệu hoá cài đặt tạm thời, hãy đặt nó thànhyes
. socket_type
-
Ta có thể chọn
stream
cho ổ nối TCP hoặcdgram
cho ổ nối UDP và nhiều hơn thế. protocol
-
Chọn TCP hoặc UDP.
wai
-
Đối với các kết nối TCP, giá trị này thường được đặt thành
no
. user
-
Dịch vụ bắt đầu ở dòng này sẽ thuộc sở hữu của người dùng này.
server
-
Đường dẫn đầy đủ đến dịch vụ sẽ được khởi động bởi
xinetd
. server_args
-
Chúng ta có thể thêm tùy chọn cho dịch vụ tại đây. Nếu được khởi động bởi một siêu máy chủ, nhiều dịch vụ sẽ yêu cầu một tùy chọn đặc biệt. Đối với SSH, đây sẽ là tùy chọn
-i
. flags
-
Ta có thể chọn IPv4, IPv6 và các loại khác.
interface
-
Giao diện mạng mà
xinetd
phải điều khiển. Lưu ý: ta cũng có thể chọn lệnhbind
(đồng nghĩa vớiinterface
). }
-
Kết thúc bằng một dấu ngoặc nhọn đóng.
Những dịch vụ kế thừa được khởi động bởi siêu máy chủ xinetd
là các đơn vị ổ nối systemd. Việc thiết lập một đơn vị ổ nối systemd rất đơn giản và dễ dàng vì luôn có sẵn một đơn vị ổ nối systemd được xác định trước cho SSH. Hãy đảm bảo rằng dịch vụ xinetd
và SSH đang không chạy.
Bây giờ, chúng ta chỉ cần khởi động ổ nối SSH:
$ sudo systemctl start ssh.socket
Để kiểm tra dịch vụ nào hiện đang nghe trên cổng 22, chúng ta sẽ sử dụng lại lsof
. Hãy lưu ý tùy chọn -P
ở đây đã được sử dụng để hiển thị số cổng thay vì tên dịch vụ ở đầu ra:
$ sudo lsof -i :22 -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 57u IPv6 14730112 0t0 TCP *:22 (LISTEN)
Để hoàn tất phiên này, chúng ta nên thử đăng nhập vào máy chủ bằng một ứng dụng khách SSH tuỳ chọn.
Tip
|
Trong trường hợp |
Kiểm tra các dịch vụ mạng để tìm các trình nền không cần thiết.
Vì lý do bảo mật cũng như để kiểm soát tài nguyên hệ thống, quản trị viên phải cần có một cái nhìn tổng quan về những dịch vụ đang chạy. Các dịch vụ không cần thiết và không được sử dụng nên bị vô hiệu hóa. Ví dụ: trong trường hợp người dùng không cần phân phối các trang web thì việc chạy máy chủ web như Apache hoặc nginx là không cần thiết.
Trên các hệ thống dựa trên SyS-V-init, chúng ta có thể kiểm tra trạng thái của tất cả các dịch vụ bằng cách sau:
$ sudo service --status-all
Hãy xác minh xem mỗi dịch vụ được liệt kê từ đầu ra của lệnh có cần thiết hay không và vô hiệu hoá tất cả các dịch vụ không cần thiết bằng (đối với các hệ thống dựa trên Debian):
$ sudo update-rc.d SERVICE-NAME remove
Đối với các hệ thống dựa trên Red Hat, chúng ta sẽ sử dụng:
$ sudo chkconfig SERVICE-NAME off
Trên các hệ thống dựa trên systemd hiện đại, chúng ta có thể sử dụng thông tin sau để liệt kê tất cả các dịch vụ đang chạy:
$ systemctl list-units --state active --type service
Sau đó, chúng ta có thể vô hiệu hóa từng đơn vị dịch vụ không cần thiết bằng:
$ sudo systemctl disable UNIT --now
Lệnh này sẽ dừng dịch vụ và xóa nó khỏi danh sách các dịch vụ để ngăn nó khởi động ở lần khởi động hệ thống tiếp theo.
Ngoài ra, để nhận một bản khảo sát về các dịch vụ mạng đang nghe, chúng ta có thể sử dụng netstat
trên các hệ thống cũ hơn (miễn là hệ thống đã được cài đặt gói net-tools
):
$ netstat -ltu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
Hoặc trên các hệ thống hiện đại, chúng ta có thể sử dụng lệnh tương đương là ss
(viết tắt của "socket services"):
$ ss -ltu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 0.0.0.0:bootpc 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* tcp LISTEN 0 80 127.0.0.1:mysql 0.0.0.0:* tcp LISTEN 0 128 *:http *:* tcp LISTEN 0 128 [::]:ssh [::]:*
Trình bao bọc TCP như một loại tường lửa đơn giản.
Vào thời điểm Linux chưa có tường lửa, trình bao bọc TCP đã được sử dụng để bảo mật các kết nối mạng vào máy chủ. Ngày nay, nhiều chương trình không tuân theo trình bao bọc TCP nữa. Trong các bản phân phối dựa trên Red Hat (ví dụ như Fedora 29) gần đây, các hỗ trợ cho trình bao bọc TCP đã bị loại bỏ hoàn toàn. Để hỗ trợ các hệ thống Linux cũ vẫn sử dụng trình bao bọc TCP, quản trị viên cần có một số kiến thức cơ bản về công nghệ cụ thể này.
Chúng ta sẽ một lần nữa sử dụng dịch vụ SSH làm một ví dụ cơ bản. Dịch vụ trên máy chủ ví dụ của chúng ta chỉ có thể truy cập được từ mạng cục bộ. Trước tiên, chúng ta sẽ kiểm tra xem trình nền SSH có sử dụng thư viện libwrap
cung cấp các hỗ trợ cho trình bao bọc TCP hay không:
$ ldd /usr/sbin/sshd | grep "libwrap" libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007f91dbec0000)
Sau đó, hãy thêm dòng sau vào tệp /etc/hosts.deny
:
sshd: ALL
Cuối cùng, chúng ta sẽ định cấu hình một ngoại lệ trong tệp /etc/hosts.allow
cho các kết nối SSH từ mạng cục bộ:
sshd: LOCAL
Những thay đổi sẽ có hiệu lực ngay lập tức mà không cần phải khởi động lại bất kỳ một dịch vụ nào. Chúng ta có thể kiểm tra điều này với ứng dụng khách ssh
.
Bài tập Hướng dẫn
-
Làm cách nào để có thể mở khóa tài khoản
emma
đã bị khóa trước đó? -
Trước đây tài khoản
emma
đã được đặt ngày hết hạn. Làm cách nào để đặt ngày hết hạn thành "không bao giờ" (never
)? -
Hãy tưởng tượng dịch vụ in CUPS đang xử lý các lệnh in không cần thiết trên máy chủ của bạn. Làm thế nào để có thể vô hiệu hóa dịch vụ vĩnh viễn? Làm thế nào để có thể kiểm tra cổng thích hợp không còn hoạt động nữa?
-
Bạn đã cài đặt máy chủ web nginx. Làm cách nào để có thể kiểm tra xem nginx có hỗ trợ trình bao bọc TCP hay không?
Bài tập Mở rộng
-
Hãy kiểm tra xem sự tồn tại của tệp
/etc/nologin
có ngăn cản việc đăng nhập của người dùngroot
hay không. -
Sự tồn tại của tệp
/etc/nologin
có ngăn cản việc đăng nhập không cần mật khẩu bằng khóa SSH không? -
Điều gì sẽ xảy ra trong quá trình đăng nhập khi tệp
/etc/nologin
chỉ chứa dòng văn bản nàylogin currently is not possible
(hiện tại không thể đăng nhập)? -
Người dùng bình thường
emma
có thể lấy được thông tin về người dùngroot
có trong tệp/etc/passwd
bằng lệnhgrep root /etc/passwd
không? -
Người dùng bình thường
emma
có thể lấy thông tin về mật khẩu băm của chính cô ấy có trong tệp/etc/shadow
bằng lệnhgrep emma /etc/shadow
? -
Cần phải thực hiện những bước nào để kích hoạt và kiểm tra thời gian ban ngày cũ do xinetd xử lý? Hãy lưu ý đây chỉ là một bài tập mở rộng và đừng thực hiện việc này trong một môi trường thực tế.
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Tệp nơi mật khẩu được lưu trữ cũng như một số cài đặt bảo mật mật khẩu (ví dụ như thời gian hết hạn).
-
Mục đích của siêu trình nền
xinetd
và cách chạy nó cũng như khởi động dịch vụsshd
theo yêu cầu. -
Để kiểm tra những dịch vụ mạng nào đang chạy và cách vô hiệu hoá những dịch vụ không cần thiết.
-
Sử dụng Trình bao bọc TCP như một loại tường lửa đơn giản.
Các lệnh được sử dụng trong bài học này bao gồm:
chage
-
Thay đổi tuổi mật khẩu của người dùng.
chkconfig
-
Một lệnh cổ điển ban đầu được sử dụng trên các hệ thống dựa trên Red Hat để đặt xem một dịch vụ có nên được khởi động trong quá trình khởi động hệ thống hay không.
netstat
-
Một tiện ích cổ điển (hiện có trong gói
net-tools
) hiển thị các trình nền truy cập các cổng mạng trên hệ thống và cách sử dụng chúng. nologin
-
Một lệnh có thể được sử dụng thay cho vỏ của người dùng để ngăn họ đăng nhập.
passwd
-
Được sử dụng để tạo hoặc thay đổi mật khẩu của người dùng.
service
-
Một phương pháp cũ hơn để kiểm soát trạng thái của trình nền (chẳng hạn như dừng hoặc bắt đầu một dịch vụ).
ss
-
Phó bản hiện đại của
netstat
nhưng cũng hiển thị thêm thông tin về các ổ nối khác nhau đang được sử dụng trên hệ thống. systemctl
-
Lệnh điều khiển hệ thống được sử dụng để kiểm soát các khía cạnh khác nhau của các dịch vụ và ổ nối trên máy tính bằng systemd.
update-rc.d
-
Một lệnh cổ điển tương tự như
chkconfig
cho phép hoặc vô hiệu hóa một chương trình khởi động trong quá trình khởi động hệ thống trên các bản phân phối dựa trên Debian. xinetd
-
Một siêu trình nền có thể kiểm soát quyền truy cập vào dịch vụ mạng theo yêu cầu, từ đó khiến dịch vụ không hoạt động cho đến khi nó thực sự được yêu cầu thực hiện một số tác vụ.
Đáp án Bài tập Hướng dẫn
-
Làm cách nào để có thể mở khóa tài khoản
emma
đã bị khóa trước đó?Siêu người dùng có thể chạy
passwd -u emma
để mở khóa tài khoản. -
Trước đây tài khoản
emma
đã được đặt ngày hết hạn. Làm cách nào để đặt ngày hết hạn thành "không bao giờ" (never
)?Siêu người dùng có thể sử dụng
chage -E -1 emma
để đặt ngày hết hạn thành không bao giờ. Cài đặt này có thể được kiểm tra bằngchage -l emma
. -
Hãy tưởng tượng dịch vụ in CUPS đang xử lý các lệnh in không cần thiết trên máy chủ của bạn. Làm thế nào để có thể vô hiệu hóa dịch vụ vĩnh viễn? Làm thế nào để có thể kiểm tra cổng thích hợp không còn hoạt động nữa?
Sử dụng lệnh với tư cách là siêu người dùng:
systemctl disable cups.service --now
Sau đó, bạn có thể kiểm tra với
netstat -l | grep ":ipp "` hoặc `ss -l | grep ":ipp ".
-
Bạn đã cài đặt máy chủ web nginx. Làm cách nào để có thể kiểm tra xem nginx có hỗ trợ trình bao bọc TCP hay không?
Lệnh
ldd /usr/sbin/nginx | grep "libwrap"
sẽ hiển thị một mục nhập trong trường hợp nginx có hỗ trợ trình bao bọc TCP.
Đáp án Bài tập Mở rộng
-
Hãy kiểm tra xem sự tồn tại của tệp
/etc/nologin
có ngăn cản việc đăng nhập của người dùngroot
hay không.Người dùng
root
vẫn có thể đăng nhập. -
Sự tồn tại của tệp
/etc/nologin
có ngăn cản việc đăng nhập không cần mật khẩu bằng khóa SSH không?Có, việc đăng nhập không cần mật khẩu cũng sẽ bị ngăn chặn.
-
Điều gì sẽ xảy ra trong quá trình đăng nhập khi tệp
/etc/nologin
chỉ chứa dòng văn bản nàylogin currently is not possible
(hiện tại không thể đăng nhập)?Thông báo
login currently is not possible
sẽ được hiển thị và một phiên đăng nhập sẽ bị ngăn chặn. -
Người dùng bình thường
emma
có thể lấy được thông tin về người dùngroot
có trong tệp/etc/passwd
bằng lệnhgrep root /etc/passwd
không?Có vì tất cả mọi người dùng đều có quyền đọc tệp này.
-
Người dùng bình thường
emma
có thể lấy thông tin về mật khẩu băm của chính cô ấy có trong tệp/etc/shadow
bằng lệnhgrep emma /etc/shadow
?Không vì người dùng thông thường không có quyền đọc tệp này.
-
Cần phải thực hiện những bước nào để kích hoạt và kiểm tra dịch vụ cũ do xinetd xử lý? Hãy lưu ý đây chỉ là một bài tập mở rộng và đừng thực hiện việc này trong một môi trường thực tế.
Đầu tiên, hãy thay đổi tệp
/etc/xinetd.d/daytime
và đặt lệnhdisable = no
. Tiếp theo, hãy khởi động lại dịch vụ xinetdsystemctl restart xinetd.service
(hoặcservice xinetd restart
trên các hệ thống có SyS-V-Init). Sau đó, bạn có thể kiểm tra xem nó có hoạt động không vớinc localhost daytime
. Thay vìnc
, bạn cũng có thể sử dụngnetcat
.