在上一章节中,笔者解释了该如何使用指令执行中的管线来重新导向到档案中,以及将指令的输出利用pipelines技巧变成後面的指令的输入,最後介绍基本文字编辑器vim之使用方法,在这一章节中,将要介绍如何做到基本使用者与群组管理。
从简单意思上来说,就是存取作业系统上的程序或是指令执行的人,就叫做使用者,使用者通常通常分成三种类型:超级使用者、系统使用者以及一般使用者。超级使用者意思是,这个使用者只有一个在系统上,为最高权限的使用者,就叫做root,更多详细的root使用者介绍与使用,则会在後面的章节作介绍,系统使用者则是作业系统上的套件所建立的使用者,或是执行程序process的使用者,为了要执行某个程序或是套件所自动创立的,通常这类的使用者都不被允许登入,都只用来执行特定的程序prcoess或是套件,而一般使用者则是可以存取作业系统一般功能的使用者,通常可以登入进去之外,也可以做大部分非超级使用者权限的操作与指令。下列笔者使用id
这个指令可以查看目前使用者的名称已经对应的id,当Linux作业系统将使用者建立的时候,若没有指定的话,则会自动指派一个id给新增的使用者,相关的指令执行结果如下:
[rockylinux@workstation ~]$ id
uid=1000(rockylinux) gid=1000(rockylinux) groups=1000(rockylinux),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[rockylinux@workstation ~]$
从上面的执行指令结果可以知道,利用id
指令可以输出所以有的使用者资讯,还有group资讯等,而利用ls -l
这个指令则可以查看目前使用者目录的拥有者,相关的输出如下:
[rockylinux@workstation ~]$ ls -l ~
total 8
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Desktop
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Documents
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Downloads
-rw-rw-r--. 1 rockylinux rockylinux 81 Sep 23 00:36 home_list.txt
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Music
drwxr-xr-x. 2 rockylinux rockylinux 4096 Sep 19 20:58 Pictures
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Public
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Templates
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Videos
从上面的输出讯息可以知道,从左边过来的第一个rockylinux
是这个拥有这个档案或是目录权限的使用者,第二个则是拥有档案与附录权限的群组名称,预设如果使用者没有加入到群组,则预设的群组名称为自己的的使用者名称,接着可以使用ps -au
来查看是哪个使用者正在运行什麽程序process,相关的指令执行结果输出如下:
[rockylinux@workstation ~]$ ps -au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
gdm 1507 0.0 0.7 340368 13276 tty1 Ssl+ 23:10 0:00 /usr/libexec/gdm-wayland-session --regist
gdm 1752 0.0 0.9 732300 17076 tty1 Sl+ 23:10 0:00 /usr/libexec/gnome-session-binary --autos
gdm 1780 1.7 13.8 3169092 257556 tty1 Sl+ 23:10 0:09 /usr/bin/gnome-shell
gdm 1798 0.0 2.6 855868 48524 tty1 Sl+ 23:10 0:00 /usr/bin/Xwayland :1024 -rootless -termin
gdm 1822 0.0 0.6 389048 11300 tty1 Sl 23:10 0:00 ibus-daemon --xim --panel disable
gdm 1825 0.0 0.4 302808 8560 tty1 Sl 23:10 0:00 /usr/libexec/ibus-dconf
gdm 1828 0.0 3.3 1131200 62708 tty1 Sl 23:10 0:00 /usr/libexec/ibus-x11 --kill-daemon
gdm 1872 0.0 1.3 524216 25784 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-xsettings
gdm 1874 0.0 0.7 301636 14872 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-a11y-settings
gdm 1877 0.0 1.2 373376 23904 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-clipboard
gdm 1878 0.0 1.3 686912 25340 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-color
gdm 1880 0.0 0.8 384004 16244 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-datetime
gdm 1881 0.0 0.4 305936 7828 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-housekeeping
gdm 1882 0.0 1.3 523148 24240 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-keyboard
gdm 1887 0.0 1.4 1186416 27460 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-media-keys
gdm 1889 0.0 0.3 225632 7432 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-mouse
gdm 1891 0.0 1.3 547980 25968 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-power
gdm 1897 0.0 0.5 277640 9964 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-print-notifications
gdm 1901 0.0 0.4 230388 8208 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-rfkill
gdm 1904 0.0 0.4 299372 7596 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-screensaver-proxy
gdm 1908 0.0 0.4 307900 9080 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-sharing
gdm 1917 0.0 0.6 474480 12508 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-smartcard
gdm 1926 0.0 0.7 367188 13196 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-sound
gdm 1930 0.0 1.2 510144 24156 tty1 Sl+ 23:10 0:00 /usr/libexec/gsd-wacom
gdm 1988 0.0 0.4 229116 8312 tty1 Sl 23:10 0:00 /usr/libexec/ibus-engine-simple
rockyli+ 2104 0.0 0.3 25564 5612 pts/0 Ss 23:13 0:00 -bash
rockyli+ 2243 0.0 0.2 58728 4028 pts/0 R+ 23:19 0:00 ps -au
从上面的输出讯息来看,可以看到有一个gdm
使用者执行了非常多的程序process,那这个gdm
使用者其实就是系统使用者,原因是这个使用者专门执行一些跟GNOME桌面环境有关的程序,因此这个使用者也是不会允许登入做使用的,为了验证这件事情,可以使用cat /etc/passwd | grep gdm
这个指令来做到,这边多了一个新的指令叫做grep
,grep
这个指令是用来找寻指定在标准输入中的字串关键字或是特殊的字串形式用的,关於这个指令更多的用法语详细介绍,会在之後的章节做说明,接着这个指令执行之後,会得到下列的结果:
[rockylinux@workstation ~]$ cat /etc/passwd | grep gdm
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
从/etc/passwd档案中定义gdm
使用者不能够登入,就可以验证这个使用者是归类为系统使用者。所有有关於使用者的一些资讯都会存放在/etc/passwd
档案里面,而群组的资讯则会存放在/etc/group
之档案里,每一个资讯都会以冒号来隔开,像以gdm:x:42:42::/var/lib/gdm:/sbin/nologin
这个为例,此使用者从左至右解读的资讯如下:
gdm
指的是使用者名称。x
是使用者已经做过杂凑之後并存放到/etc/shadow之档案里面,所以这边栏位永远都会显示成x
。42
指的是user使用者之id,这是给作业系统看的。42
指的是group群组的id,这是给作业统看的。/var/lib/gdm
指的是这个使用者的家目录,也是当shell启动的时候一开始会切换到的工作目录。/sbin/login
指的是预设启动的shell,因为gdm
是被作业系统指定为系统使用者,因此这边不被允许登入shell,因此显示成/sbin/nologin,不被允许也可以显示成/usr/bin/false
,一般都会选择/bin/bash
作为使用者启动的shell,像是rockylinux就是一个一般使用者的资讯:rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash
。从简单的意思上来说,使用者多了之後,可以把使用者做一个分组,那这个组可以视为一个群体,那就可以称做群组,通常会有群组的出现是因为,有些功能上在存取目录或是档案需要用群组来指定分享,那用群体的方式指定会比逐一一个使用者指定来的方便与有效率,而有关於群组的资讯会存放在/etc/group
之档案里面,而/etc/gshadow
则是存放有关於群组的一些杂凑过的资讯,在/etc/group
之档案中,会用冒号将每个区块的资讯隔开,以下列的群组资讯为例:
groupl:x:10:user1,user2,user3
从上述的群组资讯来看,由左至右的解释如下:
group1
指的是群组的名称。gshadow
启用的时候,这里的栏位永远都是x
。10
代表的是群组的id,即group id的意思。一个使用者可以在多个群组中出现,主要群组就是指每个使用者都有一个相同名称的群组,而在其他非与使用者相同名字的群组则是指次要群组。这个可以从id
这个指令看的出来:
[rockylinux@workstation ~]$ id
uid=1000(rockylinux) gid=1000(rockylinux) groups=1000(rockylinux),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
从上面输出的讯息中,groups
这个地方里面有两个群组,第一个群组与rockylinux
这个使用者相同,即主要群组,而之後以逗号隔开的每个群组都是次要群组,以上述输出的讯息为例,次要群组则为wheel
这个群组。
在上面的几个小节中都有提到使用者与群组的密码都分别存放在/etc/shadow
与/etc/gshadow
之档案里面,而档案存放的格式以杂凑过的字串为主,相关的档案,如/etc/shadow
之输出如下:
[rockylinux@workstation ~]$ su - root
Password:
[root@workstation ~]#
[root@workstation ~]# cat /etc/shadow
root:$6$P1ovT7ZGnrywqhIl$zDuaMQBGwMmtCvDLnmeViQYXG4DU3S25zqWoX5Wos5uVsaBbLfnNYqDs0iHOE3OkT0lsIfnBJCpbnKuIloUbk0::0:99999:7:::
bin:*:18700:0:99999:7:::
daemon:*:18700:0:99999:7:::
adm:*:18700:0:99999:7:::
lp:*:18700:0:99999:7:::
sync:*:18700:0:99999:7:::
shutdown:*:18700:0:99999:7:::
halt:*:18700:0:99999:7:::
mail:*:18700:0:99999:7:::
operator:*:18700:0:99999:7:::
games:*:18700:0:99999:7:::
ftp:*:18700:0:99999:7:::
nobody:*:18700:0:99999:7:::
dbus:!!:18887::::::
systemd-coredump:!!:18887::::::
systemd-resolve:!!:18887::::::
tss:!!:18887::::::
polkitd:!!:18887::::::
geoclue:!!:18887::::::
rtkit:!!:18887::::::
pipewire:!!:18887::::::
pulse:!!:18887::::::
libstoragemgmt:!!:18887::::::
qemu:!!:18887::::::
clevis:!!:18887::::::
usbmuxd:!!:18887::::::
unbound:!!:18887::::::
gluster:!!:18887::::::
rpc:!!:18887:0:99999:7:::
avahi:!!:18887::::::
setroubleshoot:!!:18887::::::
saslauth:!!:18887::::::
dnsmasq:!!:18887::::::
radvd:!!:18887::::::
sssd:!!:18887::::::
cockpit-ws:!!:18887::::::
cockpit-wsinstance:!!:18887::::::
chrony:!!:18887::::::
flatpak:!!:18887::::::
colord:!!:18887::::::
rpcuser:!!:18887::::::
gdm:!!:18887::::::
gnome-initial-setup:!!:18887::::::
sshd:!!:18887::::::
tcpdump:!!:18887::::::
rockylinux:$6$5EddOY.CFXScF6wK$yb3Y2wvppSaRcW199JYfEhltc5CkEMgx/3FljbuxS4zpBj.8deBFjMzf03q8dIJWagePqjWe7lwxIRzEN4Tfn0:18889:0:99999:7:::
从上面的输出讯息可以知道,这两个存放密码档案一般来说只能是最高权限使用者才可以进行存取,因此需要先切换成最高权限使用者的帐号之後,再使用cat
指令进行相关的档案输出,可以发现到密码的字串皆以凑的方式表示,而可以使用pwconv
指令将/etc/passwd
档案的密码搬到/etc/shadow档案中,而pwunconv
则是相反,将/etc/shadow档案中储存的密码搬到/etc/passwd
并删除/etc/shadow
档案,则可以得到下列的输出:
[root@workstation ~]# pwunconv
[root@workstation ~]# cat /etc/passwd
root:$6$P1ovT7ZGnrywqhIl$zDuaMQBGwMmtCvDLnmeViQYXG4DU3S25zqWoX5Wos5uVsaBbLfnNYqDs0iHOE3OkT0lsIfnBJCpbnKuIloUbk0:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:/sbin/nologin
daemon:*:2:2:daemon:/sbin:/sbin/nologin
adm:*:3:4:adm:/var/adm:/sbin/nologin
lp:*:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/spool/mail:/sbin/nologin
operator:*:11:0:operator:/root:/sbin/nologin
games:*:12:100:games:/usr/games:/sbin/nologin
ftp:*:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:*:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:!!:81:81:System message bus:/:/sbin/nologin
systemd-coredump:!!:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:!!:193:193:systemd Resolver:/:/sbin/nologin
tss:!!:59:59:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:!!:998:996:User for polkitd:/:/sbin/nologin
geoclue:!!:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit:!!:172:172:RealtimeKit:/proc:/sbin/nologin
pipewire:!!:996:992:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
pulse:!!:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
libstoragemgmt:!!:995:989:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
qemu:!!:107:107:qemu user:/:/sbin/nologin
clevis:!!:994:988:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
usbmuxd:!!:113:113:usbmuxd user:/:/sbin/nologin
unbound:!!:993:987:Unbound DNS resolver:/etc/unbound:/sbin/nologin
gluster:!!:992:986:GlusterFS daemons:/run/gluster:/sbin/nologin
rpc:!!:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
avahi:!!:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
setroubleshoot:!!:991:984::/var/lib/setroubleshoot:/sbin/nologin
saslauth:!!:990:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dnsmasq:!!:983:983:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
radvd:!!:75:75:radvd user:/:/sbin/nologin
sssd:!!:982:982:User for sssd:/:/sbin/nologin
cockpit-ws:!!:981:980:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:!!:980:979:User for cockpit-ws instances:/nonexisting:/sbin/nologin
chrony:!!:979:978::/var/lib/chrony:/sbin/nologin
flatpak:!!:978:977:User for flatpak system helper:/:/sbin/nologin
colord:!!:977:976:User for colord:/var/lib/colord:/sbin/nologin
rpcuser:!!:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
gdm:!!:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:!!:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:!!:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:!!:72:72::/:/sbin/nologin
rockylinux:$6$PPjj5FZ1HiJa1Wsl$9SIRj2kUaBoHrwKUILn7id1EdlKGI0BR3NV4gMlfmCY5qTuR2Fp5wx2lS1J1JCeboIV1HC8MadwHmDpHEGYaA1:1000:1000:rockylinux:/home/rockylinux:/bin/bash
[root@workstation ~]# ls /etc/shadow
ls: cannot access '/etc/shadow': No such file or directory
从上述的讯息输出可以发现所有的杂凑密码都搬到/etc/passwd
档案了,请注意!笔者是为了要展示这个密码储存的原理,在实务上请不要使用pwunconv
并确保密码储存在/etc/shadow
档案里面,原因是/etc/passwd
只要是正常的一般使用者皆可以读取,杂凑的密码容易受到字典攻击而遭到破解,因此在实务上都会使用pwconv
指令将密码存放到/etc/shadow
中,预设作业系统也是这样做,同样的,group群组的gshadow之grpconv
与grpunconv
也有一样的效果,这边笔者就不多做说明了。
前面的几个小章节有提到杂凑,那杂凑是什麽?笔者使用下列的小图示来做说明:
从上面的图示可以知道,当输入明文:rockylinux时候,经过SHA-512这个演算法杂凑之後的结果会得到***
,这边先以这样的字串表示计算後的结果,那上述的整个一系列过程,就称为杂凑。
rockylinux
使用者所在的群组有哪些。rockylinux
使用者有关的资讯,如user id、开始的shell等。
<<: Day9:今天来讲一下Microsoft Defender for Endpoint的装置调查
>>: [Day16] Vite 出小蜜蜂~ Text 文字!
前面已经大概介绍了一下 NiFi 的用途还有特性,那今天就来讲在 NiFi 中,其实是可以对一组 D...
快到结尾了,再让笔者水一篇 XDD,今天我们来聊聊 CNN 会不会是深度学习领域的最後呢? CNN...
import copy, numpy as np np.random.seed(0) # compu...
嗨,今天来完成底下文章的部分,金嗨,内容越写越多,因为快要完赛了节奏没抓好XD,前面都是分开解析的,...
有些公司因为历史原因 在Build react,vue,npm等相关专案 需经过 前置的处理作业 这...