Phần 2 - Tổng quan về kiến trúc Linux
- 2.1 - Linux Kernel (UPDATED 21/01/2024)
- 2.1.1 - Vai trò của Linux Kernel (UPDATED 21/01/2024)
- 2.1.2 - Tổng quan về Interrupt - Ngắt (UPDATED 05/09/2023)
- 2.2 - Quản lý người dùng và nhóm ( ⬆️ UPDATED 15/04/2024)
- 2.2.1 - Khái niệm
User
(UPDATED 17/09/2023) - 2.2.2 - Khái niệm về nhóm, chính và phụ (UPDATED 12/09/2023)
- 2.2.3 - Thay đổi tài khoản người dùng (UPDATED 13/09/2023)
- 2.2.4 - Các thao tác quản lý trên người dùng và nhóm(UPDATED 11/09/2023)
- 2.2.5 - Hạn chế quyền truy cập người dùng (UPDATED 13/09/2023)
- 2.2.6 - Cấp quyền
sudo
cho nhómwheel
( ⬆️ UPDATED 15/04/2024) - 2.2.7 - Cấp quyền
sudo
cụ thể ( ⬆️ UPDATED 15/04/2024)
- 2.2.1 - Khái niệm
- 2.3 - Hệ thống tệp tin (UPDATED 07/01/2024)
- 2.3.1 - Phân cấp hệ thống tệp tin (UPDATED 26/08/2023)
- 2.3.2 - RPM Package và phân loại (UPDATED 24/08/2023)
- 2.3.3 - Kernel RPM Package (UPDATED 24/08/2023)
- 2.3.4 - Tổng quan về quyền trên tệp tin (UPDATED 07/01/2024)
- 2.3.4.1 - Quản lý quyền tệp tin (UPDATED 13/09/2023)
- 2.3.4.2 - Quyền đặc biệt dành cho chủ sở hữu (SUID) và lỗ hổng leo thang đặc quyền (UPDATED 10/09/2023)
- 2.3.4.3 - Quyền đặc biệt dành cho nhóm (UPDATED 10/09/2023)
- 2.3.4.4 - Quyền đặc biệt Sticky bit (UPDATED 04/09/2023)
- 2.3.5 - Xác định hệ thống tệp tin và thiết bị (UPDATED 07/11/2023)
- 2.4 - Tổng quan tiến trình Linux (UPDATED 04/10/2023)
- 2.4.1 - Trạng thái của tiến trình Linux (UPDATED 17/09/2023)
- 2.4.2 - Kiểm soát các
Job
(UPDATED 04/10/2023) - 2.4.3 - Kết thúc tiến trình (UPDATED 18/09/2023)
- 2.4.4 - Dịch vụ hạ tầng (UPDATED 21/09/2023)
- 2.4.5 - Tổng quan về
systemd
(UPDATED 30/09/2023) - 2.4.6 - Kiểm soát dịch vụ hệ thống (UPDATED 04/10/2023)
- 2.4.7 - Mẫu
unit
với ký hiệu@
(UPDATED 04/10/2023) - 2.4.8 - Chi tiết tệp
unit
(UPDATED 04/10/2023)- 2.4.8.1 - Loại
unit
phổ biến*.service
(UPDATED 03/10/2023) - 2.4.8.2 - Loại
unit
về*.socket
(UPDATED 30/09/2023) - 2.4.8.3 - Loại
unit
về*.path
(UPDATED 30/09/2023)
- 2.4.8.1 - Loại
- 2.5 - Điều khiển an toàn từ xa (UPDATED 31/12/2023)
- 2.5.1 - Tổng quan về kiến trúc giao thức
SSH
(UPDATED 31/12/2023)- 2.5.1.1 - Kiến trúc giao thức
SSH
(UPDATED 22/10/2023) - 2.5.1.2 - Những xem xét bảo mật về khía cạnh truyền dẫn (UPDATED 19/10/2023)
- 2.5.1.3 - Những xem xét bảo mật về khía cạnh xác thực (UPDATED 19/10/2023)
- 2.5.1.4 - Giao thức
SSH-1
,SSH-2
và sự cải tiến (UPDATED 22/10/2023)
- 2.5.1.1 - Kiến trúc giao thức
- 2.5.2 - Cài đặt
OpenSSH
, kết nối và cấu hình (UPDATED 23/10/2023)- 2.5.2.1 - Sử dụng công cụ cơ bản (UPDATED 19/10/2023)
- 2.5.2.2 - Thông tin về
finger print
tại máy khách và máy chủ (UPDATED 19/10/2023) - 2.5.2.3 - Hành vi xử lý chuẩn kết nối đến máy chủ (UPDATED 19/10/2023)
- 2.5.2.4 - Cấu hình
ssh client
(UPDATED 21/10/2023) - 2.5.2.5 - Sử dụng
X11 Forwarding
vàPort Forwarding
(UPDATED 23/10/2023)
- 2.5.1 - Tổng quan về kiến trúc giao thức
- 2.6 - Tổng quan về quản lý mạng (UPDATED 05/11/2023)
- 2.6.1 - Mô hình
TCP/IP
(UPDATED 25/10/2023) - 2.6.2 - Mô tả về
Network Interface
(UPDATED 01/11/2023) - 2.6.3 - Địa chỉ
v4
(UPDATED 25/10/2023) - 2.6.4 - Địa chỉ
v6
(UPDATED 25/10/2023) - 2.6.5 - Thông tin về
network interface
(UPDATED 25/10/2023) - 2.6.6 - Công cụ quản lý
nmcli
(UPDATED 05/11/2023) - 2.6.7 - Cấu hình và quản lý
hostname
(UPDATED 05/11/2023)
- 2.6.1 - Mô hình
- 2.7 - Kiến trúc nhật ký hệ thống (UPDATED 17/12/2023)
- 2.7.1 - Tổng quan (UPDATED 03/12/2023)
- 2.7.2 - Cách sử dụng
rsyslog
(UPDATED 06/12/2023) - 2.7.3 - Cách sử dụng
systemd-journald
(UPDATED 10/12/2023) - 2.7.4 - Đồng bộ thời gian (UPDATED 17/12/2023)
- 2.7.4.1 - Tổng quan
Network Time Protocol
(UPDATED 17/12/2023) - 2.7.4.2 - Công cụ
datetimectl
(UPDATED 10/12/2023) - 2.7.4.3 - Cấu hình
NTP
sử dụngchrony
(UPDATED 17/12/2023) - 2.7.4.4 - Cấu hình
NTP
sử dụngntpd
(UPDATED 10/12/2023)
- 2.7.4.1 - Tổng quan
- 2.8 - Lập lịch chạy cho tác vụ tương lai (UPDATED 01/01/2024)
- 2.8.1 - Tổng quan (UPDATED 24/12/2023)
- 2.8.2 - Cách sử dụng công cụ
at
(UPDATED 24/12/2023) - 2.8.3 - Cách sử dụng công cụ
cron
(UPDATED 24/12/2023) - 2.8.4 - Ứng dụng
systemd timer
(UPDATED 01/01/2024)- 2.8.4.1 - Cách sử dụng công cụ
systemd timer
(UPDATED 01/01/2024) - 2.8.4.2 - Quản lý loại tệp tạm thời (UPDATED 01/01/2024)
- 2.8.4.2.1 - Cách sử dụng
systemd-tmpfiles --create
(UPDATED 01/01/2024) - 2.8.4.2.2 - Cách sử dụng
systemd-tmpfiles --clean
(UPDATED 01/01/2024) - 2.8.4.2.3 - Cách sử dụng
systemd-tmpfiles --remove
(UPDATED 01/01/2024)
- 2.8.4.2.1 - Cách sử dụng
- 2.8.4.1 - Cách sử dụng công cụ
- 2.9 - Quản lý tệp đóng gói và nén với công cụ
tar
(UPDATED 09/02/2024)- 2.9.1 - Tạo và quản lý tệp đóng gói (UPDATED 09/02/2024)
- 2.9.2 - Tạo và quản lý tệp nén đóng gói (UPDATED 15/01/2024)
- 2.9.3 - Quản lý tệp sao lưu gia tăng
incremental backup
(UPDATED 15/01/2024) - 2.9.4 - Chuyển tệp giữa các hệ thống một cách an toàn (UPDATED 15/01/2024)
- 2.9.5 - Đồng bộ giữa các hệ thống một cách an toàn (UPDATED 15/01/2024)
- 2.10 - Quản lý
SELinux
(UPDATED 28/01/2024)- 2.10.1 - Kiến trúc
SELinux
(UPDATED 27/01/2024) - 2.10.2 - Sử dụng
SELinux
cơ bản với chính sáchtargeted
(UPDATED 28/01/2024)- 2.10.2.1 - Xem nhãn, kích hoạt và vô hiệu hóa
SELinux
(UPDATED 28/01/2024) - 2.10.2.2 - Xem định nghĩa chính sách
SELinux
(UPDATED 27/01/2024) - 2.10.2.3 - Auditing hành vi hệ thống (UPDATED 28/01/2024)
- 2.10.2.4 - Kiểm soát
fcontext
với nhãn sẵn có (UPDATED 27/01/2024) - 2.10.2.5 - Kiểm soát
port
với nhãn sẵn có (UPDATED 27/01/2024) - 2.10.2.6 - Kiểm soát chính sách với
boolean
(UPDATED 27/01/2024)
- 2.10.2.1 - Xem nhãn, kích hoạt và vô hiệu hóa
- 2.10.1 - Kiến trúc
- 2.11 - Quản lý lưu trữ cơ bản ( ⬆️ UPDATED 07/02/2024)
- 2.11.1 - Khái niệm phân vùng ổ cứng ( ➕ UPDATED 05/01/2024)
- 2.11.2 - Quản lý phân vùng theo định dạng ( ➕ UPDATED 05/01/2024)
- 2.11.2.1 - Quản lý phân vùng định dạng MBR ( ⬆️ UPDATED 07/02/2024)
- 2.11.2.2 - Quản lý phân vùng định dạng GPT ( ➕ UPDATED 05/01/2024)
- 2.11.3 - Tạo tệp hệ thống (UPDATED 05/01/2024)
- 2.10.4 - Mount tệp hệ thống ( ➕ UPDATED 05/01/2024)
- 2.11.4.1 - Mount thủ công tệp hệ thống (UPDATED 05/01/2024)
- 2.11.4.2 - Mount tự vĩnh viễn tệp hệ thống (UPDATED 05/01/2024)
- 2.11.5 - Quản lý không gian
Swap
(UPDATED 05/01/2024)- 2.11.5.1 - Khái niệm không gian
Swap
(UPDATED 05/01/2024) - 2.11.5.2 - Tạo phân vùng
swap
(UPDATED 05/01/2024)
- 2.11.5.1 - Khái niệm không gian
- 2.12 - Quản lý lưu trữ nâng cao (UPDATED 09/02/2024)
- 2.12.1 - Tổng quan Logical Volume Manager (LVM) (UPDATED 09/02/2024)
- 2.12.2 - Xây dựng hệ thống lưu trữ LVM (UPDATED 09/02/2024)
- 2.12.3 - Tạo Logical Volume tính năng nén và chống trùng lặp (UPDATED 09/02/2024)
Việc kiểm soát người dùng và nhóm là một trong những thành phần cốt lõi của quản trị hệ thống Linux
. Người dùng tạo tệp tin là người sở hữu của tệp đó, tệp tin sẽ được gán mác các quyền đọc, ghi và thực thi cho chủ sở hữu, nhóm và những người ngoài khác. Chỉ có thể thay đổi chủ sở hữu tệp tin bởi người dùng root
, quyền truy cập vào tệp tin chỉ có thể thay đổi bởi người dùng root
hoặc chủ sở hữu, người dùng có thể thay đổi quyền sở hữu nhóm đối với tệp mà họ sở hữu thành một trong những nhóm mà họ là thành viên.
Tài khoản người dùng cung cấp một ranh giới về quyền hạn của người dùng đó và chương trình có thể chạy. Tài khoản người dùng là nền tảng cho bảo mật hệ thống, mỗi tiến trình trên hệ thống đều chạy dựa trên tư cách một người dùng cụ thể, mỗi tệp tin đều có người dùng cụ thể đại diện cho chủ sở hữu. Với quyền sở hữu tệp, hệ thống sẽ thực thi quyền kiểm soát truy cập đối với người dùng tệp tin. Người dùng được liên kết với tiến trình để xác định các tệp và thư mục có thể được truy cập bởi tiến trình đó. Tài khoản gồm có các loại chính: superuser
, system user
, regular user
.
- Tài khoản
superuser
: hầu hết các hệ điều hành đều có một tài khoảnsuperuser
có toàn quyền đối với hệ thống. Đối vớiCentOS
,Ubuntu
,RHEL
, ... tên nó làroot
và cóUID
là0
. Tài khoản này có quyền ghi đè lên các đặc quyền đã được định nghĩa. Đặc quyền của nó đi kèm với trách nhiệm rất lớn, người dùngroot
có đặc quyền vô hạn đến mức có thể làm hỏng hệ thống như: thêmuser
, càibackdoor
, ... Người dùng chỉ nâng cấp lên đặc quyềnroot
tạm thời khi cần, ngoài ra nên sử dụng tài khoản thông thườngregular user
. Tài khoảnroot
tương tự nhưAdministrator
bênMicrosoft Windows
. - Tài khoản
system user
được sử dụng bởi các tiến trình cung cấpservices
hỗ trợ. Những tiến trình thường hoặcdeamon
có thể không nhất thiết chạy vớisuperuser
, chúng được gắn bởi các tài khoản phi đặc quyền để bảo vệ các tệp tin và với những người dùng thông thườngregular user
trên hệ thống. Người dùng thường không đăng nhập bằng tài khoảnsystem user
. - Hầu hét các
user
là người dùng thường cho công việc hằng ngày của họ, cũng giống vớisystem user
, người dùng thường có quyền truy cập hạn chế vào hệ thống.
Để hiển thị thông tin về người dùng đang đăng nhập cần lệnh:
[root@huyvl-linux-training ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@huyvl-linux-training ~]# id sysad
uid=1000(sysad) gid=1000(sysad) groups=1000(sysad)
[root@huyvl-linux-training ~]# su - sysad
Last login: Tue Sep 12 10:17:52 +07 2023 on pts/0
[sysad@huyvl-linux-training ~]$ id
uid=1000(sysad) gid=1000(sysad) groups=1000(sysad)
[sysad@huyvl-linux-training ~]$
Liệt kê chi tiết thông tin người dùng có trong hệ thống: đăng nhập khi nào, thông qua cách thức gì, ...
[root@huyvl-linux-training ~]# w
21:58:31 up 5 days, 11:44, 2 users, load average: 0.00, 0.06, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 171.252.188.216 17:36 7.00s 0.40s 0.01s -2 attach -t 1
hcmopera pts/1 171.252.188.216 21:58 22.00s 0.00s 0.00s -bash
[root@huyvl-linux-training ~]#
Mỗi người dùng được liên kết với một mã định danh duy nhất được gọi là UID (User ID)
, tương tự đối với mỗi nhóm sẽ là GID (Group ID)
. Những người dùng trong một nhóm sẽ chia sẻ với nhau về các quyền đọc, ghi và thực thi đối với tệp tin sở hữu. Linux
dự trữ phạm vi ID
từ [0-1000]
dành cho người dùng và nhóm hệ thống, để liệt kê người dùng và nhóm trong phạm vi này cần lệnh:
[root@huyvl-linux-training ~]# cat /usr/share/doc/setup*/uidgid
NAME UID GID HOME SHELL PACKAGES
root 0 0 /root /bin/bash setup
bin 1 1 /bin /sbin/nologin setup
daemon 2 2 /sbin /sbin/nologin setup
sys - 3 - - setup
adm 3 4 /var/adm /bin/bash setup
tty - 5 - - setup
disk - 6 - - setup
lp 4 7 /var/spool/lpd /sbin/nologin setup
mem - 8 - - setup
kmem - 9 - - setup
wheel - 10 - - setup
cdrom - 11 - - setup
sync 5 (0) /sbin /bin/sync setup
shutdown 6 (0) /sbin /sbin/shutdown setup
halt 7 (0) /sbin /sbin/halt setup
mail 8 12 /var/spool/mail /sbin/nologin setup
news 9 13 /var/spool/news /sbin/nologin setup
uucp 10 14 /var/spool/uucp /sbin/nologin uucp
operator 11 (0) /root /sbin/nologin setup
games 12 (100) /usr/games /sbin/nologin setup
gopher 13 30 /var/gopher /sbin/nologin -(not created by default)
ftp 14 50 /var/ftp /sbin/nologin setup
man - 15 - - setup
oprofile 16 16 /var/lib/oprofile /sbin/nologin oprofile
pkiuser 17 17 /usr/share/pki /sbin/nologin pki-ca,rhpki-ca
dialout - 18 - - setup
floppy - 19 - - setup
games - 20 - - setup
slocate - 21 - - slocate
utmp - 22 - - initscripts,libutempter
squid 23 23 /var/spool/squid /dev/null squid
pvm 24 24 /usr/share/pvm3 /bin/bash pvm
named 25 25 /var/named /bin/false bind
postgres 26 26 /var/lib/pgsql /bin/bash postgresql-server
mysql 27 27 /var/lib/mysql /bin/bash mysql
nscd 28 28 / /bin/false nscd
rpcuser 29 29 /var/lib/nfs /bin/false nfs-utils
console - 31 - - dev
rpc 32 32 / /bin/false portmap
amandabackup 33 (6) /var/lib/amanda /bin/false amanda
tape - 33 - - setup
netdump 34 34 /var/crash /bin/bash netdump-client, netdump-server
utempter - 35 - - libutempter
vdsm 36 - / /bin/bash kvm, vdsm
kvm - 36 - - kvm, vdsm, libvirt
rpm 37 37 /var/lib/rpm /bin/bash rpm
ntp 38 38 /etc/ntp /sbin/nologin ntp
video - 39 - - setup
dip - 40 - - ppp
mailman 41 41 /var/mailman /bin/false mailman
gdm 42 42 /var/gdm /bin/bash gdm
xfs 43 43 /etc/X11/fs /bin/false XFree86-xfs
exim 93 93 /var/spool/exim /sbin/nologin exim [0/850]
distcache 94 94 / /sbin/nologin distcache
radiusd 95 95 / /bin/false freeradius
hsqldb 96 96 /var/lib/hsqldb /sbin/nologin hsqldb
dovecot 97 97 /usr/libexec/dovecot /sbin/nologin dovecot
ident 98 98 / /sbin/nologin ident
nobody 99 99 / /sbin/nologin setup
users - 100 - - setup
qemu 107 107 / /sbin/nologin libvirt
ovirt 108 108 / /sbin/nologin libvirt
rhevm 109 109 /home/rhevm /sbin/nologin vdsm-reg
jetty 110 110 /usr/share/jetty /sbin/nologin jetty
saned 111 111 / /sbin/nologin sane-backends
vhostmd 112 112 /usr/share/vhostmd /sbin/nologin vhostmd
usbmuxd 113 113 / /sbin/nologin usbmuxd
bacula 133 133 /var/spool/bacula /sbin/nologin bacula
cimsrvr 134 134 / /sbin/nologin tog-pegasus-libs
mock - 135 / - mock
ricci 140 140 /var/lib/ricci /sbin/nologin ricci
luci 141 141 /var/lib/luci /sbin/nologin luci
activemq 142 142 /usr/share/activemq /sbin/nologin activemq
stap-server 155 155 /var/lib/stap-server /sbin/nologin systemtap
stapusr - 156 / - systemtap-runtime
stapsys - 157 / - systemtap-runtime
stapdev - 158 / - systemtap-runtime
swift 160 160 /var/lib/swift /sbin/nologin openstack-swift
glance 161 161 /var/lib/glance /sbin/nologin openstack-glance
nova 162 162 /var/lib/nova /sbin/nologin openstack-nova
keystone 163 163 /var/lib/keystone /sbin/nologin openstack-keystone
quantum 164 164 /var/lib/quantum /sbin/nologin openstack-quantum
cinder 165 165 /var/lib/cinder /sbin/nologin openstack-cinder
ceilometer 166 166 /var/lib/ceilometer /sbin/nologin openstack-ceilometer
ceph 167 167 /var/lib/ceph /sbin/nologin ceph-common
avahi-autoipd 170 170 /var/lib/avahi-autoipd /sbin/nologin avahi
pulse 171 171 /var/run/pulse /sbin/nologin pulseaudio
rtkit 172 172 /proc /sbin/nologin rtkit
abrt 173 173 /etc/abrt /sbin/nologin abrt
retrace 174 174 /usr/share/retrace-server /sbin/nologin retrace-server
ovirtagent 175 175 / /sbin/nologin ovirt-guest-agent
ats 176 176 / /sbin/nologin trafficserver
dhcpd 177 177 / /sbin/nologin dhcp
myproxy 178 178 /var/lib/myproxy /sbin/nologin myproxy-server
sanlock 179 179 /var/run/sanlock /sbin/nologin sanlock
aeolus 180 180 /var/aeolus /sbin/nologin aeolus-configure
wallaby 181 181 /var/lib/wallaby /sbin/nologin wallaby
katello 182 182 /usr/share/katello /sbin/nologin katello-common
elasticsearch 183 183 /usr/share/java/elasticsearch /sbin/nologin elasticsearch
mongodb 184 184 /var/lib/mongodb /sbin/nologin mongodb
jboss 185 185 /var/lib/jbossas /sbin/nologin jbossas-core #was jboss-as and wildfly
jbosson-agent 186 - / /sbin/nologin jboss-on-agent
jbosson - 186 - - jboss-on-agent
heat 187 187 /var/lib/heat /sbin/nologin heat
haproxy 188 188 /var/lib/haproxy /sbin/nologin haproxy
hacluster 189 - / /sbin/nologin pacemaker
haclient - 189 - - pacemaker
systemd-journal - 190 - - systemd
systemd-journal-gateway 191 191 / /sbin/nologin systemd
#systemd-journal-gateway dynamic on new systems (may have different uid/gid)
systemd-network 192 192 / /sbin/nologin systemd
systemd-resolve 193 193 / /sbin/nologin systemd
gnats ? ? ? ? gnats, gnats-db
listar ? ? ? ? listar
nfsnobody 65534 65534 /var/lib/nfs /sbin/nologin nfs-utils
[root@huyvl-linux-training ~]#
Và hệ thống sẽ thiết lập người dùng, nhóm mới mặc định bắt đầu với ID
giá trị 1000
, để thay đổi cài đặt này cần chỉnh sửa /etc/login.defs
như sau, lưu việc cập nhật sau chỉnh sửa sẽ được hệ thống tự động hóa:
[root@huyvl-linux-training ~]# cat /etc/login.defs | grep -i ^uid_min
UID_MIN 2000
[root@huyvl-linux-training ~]# cat /etc/login.defs | grep -i ^gid_min
GID_MIN 2000
[root@huyvl-linux-training ~]# groupadd intern
[root@huyvl-linux-training ~]# useradd -g intern -m intern1
[root@huyvl-linux-training ~]# id intern1
uid=2000(intern1) gid=2000(intern) groups=2000(intern)
[root@huyvl-linux-training ~]#
Liệt kê tất cả các tiến trình -a
kèm theo tên -u
của người dùng liên kết với nó như sau:
[sysad@huyvl-linux-training ~]$ ps -au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1245 0.0 0.0 110204 860 tty1 Ss+ 10:14 0:00 /sbin/agetty --noclear tty1 linux
root 1246 0.0 0.0 110204 868 ttyS0 Ss+ 10:14 0:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
root 1522 0.0 0.1 115544 2040 pts/0 Ss 10:15 0:00 -bash
root 2512 0.0 0.1 191876 2348 pts/0 S 10:17 0:00 su - sysad
sysad 2513 0.0 0.1 115544 2056 pts/0 S 10:17 0:00 -bash
root 5826 0.0 0.1 191984 2416 pts/0 S 10:26 0:00 su
root 5845 0.0 0.1 115544 2064 pts/0 S 10:27 0:00 bash
root 29060 0.0 0.1 191880 2360 pts/0 S 11:31 0:00 su - sysad
sysad 29061 0.0 0.1 115544 2052 pts/0 S 11:31 0:00 -bash
sysad 30290 0.0 0.0 155448 1860 pts/0 R+ 11:34 0:00 ps -au
[sysad@huyvl-linux-training ~]$
, nội dung hiển thị người dùng theo tên nhưng bên trong hệ điều hành sử dụng UID
để theo dõi, việc ánh xạ tên người dùng thành UID
được định nghĩa trong cơ sở dữ liệu thông tin tài khoản. Mặc định thì hệ thống sử dụng tệp /etc/passwd
để lưu trữ thông tin. Mỗi một dòng trong /etc/passwd
chứa thông tin 1
người dùng như sau:
[sysad@huyvl-linux-training ~]$ grep sysad /etc/passwd
sysad:x:1000:1000::/home/sysad:/bin/bash
[sysad@huyvl-linux-training ~]$
Chú thích các thành phần được phân tách bởi dấu hai chấm :
như sau:
sysad
: là tên người dùng.x
: về mặt lịch sử thì mật khẩu được mã hóa tại đây, nhưng hiện tại nó đã được thay bằng dấux
.1000
: định danhUID
.1000
: định danh nhómGID
theoprimary group
.:<khoảng trống>:
không có mô tả nào về tài khoản./home/sysad
: thư mục khởi tạo mặc định của người dùng khishell
đăng nhập./bin/bash
: chương trìnhshell
mặc định cho người dùng khi đăng nhập. Một số tài khoản sử dụngshell
khác như/sbin/nologin
để không cho phép đăng nhập tương tác bằng tài khoản đó (trường hợp này sẽ có ví dụ).
Group
là một tập người dùng có thể chia sẻ các tệp hoặc tài nguyên hệ thống với nhau. Group
có thể cấp quyền lên tệp để áp dụng cho tập các người dùng thay vì đơn lẻ. Cũng giống với user
thì nó cũng có tên để nhận biết, hệ thống phân biệt các nhóm dựa trên GID
. Việc ánh xạ tên nhóm với định danh thì mặc định hệ thống sử dụng /etc/group
để lưu trữ:
[root@huyvl-linux-training ~]# grep sysad /etc/group
sysad:x:1000:
[root@huyvl-linux-training ~]#
Chú thích:
sysad
: tên nhómx
: mật khẩu tuy nhiên đã lỗi thời ở thời điểm hiện tại và đã được thay thế bằng ký tựx
.1000
: định danh của nhómsysad
.
Mỗi một user
đều chỉ thuộc duy nhất một nhóm chính hay primary group
. Khi tệp được tạo thì primary group
sẽ được gắn vào. Khi regular user
được tạo thì một group
cũng được tạo cùng tên. Những user
cũng có những nhóm phụ hay supplementary group
. Người dùng được cấp quyền truy cập tệp dựa trên những nhóm mà họ thuộc về mà không phân biệt nhóm chính hay phụ.
[root@huyvl-linux-training ~]# id sysad
uid=1000(sysad) gid=1000(sysad) groups=1000(sysad),1001(intern)
Sử dụng lệnh su
để thay đổi sang người dùng khác. Từ một regular user
thay đổi sang một tài khoản người dùng khác cần cung cấp mật khẩu, ngược lại khi đang sử dụng root
có thể thay đổi sang người dùng khác mà không cần cung cấp mật khẩu của tài khoản đó.
[sysad2@huyvl-linux-training ~]$ su - sysad
Password:
[sysad2@huyvl-linux-training ~]$
, sử dụng su -
để chuyển sang root
:
[sysad@huyvl-linux-training ~]$ su -
Password:
Last login: Tue Sep 12 10:27:02 +07 2023 on pts/0
[root@huyvl-linux-training ~]#
Trong khi lệnh su
sẽ khởi chạy con shell
loại non-login
, thì su -
khởi chạy con shell
loại login
. Sự khác biết chính là su -
sẽ cài đặt môi trường như thể nó đăng nhập với tư cách người dùng đó, trong khi su
vẫn giữ nguyên cài đặt môi trường của người dùng trước khi chuyển.
[sysad@huyvl-linux-training ~]$ export some_thing="sysad defined"
[sysad@huyvl-linux-training ~]$ echo $some_thing
sysad defined
[sysad@huyvl-linux-training ~]$ su sysad2
Password:
[sysad2@huyvl-linux-training sysad]$ echo $some_thing
sysad defined
[sysad2@huyvl-linux-training sysad]$ exit
exit
[sysad@huyvl-linux-training ~]$ su
Password:
[root@huyvl-linux-training sysad]# echo $some_thing
sysad defined
[root@huyvl-linux-training sysad]#
Vì lý do bảo mật, một số trường hợp quản trị viên sẽ vô hiệu hóa tài khoản root
. Không giống như su
, lệnh sudo
thường yêu cầu nhập mật khẩu của chính người yêu cầu để xác thực, tức là người dùng sử dụng sudo
để chạy lệnh với quyền root
mà không cần đăng nhập vào root
. Nhưng không vì vậy mà không thể kiểm soát được gọi sudo
từ người dùng, tất cả lệnh gọi sudo
đều sẽ được ghi nhận lại:
[sysad@huyvl-linux-training ~]$ sudo reboot
[sudo] password for sysad:
sysad is not in the sudoers file. This incident will be reported.
[sysad@huyvl-linux-training ~]$ exit
logout
[root@huyvl-linux-training ~]# tail -f /var/log/secure
...
...
Sep 12 17:44:27 huyvl-linux-training sudo: sysad : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/sysad ; USER=root ; COMMAND=/sbin/reboot
Sep 12 17:44:31 huyvl-linux-training su: pam_unix(su-l:session): session closed for user sysad
Để xác định được tài khoản hiện đang sử dụng là con shell login
hay non-login
cần lệnh:
[sysad@huyvl-linux-training ~]$ sudo su
[sudo] password for sysad:
[root@huyvl-linux-training sysad]# echo $0
bash
[root@huyvl-linux-training sysad]# pwd
/home/sysad
[root@huyvl-linux-training sysad]# # this is non-login shell
[root@huyvl-linux-training sysad]# exit
exit
[sysad@huyvl-linux-training ~]$ sudo su -
Last login: Wed Sep 13 10:41:46 +07 2023 on pts/0
[root@huyvl-linux-training ~]# pwd
/root
[root@huyvl-linux-training ~]# echo $0
-bash
[root@huyvl-linux-training ~]# # this is login shell
[root@huyvl-linux-training ~]#
Để chỉ định ID
khi tạo người dùng cần thêm tùy chọn -u
như sau:
[root@huyvl-linux-training ~]# useradd -u 2005 intern2
[root@huyvl-linux-training ~]# id intern2
uid=2005(intern2) gid=2005(intern2) groups=2005(intern2)
[root@huyvl-linux-training ~]#
, tương tự đối với nhóm cần thêm tùy chọn -g
như sau:
[root@huyvl-linux-training ~]# groupadd -g 2010 sale
[root@huyvl-linux-training ~]# cat /etc/group | grep sale
sale:x:2010:
[root@huyvl-linux-training ~]#
Tạo nhóm khu vực hệ thống cần tùy chọn -r
như sau:
[root@huyvl-linux-training ~]# groupadd -r sysgroup
[root@huyvl-linux-training ~]# grep sysgroup /etc/group
sysgroup:x:993:
Thay đổi tên nhóm với tùy chọn -n
như sau:
[root@huyvl-linux-training ~]# groupmod -n systemgroup sysgroup
[root@huyvl-linux-training ~]# grep systemgroup /etc/group
systemgroup:x:993:
Hủy nhóm cần chắc chắn rằng không có người dùng nào thuộc nhóm chính đó:
[root@huyvl-linux-training ~]# id hcmoperator
uid=1003(hcmoperator) gid=1007(hcmsysad) groups=1007(hcmsysad),1006(sysad)
[root@huyvl-linux-training ~]# groupdel hcmsysad
groupdel: cannot remove the primary group of user 'hcmoperator'
[root@huyvl-linux-training ~]# userdel -r hcmoperator
[root@huyvl-linux-training ~]# groupdel hcmsysad
Để thêm người dùng vào nhóm mới ngoài nhóm chính primary group
thì được gọi là secondary group
hoặc supplementary group
như sau:
[root@huyvl-linux-training ~]# id dev
uid=1001(dev) gid=1001(dev) groups=1001(dev)
[root@huyvl-linux-training ~]# usermod -a -G intern dev
[root@huyvl-linux-training ~]# id dev
uid=1001(dev) gid=1001(dev) groups=1001(dev),2000(intern)
[root@huyvl-linux-training ~]# groups dev
dev : dev intern
[root@huyvl-linux-training ~]#
Thay đổi primary group
của người dùng như sau:
[root@huyvl-linux-training ~]# groups dev
dev : dev intern
[root@huyvl-linux-training ~]# usermod -g sysad dev
[root@huyvl-linux-training ~]# groups dev
dev : sysad intern
[root@huyvl-linux-training ~]#
Xóa người dùng khỏi nhóm phụ như sau:
[root@huyvl-linux-training ~]# gpasswd -d dev intern
Removing user dev from group intern
[root@huyvl-linux-training ~]# groups dev
dev : sysad
[root@huyvl-linux-training ~]#
Thay mới toàn bộ dánh sách nhóm phụ của người dùng như sau:
[root@huyvl-linux-training ~]# groups dev
dev : sysad intern
[root@huyvl-linux-training ~]# usermod -G wheel,dev dev
[root@huyvl-linux-training ~]# groups dev
dev : sysad wheel dev
[root@huyvl-linux-training ~]#
Thủ tục xóa người dùng khỏi hệ thống trước tiên phải ngắt kết nối để ngăn con shell
của họ tiếp tục sử dụng:
[root@huyvl-linux-training ~]# loginctl terminate-user intern1
[root@huyvl-linux-training ~]#
[intern2@huyvl-linux-training ~]$
Session terminated, killing shell... ...killed.
[root@huyvl-linux-training ~]#
, xóa người dùng khỏi hệ thống như sau:
[root@huyvl-linux-training ~]# id intern2
uid=2005(intern2) gid=2005(intern2) groups=2005(intern2)
[root@huyvl-linux-training ~]# userdel -r intern2
[root@huyvl-linux-training ~]# id intern2
id: intern2: no such user
[root@huyvl-linux-training ~]#
Đặt mật khẩu cho người dùng qua lệnh passwd
và kiểm tra tính hình mật khẩu như sau:
[root@huyvl-linux-training ~]# passwd -S hcmoperator
hcmoperator LK 2023-09-13 0 99999 7 -1 (Password locked.)
[root@huyvl-linux-training ~]# grep hcmoperator /etc/shadow
hcmoperator:!!:19613:0:99999:7:::
[root@huyvl-linux-training ~]# passwd hcmoperator
Changing password for user hcmoperator.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@huyvl-linux-training ~]# passwd -S hcmoperator
hcmoperator PS 2023-09-13 0 99999 7 -1 (Password set, MD5 crypt.)
[root@huyvl-linux-training ~]# grep hcmoperator /etc/shadow
hcmoperator:$1$aI3nOxva$88mPNNN2vzq7MpsYwGgGH0:19613:0:99999:7:::
[root@huyvl-linux-training ~]#
Quy định về thời hạn mật khẩu được biểu diễn như sau:
Thay đổi thời hạn vô hiệu hóa mật khẩu thành 30 ngày
cho tài khoản như sau:
[root@huyvl-linux-training ~]# chage -l hcmoperator
Last password change : Sep 13, 2023
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
[root@huyvl-linux-training ~]# chage -E $(date -d "+30 days" +%F) hcmoperator
[root@huyvl-linux-training ~]# chage -l hcmoperator
Last password change : Sep 13, 2023
Password expires : never
Password inactive : never
Account expires : Oct 13, 2023
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
[root@huyvl-linux-training ~]# grep hcmoperator /etc/shadow
hcmoperator:$1$aI3nOxva$88mPNNN2vzq7MpsYwGgGH0:19613:0:99999:7::19643:
[root@huyvl-linux-training ~]#
Câu lệnh sau buộc người dùng phải thay đổi mật khẩu ở lần đăng nhập kế tiếp:
[root@huyvl-linux-training ~]# chage -d 0 hcmoperator
[root@huyvl-linux-training ~]# chage -l hcmoperator
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : Oct 13, 2023
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
[root@huyvl-linux-training ~]#
Khóa và mở khóa tài khoản người dùng như sau:
[root@huyvl-linux-training ~]# passwd -S hcmoperator
hcmoperator PS 2023-09-13 0 99999 7 -1 (Password set, MD5 crypt.)
[root@huyvl-linux-training ~]# usermod -L hcmoperator
[root@huyvl-linux-training ~]# passwd -S hcmoperator
hcmoperator LK 2023-09-13 0 99999 7 -1 (Password locked.)
[root@huyvl-linux-training ~]#
Con shell nologin
có những quyền như con shell login
được thay thế nhưng sẽ không cung cấp phương thức đăng nhập. Đây là một phương pháp bảo mật tốt khi tài khoản đó không có nhu cầu đăng nhập. Ví dụ như một máy chủ Mail
cần tạo tài khoản để người dùng xác thực qua ứng dụng khách như Thunderbird
, Outlook
, ... để truy xuất thư điện tử mà họ không cần đăng nhập trực tiếp vào máy chủ Mail
. Giải pháp cho tình huống này là cài đặt con shell
của tài khoản người dùng là /sbin/nologin
.
[root@huyvl-linux-training ~]# su - sale
Last login: Wed Sep 13 11:42:31 +07 2023 on pts/0
[sale@huyvl-linux-training ~]$ exit
logout
[root@huyvl-linux-training ~]# usermod -s /sbin/nologin sale
[root@huyvl-linux-training ~]# su - sale
Last login: Wed Sep 13 14:19:03 +07 2023 on pts/0
This account is currently not available.
[root@huyvl-linux-training ~]#
Quản trị viên có thể cấp quyền truy cập sudo
để cho phép người dùng ngoài root
có thể thực thi những lệnh tương đương với quản trị viên, những thứ mà được dành riêng cho người dùng root
. Do đó những người dùng non-root
có thể gọi lệnh quản trị mà không cần phải đăng nhập vào tài khoản root
. Tệp /etc/sudoers
chỉ định người dùng nào có thể sử dụng lệnh sudo
, những luật trong đây có thể áp dụng lên những tài khoản riêng lẻ hoặc nhóm người dùng. Quản trị viên cũng có thể sử dụng bí danh aliases
để có thể đơn giản hóa việc định nghĩa cho các nhóm thuộc hosts
, lệnh cụ thể hoặc thậm chí nhiều tài khoản. Những bí danh mặc định được định nghĩa trong ở phần đầu tiên của /etc/sudoers
.
Khi người dùng sử dụng đặc quyền sudo
để chạy lệnh cái mà nó không được phép hoặc không được định nghĩa trong tệp /etc/sudoers
sẽ nhận thông báo lỗi như sau:
[dev@huyvl-linux-training ~]$ sudo cat /etc/hosts
[sudo] password for dev:
dev is not in the sudoers file. This incident will be reported.
[dev@huyvl-linux-training ~]$
Mặc định tệp /etc/sudoers
sẽ cung cấp thông tin và các ví dụ về ủy quyền authorization
. Quản trị viên có thể kích hoạt những rule
bằng cách xóa bỏ ký tự # (comment)
. Hệ thống sẽ đọc tệp /etc/sudoers
theo thứ tự từ trên xuống dưới, vì vậy nếu có nhiều dòng ủy quyền dành cho cùng một người dùng thì nó sẽ lấy theo thứ tự, trong những trường hợp gặp xung đột về giá trị ủy quyền thì hệ thống sẽ lấy lần hợp lệ gần nhất. Cách thức được khuyến nghị nhất khi thêm rule
vào sudoers
là tạo một tệp mới nằm trong thư mục /etc/sudoers.d/
thay vì định nghĩa trực tiếp vào tệp /etc/sudoers
. Bởi vì cách thức này sẽ giữ nguyên nội dung khi quản trị cập nhật hệ thống, thêm vào đó mô-đun hóa là cách dễ dành truy và sửa lỗi với các tệp tách biệt trong /etc/sudoers.d/
thay vì tệp tập trung để tránh vô tình ảnh hưởng tới các rule
không liên quan. Để kích hoạt /etc/sudoers.d/
hoặc hệ thống đọc được nội dung trong đó thì quản trị viên cần định nghĩa nội dung như sau trong tệp /etc/sudoers
:
[root@huyvl-linux-training ~]# cat /etc/sudoers | grep ^#include
#includedir /etc/sudoers.d
[root@huyvl-linux-training ~]#
Lưu ý: ký tự #
ở trên là ngoại lệ với cú pháp #includedir
, các tệp nằm trong /etc/sudoers.d/
không được chứa dấu .
(chấm).
Để tránh các vấn đề khi nhiều quản trị viên chỉnh sửa tệp cùng lúc thì có thể sử dụng visudo
, ngoài ra visudo
còn có chức năng kiểm tra cú pháp của tệp.
[root@huyvl-linux-training ~]# grep wheel /etc/sudoers
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
[root@huyvl-linux-training ~]#
Chú thích:
%wheel
là người dùng hoặc nhóm sẽ được áp dụng. Ký tự%
để chỉ định đối tượng là nhóm.ALL
đầu tiên mô tả nơi mà có thể thực hiện trên bất kỳ máy chủ nào tùy thích. Tuy nhiên hầu hết trường này thường để mặc định làALL
khi cấu hình, chưa có nhiều ví dụ cụ thể để xác minh tính hữu ích của nó.ALL
thứ hai là người dùng trong nhómwheel
có thể thực hiện lệnh với tư cáchrunas
của bất kỳ người dùng cụ thể hoặc nhóm nào trong hệ thống.ALL
cuối cùng rằng người dùng nhómwheel
có thể áp dụngsudo
với bất kỳ lệnh nào tùy thích.Tag
mặc định sẽ làPASSWD
nếu quản trị viên để trống, có thể chỉ địnhNOPASSWD
để không hỏi mật khẩu khi sử dụngsudo
.- Mặc định của
sudo
sẽ được hiểu làroot
nếu như không chỉ định. Xem các ví dụ về cấu hình cụ thể cho sudoers để hiểu rõ hơn.
Ví dụ thêm tài khoản dev
vào nhóm wheel
như sau:
[dev@huyvl-linux-training ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[dev@huyvl-linux-training ~]$ sudo cat /etc/shadow
[sudo] password for dev:
dev is not in the sudoers file. This incident will be reported.
[dev@huyvl-linux-training ~]$
[root@huyvl-linux-training ~]# usermod --append -G wheel dev
[root@huyvl-linux-training ~]# groups dev
dev : sysad wheel dev
[dev@huyvl-linux-training ~]$ sudo cat /etc/shadow
[sudo] password for dev:
root:$1$WIK4jiKy$zduQomlM7t93yBZ8gWLO5.:19610:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
operator:*:18353:0:99999:7:::
games:*:18353:0:99999:7:::
ftp:*:18353:0:99999:7:::
nobody:*:18353:0:99999:7:::
systemd-network:!!:18760::::::
dbus:!!:18760::::::
polkitd:!!:18760::::::
sshd:!!:18760::::::
postfix:!!:18760::::::
chrony:!!:18760::::::
gluster:!!:18760::::::
dev:$6$MSPq8owf$DPCLXYW1kZrA7Bnf6/cJe2FclE1VWBp4uak4ienAOU0cK3dF.nKX9mRnwqlLx4Di/AwU8cqWuKJUBewLV1Ty0.:19610:0:99999:7:::
sysad:!!:19610:0:99999:7:::
sysad2:!!:19610:0:99999:7:::
intern_sysad:$1$SqZgOZ2H$mo2UzyEF1hMiyTsg4juT80:19610:0:99999:7:::
[dev@huyvl-linux-training ~]$
Quản trị viên có thể cấp quyền cho phép người dùng không có đặc quyền thực thi một lệnh có đặc quyền bằng cách mô-đun hóa và cấu hình chính sách trong thư mục /etc/sudoers.d/
. Ví dụ quản trị viên có thể cho phép người dùng dev
chạy lệnh cat
với đặc quyền:
[dev@huyvl-linux-training ~]$ sudo reboot
Sorry, user dev is not allowed to execute '/sbin/reboot' as root on huyvl-linux-training.novalocal.
[dev@huyvl-linux-training ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[dev@huyvl-linux-training ~]$
[root@huyvl-linux-training ~]# visudo -f /etc/sudoers.d/dev
[root@huyvl-linux-training ~]# cat /etc/sudoers.d/dev
dev huyvl-linux-training = /usr/bin/cat
Defaults mail_always
Defaults mailto="huyvl3@fpt.com"
[root@huyvl-linux-training ~]#
[dev@huyvl-linux-training ~]$ cat /etc/shadow
root:$1$WIK4jiKy$zduQomlM7t93yBZ8gWLO5.:19610:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
operator:*:18353:0:99999:7:::
games:*:18353:0:99999:7:::
ftp:*:18353:0:99999:7:::
nobody:*:18353:0:99999:7:::
systemd-network:!!:18760::::::
dbus:!!:18760::::::
polkitd:!!:18760::::::
sshd:!!:18760::::::
postfix:!!:18760::::::
chrony:!!:18760::::::
gluster:!!:18760::::::
dev:$6$MSPq8owf$DPCLXYW1kZrA7Bnf6/cJe2FclE1VWBp4uak4ienAOU0cK3dF.nKX9mRnwqlLx4Di/AwU8cqWuKJUBewLV1Ty0.:19610:0:99999:7:::
sysad:!!:19610:0:99999:7:::
sysad2:!!:19610:0:99999:7:::
intern_sysad:$1$SqZgOZ2H$mo2UzyEF1hMiyTsg4juT80:19610:0:99999:7:::
[dev@huyvl-linux-training ~]$
, nhật ký ghi nhận thư điện tử đã được gửi tới huyvl3@fpt.com
:
[root@huyvl-linux-training ~]# tail -f /var/log/maillog
Sep 11 03:30:57 huyvl-linux-training postfix/pickup[1383]: 5BBB918C6: uid=0 from=<root>
Sep 11 03:30:57 huyvl-linux-training postfix/cleanup[4375]: 5BBB918C6: message-id=<20230910203057.5BBB918C6@huyvl-linux-training.novalocal>
Sep 11 03:30:57 huyvl-linux-training postfix/qmgr[1116]: 5BBB918C6: from=<root@huyvl-linux-training.novalocal>, size=539, nrcpt=1 (queue active)
Sep 11 03:30:58 huyvl-linux-training postfix/smtp[4377]: 5BBB918C6: to=<huyvl3@fpt.com>, relay=fpt-com.mail.protection.outlook.com[52.101.132.28]:25, delay=1.3, delays=0.01/0/0.24/1.1, dsn=2.6.0, status=sent (250 2.6.0 <20230910203057.5BBB918C6@huyvl-linux-training.novalocal> [InternalId=38521561683110, Hostname=TYZPR06MB6239.apcprd06.prod.outlook.com] 8547 bytes in 0.132, 63.086 KB/sec Queued mail for delivery)
Sep 11 03:30:58 huyvl-linux-training postfix/qmgr[1116]: 5BBB918C6: removed
Cho phép người dùng dev1
có thể thực hiện lệnh với sudo
với tư cách là một tài khoản fakeuser
không có thật. Với tệp /tmp/data
được thiết lập chỉ có thể đọc bởi dev2
như sau thì RunAs
mới phát huy tác dụng:
[root@huyvl-linux-training ~]# useradd dev1
[root@huyvl-linux-training ~]# useradd dev2
[root@huyvl-linux-training ~]# echo 'dev1' | passwd --stdin dev1
Changing password for user dev1.
passwd: all authentication tokens updated successfully.
[root@huyvl-linux-training ~]# echo 'dev2' | passwd --stdin dev2
Changing password for user dev2.
passwd: all authentication tokens updated successfully.
[root@huyvl-linux-training ~]# cd /tmp/
[root@huyvl-linux-training tmp]# echo 'hello' > data
[root@huyvl-linux-training tmp]# ls -l
total 4
-rw-r--r--. 1 root root 6 Apr 14 07:55 data
drwx------. 3 root root 17 Apr 14 06:29 systemd-private-35671e1b01654860ba8826dd9c5a2adb-chronyd.service-is01YQ
drwx------. 3 root root 17 Apr 14 06:29 systemd-private-35671e1b01654860ba8826dd9c5a2adb-dbus-broker.service-M68akW
drwx------. 3 root root 17 Apr 14 06:29 systemd-private-35671e1b01654860ba8826dd9c5a2adb-systemd-logind.service-ojdgrN
[root@huyvl-linux-training tmp]# chown dev2:dev2 data
[root@huyvl-linux-training tmp]# chmod go-r data
[root@huyvl-linux-training tmp]# ls -l data
-rw-------. 1 dev2 dev2 6 Apr 14 07:55 data
[root@huyvl-linux-training tmp]# cd /etc/sudoers.d/
[root@huyvl-linux-training sudoers.d]# vi dev1
[root@huyvl-linux-training sudoers.d]# cat dev1
dev1 ALL=(fakeruser) ALL
[root@huyvl-linux-training sudoers.d]#
[dev1@huyvl-linux-training tmp]$ cat data
cat: data: Permission denied
[dev1@huyvl-linux-training tmp]$ sudo cat data
[sudo] password for dev1:
Sorry, user dev1 is not allowed to execute '/bin/cat data' as root on huyvl-linux-training.novalocal.
[dev1@huyvl-linux-training tmp]$ sudo -u dev2 cat data
[sudo] password for dev1:
Sorry, user dev1 is not allowed to execute '/bin/cat data' as dev2 on huyvl-linux-training.novalocal.
[dev1@huyvl-linux-training tmp]$
, thực hiện thay đổi từ fakeuser
thành dev2
tức người dùng dev1
sẽ thực thi với dev2
như sau:
[root@huyvl-linux-training sudoers.d]# vi dev1
[root@huyvl-linux-training sudoers.d]# cat dev1
dev1 ALL=(dev2) ALL
[root@huyvl-linux-training sudoers.d]#
[dev1@huyvl-linux-training tmp]$ sudo -u dev2 cat data
[sudo] password for dev1:
hello
[dev1@huyvl-linux-training tmp]$ sudo -u dev2 cat data
hello
[dev1@huyvl-linux-training tmp]$