110.1 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.1 Thực hiện nhiệm vụ Quản trị Bảo mật |
Bài: |
1 trên 1 |
Giới thiệu
Bảo mật là một yếu tố bắt buộc trong quản trị hệ thống. Là một quản trị viên hệ thống Linux hiệu quả, người dùng phải để mắt đến một số khía cạnh như quyền đặc biệt trên tệp, tuổi thọ mật khẩu người dùng, cổng và ổ nối mở, hạn chế sử dụng tài nguyên hệ thống, xử lý những người dùng đang đăng nhập và nâng cao đặc quyền thông qua su
và sudo
. Trong bài học này, chúng ta sẽ cùng ôn lại tất cả những chủ đề này.
Kiểm tra tệp bằng bộ SUID và SGID
Ngoài bộ quyền truyền thống gồm đọc, ghi và thực thi, các tệp trong hệ thống Linux cũng có thể có một số bộ quyền đặc biệt như các bit SUID hoặc SGID.
Bit SUID sẽ cho phép tệp được thực thi với đặc quyền của chủ sở hữu tệp. Nó được biểu thị dưới dạng số bằng 4000
và được biểu thị dưới dạng ký hiệu bằng s
hoặc S
trên bit quyền thực thi của chủ sở hữu. Một ví dụ kinh điển về tệp thực thi có bộ quyền SUID là passwd
:
carol@debian:~$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 63736 jul 27 2018 /usr/bin/passwd
Chữ s
viết thường trong rws
biểu thị sự hiện diện của SUID trên tệp — cùng với quyền thực thi. Nếu là một chữ S
viết hoa (rwS
) thì nó sẽ có nghĩa là quyền thực thi cơ bản không được đặt.
Note
|
Bạn sẽ tìm hiểu về |
Mặt khác, bit SGID có thể được đặt trên cả tệp và thư mục. Với các tệp, hoạt động của nó cũng tương đương với SUID nhưng các đặc quyền sẽ thuộc về chủ sở hữu nhóm. Tuy nhiên, khi được đặt trên một thư mục, nó sẽ cho phép tất cả các tệp được tạo trong đó kế thừa quyền sở hữu của nhóm thư mục. Giống như SUID, SGID cũng được biểu thị một cách tượng trưng bằng s
hoặc S
trên bit quyền thực thi của nhóm. Dưới dạng số, nó được biểu thị bằng 2000
. Chúng ta có thể đặt SGID trên một thư mục bằng cách sử dụng chmod
và thêm 2
(SGID) vào các quyền truyền thống (trong trường hợp của chúng ta là 755
):
carol@debian:~$ ls -ld shared_directory drwxr-xr-x 2 carol carol 4096 may 30 23:55 shared_directory carol@debian:~$ sudo chmod 2755 shared_directory/ carol@debian:~$ ls -ld shared_directory drwxr-sr-x 2 carol carol 4096 may 30 23:55 shared_directory
Để tìm các tệp có một hoặc cả hai bộ SUID và SGID, chúng ta có thể sử dụng lệnh find
và sử dụng tùy chọn -perm
. Ta có thể sử dụng cả giá trị số và ký hiệu. Các giá trị cũng có thể được truyền riêng hoặc đứng sau một dấu gạch ngang (-
) hoặc gạch chéo lên (/
). Ý nghĩa của chúng sẽ như sau:
-perm numeric-value
hoặc-perm symbolic-value
-
tìm các tệp có quyền đặc biệt độc nhất
-perm -numeric-value
hoặc-perm -symbolic-value
-
tìm các tệp có quyền đặc biệt và các quyền khác
-perm /numeric-value
hoặc-perm /symbolic-value
-
tìm các tệp có quyền đặc biệt (và các quyền khác)
Ví dụ: để tìm các tệp chỉ có SUID được đặt trong thư mục làm việc hiện tại, chúng ta sẽ sử dụng lệnh sau:
carol@debian:~$ find . -perm 4000 carol@debian:~$ touch file carol@debian:~$ chmod 4000 file carol@debian:~$ find . -perm 4000 ./file
Vì không có bất kỳ tệp nào chỉ có SUID, hãy lưu ý việc chúng ta đã tạo một tệp để hiển thị một phần đầu ra. Chúng ta có thể chạy lệnh tương tự bằng ký hiệu tượng trưng:
carol@debian:~$ find . -perm u+s ./file
Để tìm các tệp khớp với SUID (bất kể bất kỳ một quyền nào khác) trong thư mục /usr/bin/
, chúng ta có thể sử dụng một trong các lệnh sau:
carol@debian:~$ sudo find /usr/bin -perm -4000 /usr/bin/umount /usr/bin/newgrp /usr/bin/gpasswd /usr/bin/chfn /usr/bin/mount /usr/bin/passwd /usr/bin/chsh /usr/bin/sudo /usr/bin/su carol@debian:~$ sudo find /usr/bin -perm -u+s /usr/bin/umount /usr/bin/newgrp /usr/bin/gpasswd /usr/bin/chfn /usr/bin/mount /usr/bin/passwd /usr/bin/chsh /usr/bin/sudo /usr/bin/su
Nếu đang tìm các tệp trong cùng một thư mục với tập bit SGID, chúng ta có thể thực thi find /usr/bin/ -perm -2000
hoặc find /usr/bin/ -perm -g+s
.
Cuối cùng, để tìm các tệp có một trong hai bộ quyền đặc biệt, hãy thêm 4
và 2
và sử dụng /
:
carol@debian:~$ sudo find /usr/bin -perm /6000 /usr/bin/dotlock.mailutils /usr/bin/umount /usr/bin/newgrp /usr/bin/wall /usr/bin/ssh-agent /usr/bin/chage /usr/bin/dotlockfile /usr/bin/gpasswd /usr/bin/chfn /usr/bin/mount /usr/bin/passwd /usr/bin/chsh /usr/bin/expiry /usr/bin/sudo /usr/bin/bsd-write /usr/bin/crontab /usr/bin/su
Quản lý Mật khẩu và Tuổi thọ Mật khẩu
Như đã được chú thích ở trên, chúng ta có thể sử dụng tiện ích passwd
để thay đổi mật khẩu của riêng mình với tư cách là người dùng thông thường. Ngoài ra, chúng ta cũng có thể truyền khoá chuyển -S
hoặc --status
để nhận thông tin trạng thái về tài khoản của mình:
carol@debian:~$ passwd -S carol P 12/07/2019 0 99999 7 -1
Dưới đây là một bảng phân tích về bảy trường chúng ta sẽ nhận được trong đầu ra:
carol
-
Tên đăng nhập của người dùng.
P
-
Chỉ ra rằng người dùng có mật khẩu hợp lệ (
P
); các giá trị có thể có khác làL
cho mật khẩu bị khóa (locked) vàNP
cho trạng thái không có mật khẩu (no password). 12/07/2019
-
Ngày thay đổi mật khẩu cuối cùng.
0
-
Tuổi tối thiểu tính theo ngày (số ngày tối thiểu giữa các lần thay đổi mật khẩu). Giá trị
0
có nghĩa là mật khẩu có thể được thay đổi bất cứ lúc nào. 99999
-
Tuổi tối đa tính theo ngày (số ngày tối đa mà mật khẩu có hiệu lực). Giá trị
99999
sẽ vô hiệu hóa việc hết hạn mật khẩu. 7
-
Khoảng thời gian cảnh báo tính bằng ngày (số ngày trước khi mật khẩu hết hạn mà người dùng sẽ được cảnh báo).
-1
-
Khoảng thời gian mật khẩu không hoạt động tính bằng ngày (số ngày không hoạt động sau khi mật khẩu hết hạn và trước khi tài khoản bị khóa). Giá trị
-1
sẽ loại bỏ trạng thái không hoạt động của tài khoản.
Ngoài việc báo cáo về trạng thái tài khoản, chúng ta còn có thể sử dụng lệnh passwd
dưới tên siêu người dùng để thực hiện một số thao tác bảo trì tài khoản cơ bản. Chúng ta có thể khóa (lock) và mở khóa tài khoản (unlock), buộc người dùng thay đổi (edit) mật khẩu trong lần đăng nhập tiếp theo và xóa (delete) mật khẩu của người dùng bằng các tùy chọn -l
, -u
, -e
và -d
tương ứng.
Đúng lúc cần kiểm tra các tùy chọn này, chúng ta có thể đồng thời thuận tiện tìm hiểu về lệnh su
. Thông qua su
, chúng ta có thể thay đổi người dùng trong phiên đăng nhập. Ví dụ: hãy cùng sử dụng passwd
dưới tên siêu người dùng để khóa mật khẩu của carol
. Sau đó, chúng ta sẽ chuyển sang người dùng carol
và kiểm tra trạng thái tài khoản của mình để xác minh rằng mật khẩu — trên thực tế — đã bị khóa (L
) và không thể thay đổi. Cuối cùng là quay lại siêu người dùng và mở khóa mật khẩu của người dùng carol
.
root@debian:~# passwd -l carol passwd: password expiry information changed. root@debian:~# su - carol carol@debian:~$ passwd -S carol L 05/31/2020 0 99999 7 -1 carol@debian:~$ passwd Changing password for carol. Current password: passwd: Authentication token manipulation error passwd: password unchanged carol@debian:~$ exit logout root@debian:~# passwd -u carol passwd: password expiry information changed.
Ngoài ra, chúng ta cũng có thể khóa và mở khóa mật khẩu của người dùng bằng lệnh usermod
:
- Khoá mật khẩu của
carol
-
usermod -L carol
hoặcusermod --lock carol
. - Mở khoá mật khẩu của
carol
-
usermod -U carol
hoặcusermod --unlock carol
.
Note
|
Với các khoá chuyển |
Ngoài passwd
và usermod
, lệnh trực tiếp nhất để xử lý vấn đề lão hóa mật khẩu và tài khoản là chage
(“change age”). Với quyền gốc, chúng ta có thể truyền cho chage
khoá chuyển -l
(hoặc --list
), theo sau là tên người dùng để in mật khẩu hiện tại của người dùng đó và thông tin hết hạn tài khoản trên màn hình; với tư cách là người dùng thông thường, chúng ta có thể xem thông tin của chính mình:
carol@debian:~$ chage -l carol Last password change : Aug 06, 2019 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
Nếu phải chạy mà không có tùy chọn và chỉ có tên người dùng theo sau, chage
sẽ hoạt động một cách tương tác:
root@debian:~# chage carol Changing the aging information for carol Enter the new value, or press ENTER for the default Minimum Password Age [0]: Maximum Password Age [99999]: Last Password Change (YYYY-MM-DD) [2020-06-01]: Password Expiration Warning [7]: Password Inactive [-1]: Account Expiration Date (YYYY-MM-DD) [-1]:
Các tùy chọn để sửa đổi các cài đặt chage
khác nhau như sau:
-m days username
hoặc--mindays days username
-
Chỉ định số ngày tối thiểu giữa các lần thay đổi mật khẩu (ví dụ:
chage -m 5 carol
). Giá trị0
sẽ cho phép người dùng thay đổi mật khẩu của mình bất cứ lúc nào. -M days username
hoặc--maxdays days username
-
Chỉ định số ngày tối đa mà mật khẩu sẽ có hiệu lực (ví dụ:
chage -M 30 carol
). Để vô hiệu hóa việc hết hạn mật khẩu, hãy đặt giá trị cho tùy chọn này là99999
. -d days username
hoặc--lastday days username
-
Chỉ định số ngày kể từ lần thay đổi mật khẩu lần cuối (ví dụ:
chage -d 10 carol
). Giá trị0
sẽ buộc người dùng thay đổi mật khẩu vào lần đăng nhập tiếp theo. -W days username
hoặc--warndays days username
-
Chỉ định số ngày người dùng sẽ được nhắc về việc mật khẩu của họ đã hết hạn.
-I days username
hoặc--inactive days username
-
Chỉ định số ngày không hoạt động sau khi hết hạn mật khẩu (ví dụ:
chage -I 10 carol
) — giống nhưusermod -f
hoặcusermod --inactive
. Sau số ngày đó, tài khoản sẽ bị khóa. Tuy nhiên, với giá trị0
, tài khoản sẽ không bị khóa. -E date username
hoặc--expiredate date username
-
Chỉ định ngày (hoặc số ngày kể từ Kỷ nguyên — ngày 1 tháng 1 năm 1970) mà tài khoản sẽ bị khóa. Nó thường được biểu thị ở định dạng
YYYY-MM-DD
(ví dụ:chage -E 2050-12-13 carol
).
Note
|
Bạn có thể tìm hiểu thêm về |
Khám phá các Cổng mở
Khi nói đến việc theo dõi các cổng đang mở, có bốn tiện ích mạnh mẽ đều có mặt trên hầu hết các hệ thống Linux: lsof
, fuser
, netstat
và nmap
. Chúng ta sẽ cùng tìm hiểu về chúng trong phần này.
lsof
là viết tắt của “list open files” (liệt kê các tệp đang mở). Đây không phải là vấn đề nhỏ vì — đối với Linux — mọi thứ trong hệ thông đều là một tệp. Trên thực tế, nếu gõ lsof
vào cửa sổ dòng lệnh, chúng ta sẽ nhận được một danh sách lớn các tệp thông thường, tệp thiết bị, ổ nối, v.v. Tuy nhiên, trong bài học này, chúng ta sẽ chủ yếu tập trung vào các cổng. Để in danh sách tất cả các tệp mạng “Internet”, hãy chạy lsof
với tùy chọn -i
:
root@debian:~# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dhclient 357 root 7u IPv4 13493 0t0 UDP *:bootpc sshd 389 root 3u IPv4 13689 0t0 TCP *:ssh (LISTEN) sshd 389 root 4u IPv6 13700 0t0 TCP *:ssh (LISTEN) apache2 399 root 3u IPv6 13826 0t0 TCP *:http (LISTEN) apache2 401 www-data 3u IPv6 13826 0t0 TCP *:http (LISTEN) apache2 402 www-data 3u IPv6 13826 0t0 TCP *:http (LISTEN) sshd 557 root 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED) sshd 569 carol 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Ngoài dịch vụ bootpc
— được DHCP sử dụng — đầu ra sẽ còn hiển thị hai dịch vụ đang lắng nghe kết nối — ssh
và máy chủ web Apache (http
) — cũng như hai kết nối SSH đã thiết lập. Chúng ta có thể chỉ định một máy chủ cụ thể bằng ký hiệu @ip-address
để kiểm tra các kết nối của nó:
root@debian:~# lsof -i@192.168.1.7 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 557 root 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED) sshd 569 carol 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Note
|
Để chỉ in các tệp mạng IPv4 và IPv6, hãy sử dụng tùy chọn |
Tương tự, chúng ta cũng có thể lọc theo cổng bằng cách truyền cho tùy chọn -i
(hoặc -i@ip-address
) đối số :port
:
root@debian:~# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 389 root 3u IPv4 13689 0t0 TCP *:ssh (LISTEN) sshd 389 root 4u IPv6 13700 0t0 TCP *:ssh (LISTEN) sshd 557 root 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED) sshd 569 carol 3u IPv4 14701 0t0 TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Các cổng sẽ được phân tách bằng dấu phẩy (và phạm vi sẽ được chỉ định bằng dấu gạch ngang):
root@debian:~# lsof -i@192.168.1.7:22,80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 705 root 3u IPv4 13960 0t0 TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED) sshd 718 carol 3u IPv4 13960 0t0 TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
Note
|
|
Tiếp theo trong danh sách các lệnh về mạng là fuser
. Mục đích chính của nó là tìm “người dùng của tệp” — bao gồm việc biết các tiến trình nào đang truy cập vào tệp nào; nó cũng cung cấp cho người dùng một số thông tin khác như loại quyền truy cập. Ví dụ: để kiểm tra thư mục làm việc hiện tại, chúng ta chỉ cần chạy fuser
là đủ. Tuy nhiên, để biết thêm thông tin, chúng ta có thể sử dụng tùy chọn đầu ra chi tiết (-v
hoặc --verbose
):
root@debian:~# fuser . /root: 580c root@debian:~# fuser -v . USER PID ACCESS COMMAND /root: root 580 ..c.. bash
Hãy cùng chia nhỏ đầu ra:
- Tệp
-
Tệp mà chúng ta đang muốn nhận thông tin (
/root
). - Cột
USER
-
Chủ sở hữu của tệp (
root
). - Cột
PID
-
Mã định danh tiến trình (
580
). - Cột
ACCESS
-
Loại truy cập (
..c..
). Một trong số đó:c
-
Thư mục hiện tại.
e
-
Có thể thực thi được.
f
-
Mở tệp (bỏ qua ở chế độ hiển thị mặc định).
F
-
Mở tệp để ghi (bỏ qua ở chế độ hiển thị mặc định).
r
-
Thư mục gốc.
m
-
Tệp mmap hoặc thư viện chia sẻ
.
-
Ký tự giữ chỗ (bỏ qua trong chế độ hiển thị mặc định).
- Cột
COMMAND
-
Lệnh liên kết với tệp (
bash
).
Với tùy chọn -n
(hoặc --namespace
), chúng ta có thể tìm thông tin về các cổng/ổ nối mạng. Ta sẽ phải cung cấp giao thức mạng và số cổng. Vì vậy, để lấy thông tin về máy chủ web Apache, chúng ta sẽ chạy lệnh sau:
root@debian:~# fuser -vn tcp 80 USER PID ACCESS COMMAND 80/tcp: root 402 F.... apache2 www-data 404 F.... apache2 www-data 405 F.... apache2
Note
|
|
Bây giờ chúng ta sẽ chuyển sang netstat
. netstat
là một công cụ mạng rất linh hoạt, chủ yếu được sử dụng để in “số liệu thống kê về mạng”.
Nếu được chạy mà không có tùy chọn, netstat
sẽ hiển thị cả kết nối Internet đang hoạt động và ổ nối Unix. Do kích thước của danh sách, chúng ta có thể sẽ muốn dẫn ống đầu ra của nó thông qua less
:
carol@debian:~$ netstat |less Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.7:ssh 192.168.1.4:55444 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 10509 /run/systemd/journal/syslog unix 3 [ ] DGRAM 10123 /run/systemd/notify (...)
Để chỉ liệt kê các cổng và ổ nối “đang nghe”, chúng ta sẽ sử dụng tùy chọn -l
hoặc --listening
. Các tùy chọn -t
/--tcp
và -u
/--udp
có thể được thêm vào để tương ứng lọc theo giao thức TCP và UDP (chúng cũng có thể được kết hợp trong cùng một lệnh). Tương tự, -e
/--extend
sẽ hiển thị các thông tin bổ sung:
carol@debian:~$ netstat -lu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 0.0.0.0:bootpc 0.0.0.0:* carol@debian:~$ netstat -lt 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:smtp 0.0.0.0:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:smtp [::]:* LISTEN carol@debian:~$ netstat -lute Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN root 13729 tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN root 14372 tcp6 0 0 [::]:http [::]:* LISTEN root 14159 tcp6 0 0 [::]:ssh [::]:* LISTEN root 13740 tcp6 0 0 localhost:smtp [::]:* LISTEN root 14374 udp 0 0 0.0.0.0:bootpc 0.0.0.0:* root 13604
Nếu bỏ qua tùy chọn -l
thì chỉ riêng các kết nối đã được thiết lập mới được hiển thị:
carol@debian:~$ netstat -ute Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 192.168.1.7:ssh 192.168.1.4:39144 ESTABLISHED root 15103
Nếu chỉ quan tâm đến thông tin về các con số liên quan đến cổng và máy chủ, chúng ta có thể sử dụng tùy chọn -n
hoặc --numeric
để chỉ in số cổng và địa chỉ IP. Hãy lưu ý việc ssh
biến thành 22
khi thêm -n
vào lệnh trên:
carol@debian:~$ netstat -uten Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 192.168.1.7:22 192.168.1.4:39144 ESTABLISHED 0 15103
Như có thể thấy được, chúng ta có thể tạo các lệnh netstat
rất hữu ích và hiệu quả bằng cách kết hợp một số tùy chọn của nó. Hãy xem qua các trang hướng dẫn để tìm hiểu thêm và tìm ra sự kết hợp phù hợp nhất đối với từng nhu cầu.
Cuối cùng, chúng ta sẽ tìm hiểu về nmap
— hoặc “trình ánh xạ mạng”. Trình quét cổng này là một tiện ích rất mạnh mẽ khác được thực thi bằng cách chỉ định địa chỉ IP hoặc tên máy chủ:
root@debian:~# nmap localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:29 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000040s latency). Other addresses for localhost (not scanned): ::1 Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds
Ngoài một máy chủ duy nhất, nmap
cũng cho phép chúng ta quét:
- nhiều máy chủ
-
bằng cách phân tách chúng bằng dấu cách (ví dụ:
nmap localhost 192.168.1.7
). - các phạm vi máy chủ
-
bằng cách sử dụng dấu gạch ngang (ví dụ:
nmap 192.168.1.3-20
). - các mạng con
-
bằng cách sử dụng ký hiệu đại diện hoặc ký hiệu CIDR (ví dụ:
nmap 192.168.1.*
hoặcnmap 192.168.1.0/24
). Chúng ta cũng có thể loại trừ các máy chủ cụ thể (ví dụ:nmap 192.168.1.0/24 --exclude 192.168.1.7
).
Để quét một cổng cụ thể, hãy sử dụng khóa chuyển -p
, theo sau là số cổng hoặc tên dịch vụ (nmap -p 22
và nmap -p ssh
sẽ cho ta cùng một đầu ra):
root@debian:~# nmap -p 22 localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:54 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000024s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
Chúng ta cũng có thể quét nhiều cổng hoặc phạm vi cổng bằng cách sử dụng tương ứng dấu phẩy và dấu gạch ngang:
root@debian:~# nmap -p ssh,80 localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000051s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
root@debian:~# nmap -p 22-80 localhost Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000011s latency). Other addresses for localhost (not scanned): ::1 Not shown: 57 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds
Hai tùy chọn nmap
rất quan trọng và tiện dụng khác là:
-F
-
Chạy một lượt quét nhanh trên 100 cổng phổ biến nhất.
-v
-
Nhận đầu ra chi tiết (
-vv
sẽ in đầu ra chi tiết hơn nữa).
Note
|
|
Giới hạn về Thông tin đăng nhập của Người dùng, Tiến trình và mức sử dụng Bộ nhớ
Tài nguyên trên hệ thống Linux không phải là vô hạn. Vì vậy — với tư cách là quản trị viên hệ thống — người dùng nên đảm bảo được sự cân bằng giữa giới hạn người dùng về tài nguyên và tình trạng hoạt động bình thường của hệ điều hành. ulimit
có thể hỗ trợ chúng ta trên phương diện này.
ulimit
xử lý các giới hạn mềm (soft) và cứng (hard) — được chỉ định tương ứng bởi các tùy chọn -S
và -H
. Nếu được chạy mà không có tùy chọn hoặc đối số, ulimit
sẽ hiển thị các khối tệp mềm của người dùng hiện tại:
carol@debian:~$ ulimit unlimited
Với tùy chọn -a
, ulimit
sẽ hiển thị tất cả các giới hạn mềm hiện tại (giống như -Sa
); để hiển thị tất cả các giới hạn cứng hiện tại, hãy sử dụng -Ha
:
carol@debian:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 (...) carol@debian:~$ ulimit -Ha core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 (...)
Các tài nguyên vỏ có sẵn sẽ được chỉ định bởi các tùy chọn như:
-b
-
kích thước bộ đệm ổ nối tối đa
-f
-
kích thước tối đa của tệp được ghi bởi vỏ và các vỏ con
-l
-
kích thước tối đa có thể bị khóa trong bộ nhớ
-m
-
kích thước cài đặt thường trú tối đa (RSS) — phần bộ nhớ hiện tại được nắm giữ bởi một tiến trình trong bộ nhớ chính (RAM)
-v
-
dung lượng bộ nhớ ảo tối đa
-u
-
số lượng tiến trình tối đa có sẵn cho một người dùng
Do đó, để hiển thị giới hạn, chúng ta sẽ sử dụng ulimit
, theo sau là -S
(mềm) hoặc -H
(cứng) và tùy chọn tài nguyên; nếu cả -S
hoặc -H
đều không được cung cấp, các giới hạn mềm sẽ được hiển thị:
carol@debian:~$ ulimit -u 10000 carol@debian:~$ ulimit -Su 10000 carol@debian:~$ ulimit -Hu 15672
Tương tự, để đặt các giới hạn mới cho một tài nguyên cụ thể, chúng ta sẽ chỉ định -S
hoặc -H
, theo sau là tùy chọn tài nguyên tương ứng và giá trị mới. Giá trị này có thể là một chữ số hoặc các từ đặc biệt là soft
(giới hạn mềm hiện tại), hard
(giới hạn cứng hiện tại) hoặc unlimited
(không giới hạn). Nếu cả -S
hoặc -H
đều không được chỉ định, cả hai giới hạn sẽ được đặt. Ví dụ: trước tiên chúng ta sẽ đọc giá trị kích thước tối đa hiện tại cho các tệp được ghi bởi vỏ và các vỏ con của nó:
root@debian:~# ulimit -Sf unlimited root@debian:~# ulimit -Hf unlimited
Bây giờ, chúng ta sẽ thay đổi giá trị từ unlimited
thành các khối 500
mà không chỉ định -S
hoặc -H
. Hãy lưu ý việc cả giới hạn mềm và cứng đều thay đổi:
root@debian:~# ulimit -f 500 root@debian:~# ulimit -Sf 500 root@debian:~# ulimit -Hf 500
Cuối cùng, chúng ta sẽ chỉ giảm giới hạn mềm xuống các khối 200
:
root@debian:~# ulimit -Sf 200 root@debian:~# ulimit -Sf 200 root@debian:~# ulimit -Hf 500
Giới hạn cứng sẽ chỉ có thể được tăng lên bởi siêu người dùng. Mặt khác, người dùng thông thường có thể giảm giới hạn cứng và tăng giới hạn mềm lên thành giá trị giới hạn cứng. Để duy trì các giá trị giới hạn mới trong các lần khởi động lại, chúng ta phải ghi chúng vào tệp /etc/security/limits.conf
. Đây cũng là tệp được quản trị viên sử dụng để áp dụng các hạn chế đối với những người dùng cụ thể.
Note
|
Hãy chú ý rằng không có trang hướng dẫn dành riêng cho |
Xử lý những Người dùng đã đăng nhập
Một công việc khác của người dùng với tư cách quản trị viên hệ thống chính là theo dõi những người dùng đã đăng nhập. Có ba tiện ích có thể giúp chúng ta thực hiện công việc này là last
, who
và w
.
last
sẽ in danh sách những người dùng đăng nhập gần đây nhất với thông tin mới nhất ở trên cùng:
root@debian:~# last carol pts/0 192.168.1.4 Sat Jun 6 14:25 still logged in reboot system boot 4.19.0-9-amd64 Sat Jun 6 14:24 still running mimi pts/0 192.168.1.4 Sat Jun 6 12:07 - 14:24 (02:16) reboot system boot 4.19.0-9-amd64 Sat Jun 6 12:07 - 14:24 (02:17) (...) wtmp begins Sun May 31 14:14:58 2020
Nhìn vào danh sách rút gọn, chúng ta đã nhận được thông tin về hai người dùng cuối cùng trên hệ thống. Hai dòng đầu tiên cho chúng ta biết về người dùng carol
, hai dòng tiếp theo là về người dùng mimi
. Thông tin sẽ như sau:
-
Người dùng
carol
tại cửa sổ dòng lệnhpts/0
từ máy chủ192.168.1.4
đã bắt đầu phiên của mình vàoSat Jun 6
(Thứ Bảy ngày 6 tháng 6) lúc14:25
và vẫn đanglogged in
(đăng nhập). Hệ thống — sử dụng hạt nhân4.19.0-9-amd64
— đã được khởi động (reboot system boot
) vàoSat Jun 6
lúc14:24
vàstill running
(vẫn đang chạy). -
Người dùng
mimi
tại cửa sổ dòng lệnhpts/0
từ máy chủ192.168.1.4
đã bắt đầu phiên của mình vàoSat Jun 6
lúc12:07
và đăng xuất lúc14:24
(phiên kéo dài tổng cộng(02:16)
giờ). Hệ thống — sử dụng hạt nhân4.19.0-9-amd64
— đã được khởi động (reboot system boot
) vàoSat Jun 6
lúc12:07
và bị tắt lúc14:24
(nó đã hoạt động được(02:17)
giờ).
Note
|
Dòng |
Chúng ta có thể truyền cho last
một tên người dùng để chỉ hiển thị các mục nhập cho người dùng đó:
root@debian:~# last carol carol pts/0 192.168.1.4 Sat Jun 6 14:25 still logged in carol pts/0 192.168.1.4 Sat Jun 6 12:07 - 14:24 (02:16) carol pts/0 192.168.1.4 Fri Jun 5 00:48 - 01:28 (00:39) (...)
Về cột thứ hai (cửa sổ dòng lệnh), pts
là viết tắt của Pseudo Terminal Slave (Trình mô phỏng Cửa sổ Dòng lệnh đồ họa) — trái ngược với một cửa sổ dòng lệnh TeleTYpewriter (hoặc tty
) hoàn chỉnh. 0
tức là cửa sổ dòng lệnh đầu tiên (số đếm bắt đầu từ 0).
Note
|
Để kiểm tra những lần đăng nhập lỗi, hãy chạy |
Tiện ích who
và w
khá giống nhau và đều tập trung vào người dùng hiện đã đăng nhập. who
sẽ hiển thị ai đã đăng nhập, trong khi w
ngoài ra còn hiển thị thông tin về những gì họ đang làm.
Khi được thực thi mà không có tùy chọn nào, who
sẽ hiển thị bốn cột tương ứng với người dùng, cửa sổ dòng lệnh, ngày giờ và tên máy chủ đã đăng nhập:
root@debian:~# who carol pts/0 2020-06-06 17:16 (192.168.1.4) mimi pts/1 2020-06-06 17:28 (192.168.1.4)
who
chấp nhận một loạt các tùy chọn, trong số đó có các tuỳ chọn nổi bật sau:
-b
,--boot
-
Hiển thị thời gian khởi động hệ thống cuối cùng.
-r
,--runlevel
-
Hiển thị mức chạy hiện tại.
-H
,--heading
-
In tiêu đề cột.
So với who
, w
sẽ cho kết quả chi tiết hơn một chút:
root@debian:~# w 17:56:12 up 40 min, 2 users, load average: 0.04, 0.12, 0.09 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT carol pts/0 192.168.1.4 17:16 1.00s 0.15s 0.05s sshd: carol [priv] mimi pts/1 192.168.1.4 17:28 15:08 0.05s 0.05s -bash
Dòng trên cùng cung cấp cho chúng ta thông tin về thời gian hiện tại (17:56:12
), hệ thống đã hoạt động được bao lâu (up 40 min
), số lượng người dùng hiện đang đăng nhập (2 users
) và các số tải lượng trung bình (load average: 0.04, 0.12, 0.09
). Các giá trị này đề cập đến số lượng công việc trong hàng đợi chạy được tính trung bình trong 1, 5 và 15 phút vừa qua.
Sau đó, chúng ta có thể thấy tám cột. Hãy cùng xem chi tiết:
USER
-
Tên đăng nhập của người dùng.
TTY
-
Tên cửa sổ dòng lệnh mà người dùng đang sử dụng.
FROM
-
Máy chủ từ xa mà người dùng đã đăng nhập.
LOGIN@
-
Thời gian đăng nhập.
IDLE
-
Thời gian rảnh.
JCPU
-
Thời gian được sử dụng bởi tất cả các tiến trình được đính kèm với tty (bao gồm cả các công việc hiện đang chạy ngầm).
PCPU
-
Thời gian được sử dụng bởi tiến trình hiện tại (tiến trình đang hiển thị cho dòng lệnh
WHAT
). WHAT
-
Dòng lệnh của tiến trình hiện tại.
Giống như với who
, chúng ta cũng có thể truyền tên người dùng cho w
:
root@debian:~# w mimi 18:23:15 up 1:07, 2 users, load average: 0.00, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT mimi pts/1 192.168.1.4 17:28 9:23 0.06s 0.06s -bash
Cấu hình và cách sử dụng sudo
cơ bản
Như đã được nhắc tới ở trên, su
cho phép người dùng chuyển sang bất kỳ một người dùng nào khác trong hệ thống, miễn là mật khẩu của người dùng mục tiêu được cung cấp. Đối với siêu người dùng, việc để mật khẩu của nó được phân phối hoặc được (nhiều) người dùng biết sẽ khiến hệ thống gặp rủi ro và là một thói quen bảo mật rất tồi. Cách sử dụng cơ bản của su
là su - target-username
. Tuy nhiên, khi thay đổi thành siêu người dùng — tên người dùng đích có thể có hoặc không:
carol@debian:~$ su - root Password: root@debian:~# exit logout carol@debian:~$ su - Password: root@debian:~#
Việc sử dụng dấu gạch ngang (-
) sẽ đảm bảo rằng môi trường của người dùng đích được tải. Không có nó, môi trường của người dùng cũ sẽ được giữ nguyên:
carol@debian:~$ su Password: root@debian:/home/carol#
Mặt khác, chúng ta cũng có lệnh sudo
. Với nó, ta có thể thực thi lệnh với tư cách là siêu người dùng hoặc bất cứ một người dùng nào khác. Từ góc độ bảo mật, sudo
là một lựa chọn tốt hơn nhiều so với su
vì nó có hai ưu điểm chính:
-
để chạy lệnh với quyền gốc, người dùng không cần mật khẩu của siêu người dùng mà chỉ cần mật khẩu của người dùng đang gọi lệnh tuân thủ theo một chính sách bảo mật. Chính sách bảo mật mặc định là
sudoers
được chỉ định trong/etc/sudoers
và/etc/sudoers.d/*
. -
sudo
cho phép người dùng chạy các lệnh đơn lẻ với các đặc quyền nâng cao thay vì khởi chạy một vỏ con hoàn toàn mới cho siêu người dùng nhưsu
.
Cách sử dụng cơ bản của sudo
là sudo -u target-username command
. Tuy nhiên, để chạy lệnh dưới tên siêu người dùng, tùy chọn -u target-username
là không cần thiết:
carol@debian:~$ sudo -u mimi whoami mimi carol@debian:~$ sudo whoami root
Note
|
|
Tệp /etc/sudoers
Tệp cấu hình chính của sudo
là /etc/sudoers
(ngoài ra còn có thư mục /etc/sudoers.d
). Đây là nơi xác định đặc quyền sudo
của người dùng. Nói cách khác, chúng ta sẽ chỉ định ai có thể chạy lệnh nào cũng như người dùng nào trên máy nào — cũng như các cài đặt khác ở đây. Cú pháp được sử dụng sẽ như sau:
carol@debian:~$ sudo less /etc/sudoers (...) # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL (...)
Đặc tả đặc quyền cho siêu người dùng là ALL=(ALL:ALL) ALL
. Đặc tả này được dịch là: siêu người dùng (root
) có thể đăng nhập từ tất cả các máy chủ (ALL
) với tư cách là tất cả mọi người dùng và tất cả mọi nhóm ((ALL:ALL)
) và chạy tất cả các lệnh (ALL
). Điều này cũng đúng với các thành viên của nhóm sudo
— hãy lưu ý cách xác định tên nhóm bằng một dấu phần trăm (%
) đứng trước.
Do đó, để người dùng carol
có thể kiểm tra trạng thái apache2
từ bất kỳ một máy chủ nào với tư cách là bất kỳ một người dùng hoặc nhóm nào, chúng ta sẽ thêm dòng sau vào tệp sudoers
:
carol ALL=(ALL:ALL) /usr/bin/systemctl status apache2
Chúng ta có thể sẽ muốn giúp carol
tránh khỏi sự bất tiện khi phải cung cấp mật khẩu để chạy lệnh systemctl status apache2
. Để làm được điều này, ta sẽ phải sửa đổi dòng đặc tả như sau:
carol ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status apache2
Giả sử bây giờ chúng ta muốn giới hạn máy chủ của mình ở 192.168.1.7 và cho phép carol
chạy systemctl status apache2
với tư cách là người dùng mimi
. Chúng ta sẽ sửa đổi dòng đặc tả như sau:
carol 192.168.1.7=(mimi) /usr/bin/systemctl status apache2
Bây giờ, ta có thể kiểm tra trạng thái của máy chủ web Apache với tư cách là người dùng mimi
:
carol@debian:~$ sudo -u mimi systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-09 13:12:19 CEST; 29min ago (...)
Nếu carol
được thăng chức lên quản trị viên hệ thống và được trao tất cả các đặc quyền, cách tiếp cận dễ dàng nhất là đưa cô ấy vào nhóm sudo
đặc biệt với usermod
và tùy chọn -G
(chúng ta cũng có thể sử dụng tùy chọn -a
để đảm bảo rằng người dùng không bị xóa khỏi bất kỳ một nhóm nào khác mà họ có thể thuộc về):
root@debian:~# sudo useradd -aG sudo carol
Note
|
Trong họ bản phân phối Red Hat, nhóm |
Thay vì chỉnh sửa /etc/sudoers
trực tiếp, ta chỉ cần sử dụng lệnh visudo
dưới tên siêu người dùng (ví dụ như visudo
). Lệnh này sẽ mở /etc/sudoers
bằng trình soạn thảo văn bản được xác định trước của người dùng. Để thay đổi trình soạn thảo văn bản mặc định, ta có thể thêm tùy chọn editor
làm một cài đặt Defaults
(Mặc định) trong /etc/sudoers
. Ví dụ: để thay đổi trình soạn thảo thành nano
, ta sẽ thêm dòng sau:
Defaults editor=/usr/bin/nano
Note
|
Ngoài ra, chúng ta có thể chỉ định một trình soạn thảo văn bản thông qua biến môi trường |
Ngoài người dùng và nhóm, chúng ta cũng có thể sử dụng bí danh trong /etc/sudoers
. Có ba loại bí danh chính mà ta có thể xác định: bí danh máy chủ (Host_Alias
), bí danh người dùng (User_Alias
) và bí danh của lệnh (Cmnd_Alias
). Sau đây là một ví dụ:
# Host alias specification Host_Alias SERVERS = 192.168.1.7, server1, server2 # User alias specification User_Alias REGULAR_USERS = john, mary, alex User_Alias PRIVILEGED_USERS = mimi User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS # Cmnd alias specification Cmnd_Alias SERVICES = /usr/bin/systemctl * # User privilege specification root ALL=(ALL:ALL) ALL ADMINS SERVERS=SERVICES # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
Xét tệp sudoers
mẫu này, hãy cùng giải thích ba loại bí danh một cách chi tiết hơn:
- Bí danh máy chủ
-
Chúng bao gồm một danh sách tên máy chủ, địa chỉ IP cũng như các mạng và nhóm mạng (với ký tự
+
đứng đằng trước) được phân tách bằng dấu phẩy . Mặt nạ mạng cũng có thể được chỉ định. Bí danh máy chủSERVERS
bao gồm một địa chỉ IP và hai tên máy chủ:Host_Alias SERVERS = 192.168.1.7, server1, server2
- Bí danh người dùng
-
Chúng bao gồm một danh sách các người dùng được phân tách bằng dấu phẩy được chỉ định làm tên người dùng, nhóm (với ký tự
%
đứng đằng trước) và nhóm mạng (với ký tự+
đứng đằng trước). Chúng ta có thể loại trừ những người dùng cụ thể bằng ký hiệu!
. Ví dụ: bí danh người dùngADMINS
bao gồm người dùngcarol
, các thành viên của nhómsudo
và những thành viên của bí danh người dùngPRIVILEGE_USERS
không thuộc bí danh người dùngREGULAR_USERS
:User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
- Bí danh của lệnh
-
Chúng bao gồm một danh sách các lệnh và thư mục được phân tách bằng dấu phẩy. Nếu một thư mục được chỉ định, mọi tệp trong thư mục đó sẽ được bao gồm — tuy nhiên, các thư mục con sẽ bị bỏ qua. Bí danh lệnh
SERVICES
bao gồm một lệnh duy nhất với tất cả các lệnh con của nó — như được chỉ định bởi dấu hoa thị (*
):Cmnd_Alias SERVICES = /usr/bin/systemctl *
Do có chỉ định bí danh, dòng ADMINS SERVERS=SERVICES
ở dưới phần User privilege specification
(Đặc tả đặc quyền người dùng) có thể được dịch là: tất cả người dùng thuộc ADMINS
có thể sử dụng sudo
để chạy bất kỳ một lệnh nào trong SERVICES
trên bất kỳ một máy chủ nào trong SERVER
.
Note
|
Có một loại bí danh thứ tư mà ta có thể đưa vào |
Bài tập Hướng dẫn
-
Hãy hoàn thành bảng sau đây về các quyền đặc biệt:
Quyền đặc biệt Biểu diễn số Biểu diễn Biểu tượng Tìm các tệp có duy nhất bộ đặc Quyền này SUID
SGID
-
Việc hiển thị các tệp chỉ có bộ bit
SUID
hoặcSGID
thường sẽ không mấy thực tế. Hãy thực hiện các tác vụ sau để chứng minh rằng các tìm kiếm của bạn có thể hiệu quả hơn:-
Tìm tất cả các tệp có
SUID
(và các quyền khác) được đặt trong/usr/bin
: -
Tìm tất cả các tệp có
SGID
(và các quyền khác) được đặt trong/usr/bin
: -
Tìm tất cả các tệp có
SUID
hoặcSGID
được đặt trong/usr/bin
:
-
-
chage
cho phép bạn thay đổi thông tin hết hạn mật khẩu của người dùng. Với quyền gốc, hãy hoàn thành bảng sau bằng cách cung cấp các lệnh chính xác cho người dùngmary
:Ý nghĩa Các lệnh chage
Tạo mật khẩu có hiệu lực trong 365 ngày.
Yêu cầu người dùng thay đổi mật khẩu vào lần đăng nhập tiếp theo.
Đặt số ngày tối thiểu giữa các lần thay đổi mật khẩu thành 1.
Vô hiệu hóa việc hết hạn mật khẩu.
Cho phép người dùng thay đổi mật khẩu của mình bất cứ lúc nào.
Đặt thời gian cảnh báo thành 7 ngày và ngày hết hạn tài khoản đến ngày 20 tháng 8 năm 2050.
In thông tin hết hạn mật khẩu hiện tại của người dùng.
-
Hãy hoàn thành bảng sau với tiện ích mạng thích hợp:
Hành động (Các) Lệnh Hiển thị các tệp mạng cho máy chủ
192.168.1.55
trên cổng22
bằng cách sử dụnglsof
.Hiển thị các tiến trình truy cập cổng mặc định của máy chủ web Apache trên máy của bạn bằng
fuser
.Liệt kê tất cả các ổ nối udp đang nghe trên máy của bạn bằng cách sử dụng
netstat
.Quét các cổng
80
đến443
trên máy chủ192.168.1.55
bằng cách sử dụngnmap
. -
Hãy thực hiện các tác vụ sau liên quan đến kích thước cài đặt thường trú (RSS) và
ulimit
với tư cách là người dùng thông thường:-
Hiển thị giới hạn mềm trên RSS tối đa:
-
Hiển thị giới hạn cứng trên RSS tối đa:
-
Đặt giới hạn mềm trên RSS tối đa thành 5.000 kilobyte:
-
Đặt giới hạn cứng trên RSS tối đa thành 10.000 kilobyte:
-
Cuối cùng, hãy thử tăng giới hạn cứng trên RSS tối đa lên đến 15.000 kilobyte. Bạn có thể làm được điều này không? Tại sao?
-
-
Hãy xem xét dòng đầu ra của lệnh
last
sau đây và trả lời các câu hỏi:carol pts/0 192.168.1.4 Sun May 31 14:16 - 14:22 (00:06)
-
carol
có được kết nối từ máy chủ từ xa không? Tại sao? -
Phiên của
carol
đã kéo dài trong bao lâu? -
carol
có được kết nối thông qua một cửa sổ dòng lệnh thuần văn bản cổ điển thực thụ không? Tại sao?
-
-
Hãy xem đoạn trích sau từ
/etc/sudoers
và trả lời câu hỏi bên dưới.# Host alias specification Host_Alias SERVERS = 192.168.1.7, server1, server2 # User alias specification User_Alias REGULAR_USERS = john, mary, alex User_Alias PRIVILEGED_USERS = mimi User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS # Cmnd alias specification Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2 # User privilege specification root ALL=(ALL:ALL) ALL ADMINS SERVERS=WEB_SERVER_STATUS # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
alex
có thể kiểm tra trạng thái của Máy chủ Web Apache trên bất kỳ một máy chủ nào không? Tại sao?
Bài tập Mở rộng
-
Ngoài
SUID
vàSGID
, chúng ta còn có một quyền đặc biệt thứ ba là bit dính (sticky bit). Hiện tại, nó chủ yếu được sử dụng trên các thư mục như/tmp
để ngăn người dùng thông thường xóa hoặc di chuyển các tệp khác ngoài tệp của họ. Hãy thực hiện các nhiệm vụ sau:-
Đặt bit dính trên
~/temporal
: -
Tìm các thư mục có bit dính (và bất kỳ quyền nào khác) được đặt trên thư mục chính của bạn:
-
Bỏ đặt bit dính trên
~/temporal
:
-
-
Làm thế nào để có thể biết được mật khẩu của người dùng đã bị khóa thông qua
passwd -l username
hoặcusermod -L username
bằng cách xem tệp/etc/shadow
? -
Lệnh
usermod
tương ứng vớichage -E date username
hoặcchage --expiredate date username
là gì? -
Hãy cho biết hai lệnh
nmap
khác nhau để quét toàn bộ 65535 cổng trên localhost:
Tóm tắt
Trong bài học này, chúng ta đã học cách thực hiện một số nhiệm vụ quản trị bảo mật. Các chủ đề sau đây đã được đề cập tới:
-
Tìm các tệp có bộ quyền
SUID
vàSGID
đặc biệt. -
Đặt và thay đổi mật khẩu người dùng và xử lý thông tin lão hoá của mật khẩu.
-
Sử dụng một số tiện ích mạng để khám phá các cổng mở trên máy chủ/mạng.
-
Thiết lập giới hạn về tài nguyên hệ thống.
-
Kiểm tra người dùng đã đăng nhập vào hệ thống hoặc hiện đang đăng nhập.
-
Cách sử dụng và cấu hình
sudo
cơ bản (thông qua tệp/etc/sudoers
).
Các lệnh và tệp đã được thảo luận trong bài học này:
find
-
Tìm kiếm tệp trong hệ thống phân cấp thư mục.
passwd
-
Thay đổi mật khẩu người dùng.
chmod
-
Thay đổi bit chế độ tệp.
chage
-
Thay đổi thông tin hết hạn của mật khẩu của người dùng.
lsof
-
Liệt kê các tệp đang mở.
fuser
-
Xác định các tiến trình sử dụng tệp hoặc ổ nối.
netstat
-
In các kết nối mạng.
nmap
-
Công cụ thăm dò mạng và quét cổng.
ulimit
-
Nhận và đặt giới hạn người dùng.
/etc/security/limits.conf
-
Tệp cấu hình để áp dụng các hạn chế đối với người dùng.
last
-
In danh sách người dùng đăng nhập lần gần đây nhất.
lastb
-
In danh sách các lần đăng nhập không hợp lệ.
/var/log/wtmp
-
Cơ sở dữ liệu thông tin đăng nhập của người dùng.
who
-
Hiển thị ai đã đăng nhập.
w
-
Hiển thị ai đã đăng nhập và họ đang làm gì.
su
-
Thay đổi người dùng hoặc trở thành siêu người dùng.
sudo
-
Thực thi lệnh với tư cách một người dùng khác (bao gồm cả siêu người dùng).
/etc/sudoers
-
Tệp cấu hình mặc định cho chính sách bảo mật
sudo
.
Đáp án Bài tập Hướng dẫn
-
Hãy hoàn thành bảng sau đây về các quyền đặc biệt:
Quyền đặc biệt Biểu diễn số Biểu diễn Biểu tượng Tìm các tệp có duy nhất bộ đặc Quyền này SUID
4000
s
,S
find -perm 4000
,find -perm u+s
SGID
2000
s
,S
find -perm 2000
,find -perm g+s
-
Việc hiển thị các tệp chỉ có bộ bit
SUID
hoặcSGID
thường sẽ không mấy thực tế. Hãy thực hiện các tác vụ sau để chứng minh rằng các tìm kiếm của bạn có thể hiệu quả hơn:-
Tìm tất cả các tệp có
SUID
(và các quyền khác) được đặt trong/usr/bin
:find /usr/bin -perm -4000
orfind /usr/bin -perm -u+s
-
Tìm tất cả các tệp có
SGID
(và các quyền khác) được đặt trong/usr/bin
:find /usr/bin -perm -2000
hoặcfind /usr/bin -perm -g+s
-
Tìm tất cả các tệp có
SUID
hoặcSGID
được đặt trong/usr/bin
:find /usr/bin -perm /6000
-
-
chage
cho phép bạn thay đổi thông tin hết hạn mật khẩu của người dùng. Với quyền gốc, hãy hoàn thành bảng sau bằng cách cung cấp các lệnh chính xác cho người dùngmary
:Ý nghĩa Các lệnh chage
Tạo mật khẩu có hiệu lực trong 365 ngày.
chage -M 365 mary
,chage --maxdays 365 mary
Yêu cầu người dùng thay đổi mật khẩu vào lần đăng nhập tiếp theo.
chage -d 0 mary
,chage --lastday 0 mary
Đặt số ngày tối thiểu giữa các lần thay đổi mật khẩu thành 1.
chage -m 1 mary
,chage --mindays 1 mary
Vô hiệu hóa việc hết hạn mật khẩu.
chage -M 99999 mary
,chage --maxdays 99999 mary
Cho phép người dùng thay đổi mật khẩu của mình bất cứ lúc nào.
chage -m 0 mary
,chage --mindays 0 mary
Đặt thời gian cảnh báo thành 7 ngày và ngày hết hạn tài khoản đến ngày 20 tháng 8 năm 2050.
chage -W 7 -E 2050-08-20 mary
,chage --warndays 7 --expiredate 2050-08-20 mary
In thông tin hết hạn mật khẩu hiện tại của người dùng.
chage -l mary
,chage --list mary
-
Hãy hoàn thành bảng sau với tiện ích mạng thích hợp:
Hành động (Các) Lệnh Hiển thị các tệp mạng cho máy chủ
192.168.1.55
trên cổng22
bằng cách sử dụnglsof
.lsof -i@192.168.1.55:22
Hiển thị các tiến trình truy cập cổng mặc định của máy chủ web Apache trên máy của bạn bằng
fuser
.fuser -vn tcp 80
,fuser --verbose --namespace tcp 80
Liệt kê tất cả các ổ nối udp đang nghe trên máy của bạn bằng cách sử dụng
netstat
.netstat -lu
,netstat --listening --udp
Quét các cổng
80
đến443
trên máy chủ192.168.1.55
bằng cách sử dụngnmap
.nmap -p 80-443 192.168.1.55
-
Hãy thực hiện các tác vụ sau liên quan đến kích thước cài đặt thường trú (RSS) và
ulimit
với tư cách là người dùng thông thường:-
Hiển thị giới hạn mềm trên RSS tối đa:
ulimit -m
,ulimit -Sm
-
Hiển thị giới hạn cứng trên RSS tối đa:
ulimit -Hm
-
Đặt giới hạn mềm trên RSS tối đa thành 5.000 kilobyte:
ulimit -Sm 5000
-
Đặt giới hạn cứng trên RSS tối đa thành 10.000 kilobyte:
ulimit -Hm 10000
-
Cuối cùng, hãy thử tăng giới hạn cứng trên RSS tối đa lên đến 15.000 kilobyte. Bạn có thể làm được điều này không? Tại sao?
Không. Một khi đã được đặt, người dùng thông thường không thể gia tăng giới hạn cứng.
-
-
Hãy xem xét dòng đầu ra của lệnh
last
sau đây và trả lời các câu hỏi:carol pts/0 192.168.1.4 Sun May 31 14:16 - 14:22 (00:06)
-
carol
có được kết nối từ máy chủ từ xa không? Tại sao?Có, địa chỉ IP của máy chủ từ xa nằm ở cột thứ ba.
-
Phiên của
carol
đã kéo dài trong bao lâu?Sáu phút (như được hiển thị ở cột cuối cùng).
-
carol
có được kết nối thông qua một cửa sổ dòng lệnh thuần văn bản cổ điển thực thụ không? Tại sao?Không,
pts/0
trong cột thứ hai cho biết kết nối được thực hiện thông qua trình mô phỏng cửa sổ dòng lệnh đồ họa (hay còn gọi là Pseudo Terminal Slave).
-
-
Hãy xem đoạn trích sau từ
/etc/sudoers
và trả lời câu hỏi bên dưới.# Host alias specification Host_Alias SERVERS = 192.168.1.7, server1, server2 # User alias specification User_Alias REGULAR_USERS = john, mary, alex User_Alias PRIVILEGED_USERS = mimi User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS # Cmnd alias specification Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2 # User privilege specification root ALL=(ALL:ALL) ALL ADMINS SERVERS=WEB_SERVER_STATUS # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
alex
có thể kiểm tra trạng thái của Máy chủ Web Apache trên bất kỳ một máy chủ nào không? Tại sao?No, as he is a member of
REGULAR_USERS
and that group of users is excluded fromADMINS
; the only users (apart fromcarol
, members of thesudo
group androot
) that can runsystemctl status apache2
on theSERVERS
.
Đáp án Bài tập Mở rộng
-
Ngoài
SUID
vàSGID
, chúng ta còn có một quyền đặc biệt thứ ba là bit dính (sticky bit). Hiện tại, nó chủ yếu được sử dụng trên các thư mục như/tmp
để ngăn người dùng thông thường xóa hoặc di chuyển các tệp khác ngoài tệp của họ. Hãy thực hiện các nhiệm vụ sau:-
Đặt bit dính trên
~/temporal
:chmod +t temporal
,chmod 1755 temporal
-
Tìm các thư mục có bit dính (và bất kỳ quyền nào khác) được đặt trên thư mục chính của bạn:
find ~ -perm -1000
,find ~ -perm /1000
-
Bỏ đặt bit dính trên
~/temporal
:chmod -t temporal
,chmod 0755 temporal
-
-
Làm thế nào để có thể biết được mật khẩu của người dùng đã bị khóa thông qua
passwd -l username
hoặcusermod -L username
bằng cách xem tệp/etc/shadow
?Dấu chấm than sẽ xuất hiện ở trường thứ hai ngay sau tên đăng nhập của người dùng bị khoá (ví dụ:
mary:!$6$gOg9xJgv…
). -
Lệnh
usermod
tương ứng vớichage -E date username
hoặcchage --expiredate date username
là gì?usermod -e date username
vàusermod --expiredate date username
-
Hãy cho biết hai lệnh
nmap
khác nhau để quét toàn bộ 65535 cổng trên localhost:nmap -p 1-65535 localhost
vànmap -p- localhost