Linux作業(2)

1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。

 

[root@localhost ~]# who

root    tty1         2016-12-19 20:48

root    pts/0        2016-12-19 20:49(192.168.2.100)

root    tty2         2016-12-19 22:38

root    tty3         2016-12-19 22:38

 

[root@localhost ~]# who | tr -s "" | cut -d" " -f1 | sort -u

root

 

2、取出當前系統上被用戶當作其默認shell的最多的那個shell

 

[root@localhost ~]# cat  /etc/passwd|cut -d: -f7|sort|uniq -c|sort-n|tail -n 1

    39 /sbin/nologin

 

[root@localhost ~]# cut -d ':' -f 7/etc/passwd | sort  |uniq -c | sort -nr |head -1

    39 /sbin/nologin

 

[root@localhost ~]# awk -F ':' '{print $7}'/etc/passwd | sort | uniq -c | sort -nr | head -1

    39 /sbin/nologin

 

[root@localhost ~]#

 

3、將/etc/passwd中的第三個字段數值最大的後10個用戶的信息全部改爲大寫後保存至/tmp/maxusers.txt文件中。

 

[root@localhost ~]# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

avahi-autoipd:x:170:170:Avahi IPv4LLStack:/var/lib/avahi-autoipd:/sbin/nologin

systemd-bus-proxy:x:999:997:systemd BusProxy:/:/sbin/nologin

systemd-network:x:998:996:systemd NetworkManagement:/:/sbin/nologin

dbus:x:81:81:System messagebus:/:/sbin/nologin

polkitd:x:997:995:User forpolkitd:/:/sbin/nologin

abrt:x:173:173::/etc/abrt:/sbin/nologin

libstoragemgmt:x:996:994:daemon account forlibstoragemgmt:/var/run/lsm:/sbin/nologin

tss:x:59:59:Account used by the trouserspackage to sandbox the tcsd daemon:/dev/null:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:995:993::/var/lib/chrony:/sbin/nologin

sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

geoclue:x:994:991:User forgeoclue:/var/lib/geoclue:/sbin/nologin

usbmuxd:x:113:113:usbmuxduser:/:/sbin/nologin

rpc:x:32:32:RpcbindDaemon:/var/lib/rpcbind:/sbin/nologin

saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin

rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin

unbound:x:992:990:Unbound DNSresolver:/etc/unbound:/sbin/nologin

pulse:x:171:171:PulseAudio SystemDaemon:/var/run/pulse:/sbin/nologin

colord:x:991:986:User forcolord:/var/lib/colord:/sbin/nologin

qemu:x:107:107:qemu user:/:/sbin/nologin

rpcuser:x:29:29:RPC ServiceUser:/var/lib/nfs:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFSUser:/var/lib/nfs:/sbin/nologin

radvd:x:75:75:radvd user:/:/sbin/nologin

sssd:x:990:985:User for sssd:/:/sbin/nologin

setroubleshoot:x:989:984::/var/lib/setroubleshoot:/sbin/nologin

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

gnome-initial-setup:x:988:983::/run/gnome-initial-setup/:/sbin/nologin

avahi:x:70:70:Avahi mDNS/DNS-SDStack:/var/run/avahi-daemon:/sbin/nologin

[root@localhost ~]# cat /etc/passwd|sort -n-t: -k3|tail -n 10|tr [a-z] [A-Z]> /tmp/maxusers.txt

[root@localhost ~]# cat /tmp/maxusers.txt

COLORD:X:991:986:USER FORCOLORD:/VAR/LIB/COLORD:/SBIN/NOLOGIN

UNBOUND:X:992:990:UNBOUND DNSRESOLVER:/ETC/UNBOUND:/SBIN/NOLOGIN

SASLAUTH:X:993:76:SASLAUTHDUSER:/RUN/SASLAUTHD:/SBIN/NOLOGIN

GEOCLUE:X:994:991:USER FORGEOCLUE:/VAR/LIB/GEOCLUE:/SBIN/NOLOGIN

CHRONY:X:995:993::/VAR/LIB/CHRONY:/SBIN/NOLOGIN

LIBSTORAGEMGMT:X:996:994:DAEMON ACCOUNT FORLIBSTORAGEMGMT:/VAR/RUN/LSM:/SBIN/NOLOGIN

POLKITD:X:997:995:USER FORPOLKITD:/:/SBIN/NOLOGIN

SYSTEMD-NETWORK:X:998:996:SYSTEMD NETWORKMANAGEMENT:/:/SBIN/NOLOGIN

SYSTEMD-BUS-PROXY:X:999:997:SYSTEMD BUSPROXY:/:/SBIN/NOLOGIN

NFSNOBODY:X:65534:65534:ANONYMOUS NFSUSER:/VAR/LIB/NFS:/SBIN/NOLOGIN

[root@localhost ~]#

 

 

4、取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。

 

[root@localhost ~]# ifconfig

eno16777736:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

       inet 192.168.2.108  netmask255.255.255.0  broadcast 192.168.2.255

       inet6 fe80::20c:29ff:fe0d:4a8b prefixlen 64  scopeid0x20<link>

       ether 00:0c:29:0d:4a:8b txqueuelen 1000  (Ethernet)

       RX packets 2738  bytes 225114(219.8 KiB)

       RX errors 0  dropped 0  overruns 0 frame 0

       TX packets 1630  bytes 303519(296.4 KiB)

       TX errors 0  dropped 0 overruns0  carrier 0  collisions 0

 

lo:flags=73<UP,LOOPBACK,RUNNING>  mtu65536

       inet 127.0.0.1  netmask 255.0.0.0

       inet6 ::1  prefixlen 128  scopeid 0x10<host>

       loop  txqueuelen 0 (Local Loopback)

       RX packets 4  bytes 340 (340.0 B)

       RX errors 0  dropped 0  overruns 0 frame 0

       TX packets 4  bytes 340 (340.0 B)

       TX errors 0  dropped 0 overruns0  carrier 0  collisions 0

 

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

       inet 192.168.122.1  netmask255.255.255.0  broadcast 192.168.122.255

       ether 52:54:00:47:81:6c txqueuelen 0  (Ethernet)

       RX packets 0  bytes 0 (0.0 B)

       RX errors 0  dropped 0  overruns 0 frame 0

       TX packets 0  bytes 0 (0.0 B)

       TX errors 0  dropped 0 overruns0  carrier 0  collisions 0

 

[root@localhost ~]# ifconfig eno16777736 |head -2| tail -1 | cut -d' ' -f10

192.168.2.108

 

[root@localhost ~]# ifconfig eno16777736 |grep "inet\>" | cut -d' ' -f10

192.168.2.108

 

[root@localhost ~]# ifconfig eno16777736 |grep "inet\>"| cut -d' ' -f10

192.168.2.108

 

[root@localhost ~]# ifconfig eno16777736 |grep "inet\>"| cut -d' ' -f 10

192.168.2.108

 

[root@localhost ~]# ifconfig eno16777736 |grep 'inet\>' | egrep -o '[[:digit:].]+' | head -1

192.168.2.108

 

[root@localhost ~]# ifconfig eno16777736 |grep 'inet\>' | awk '{print $2}'

192.168.2.108

 

5、顯示/var目錄下一級子目錄或文件的總個數。

 

[root@localhost ~]# ls /var/|wc -l

22

 

[root@localhost ~]# ls /var/|tee 7.txt| wc-l

22

[root@localhost ~]# cat 7.txt

account

adm

cache

crash

db

empty

games

gopher

kerberos

lib

local

lock

log

mail

nis

opt

preserve

run

spool

target

tmp

yp

[root@localhost ~]#

 

6、取出/etc/group文件中第三個字段數值最小的10個組的名字。

 

[root@localhost ~]# cat /etc/group

root:x:0:

bin:x:1:

daemon:x:2:

sys:x:3:

adm:x:4:

tty:x:5:

disk:x:6:

lp:x:7:

mem:x:8:

kmem:x:9:

wheel:x:10:

cdrom:x:11:

mail:x:12:postfix

man:x:15:

dialout:x:18:

floppy:x:19:

games:x:20:

tape:x:30:

video:x:39:

ftp:x:50:

lock:x:54:

audio:x:63:

nobody:x:99:

users:x:100:

avahi-autoipd:x:170:

utmp:x:22:

utempter:x:35:

ssh_keys:x:999:

input:x:998:

systemd-journal:x:190:

systemd-bus-proxy:x:997:

systemd-network:x:996:

dbus:x:81:

polkitd:x:995:

abrt:x:173:

libstoragemgmt:x:994:

tss:x:59:

dip:x:40:

slocate:x:21:

postdrop:x:90:

postfix:x:89:

chrony:x:993:

sshd:x:74:

ntp:x:38:

tcpdump:x:72:

stapusr:x:156:

stapsys:x:157:

stapdev:x:158:

cgred:x:992:

geoclue:x:991:

usbmuxd:x:113:

rpc:x:32:

saslauth:x:76:

rtkit:x:172:

unbound:x:990:

libvirt:x:989:

pulse-access:x:988:

pulse-rt:x:987:

pulse:x:171:

colord:x:986:

kvm:x:36:qemu

qemu:x:107:

rpcuser:x:29:

nfsnobody:x:65534:

radvd:x:75:

sssd:x:985:

setroubleshoot:x:984:

gdm:x:42:

gnome-initial-setup:x:983:

avahi:x:70:

[root@localhost ~]# cat /etc/group |  sort -t: -k3 -n |head -10|cut -d: -f1

root

bin

daemon

sys

adm

tty

disk

lp

mem

kmem

[root@localhost ~]#

 

7、將/etc/fstab/etc/issue文件的內容合併爲同一個內容後保存至/tmp/etc.test文件中。

 

[root@localhost ~]# cat /etc/fstab

 

#

# /etc/fstab

# Created by anaconda on Sat Dec 10 00:21:072016

#

# Accessible filesystems, by reference, aremaintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8)and/or blkid(8) for more info

#

/dev/mapper/centos-root /                       xfs     defaults        0 0

UUID=5b8e0530-836a-4e22-96fe-2caec8a85d67/boot                   xfs     defaults        0 0

/dev/mapper/centos-home /home                   xfs     defaults        0 0

/dev/mapper/centos-swap swap                    swap    defaults        0 0

[root@localhost ~]# cat /etc/issue

\S

Kernel \r on an \m

 

[root@localhost ~]# cat /etc/fstab /etc/issue> /tmp/etc.test

[root@localhost ~]# cat /tmp/etc.test

 

#

# /etc/fstab

# Created by anaconda on Sat Dec 10 00:21:072016

#

# Accessible filesystems, by reference, are maintainedunder '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8)and/or blkid(8) for more info

#

/dev/mapper/centos-root /                       xfs     defaults        0 0

UUID=5b8e0530-836a-4e22-96fe-2caec8a85d67/boot                   xfs     defaults       0 0

/dev/mapper/centos-home /home                   xfs     defaults        0 0

/dev/mapper/centos-swap swap                    swap    defaults        0 0

\S

Kernel \r on an \m

 

[root@localhost ~]#

 

8、請總結描述用戶和組管理類命令的使用方法並完成以下練習:

 

Linux系統用戶賬號的管理

用戶賬號的管理工作主要涉及到用戶賬號的添加、修改和刪除。

添加用戶賬號就是在系統中創建一個新賬號,然後爲新賬號分配用戶號、用戶組、主目錄和登錄Shell等資源。剛添加的賬號是被鎖定的,無法使用。

useradd可用來建立用戶帳號。帳號建好之後,再用passwd設定帳號的密碼.而可用userdel刪除帳號。使用useradd指令所建立的帳號,實際上是保存在/etc/passwd文本文件中。

 

添加新的用戶

useradd命令用於建立用戶帳號

語法:

useradd [-mMnr][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <羣組>][-G <羣組>][-s <shell>][-u<uid>][用戶帳號]

選項:

-c<備註>  加上備註文字。備註文字會保存在passwd的備註欄位中。

-d<登入目錄>  指定用戶登入時的啓始目錄。

-D  變更預設值.

-e<有效期限>  指定帳號的有效期限。

-f<緩衝天數>  指定在密碼過期後多少天即關閉該帳號。

-g<羣組>  指定用戶所屬的羣組。

-G<羣組>  指定用戶所屬的附加羣組。

-m  自動建立用戶的登入目錄。

-M  不要自動建立用戶的登入目錄。

-n  取消建立以用戶名稱爲名的羣組.

-r  建立系統帳號。

-s<shell>  指定用戶登入後所使用的shell

-u<uid>  指定用戶ID

 

刪除帳號

如果一個用戶的賬號不再使用,可以從系統中刪除。刪除用戶賬號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。

userdel命令用於刪除用戶帳號。

userdel可刪除用戶帳號與相關的文件。若不加參數,則僅刪除用戶帳號,而不刪除相關文件。

其格式如下:

userdel [-f][-r][用戶帳號]

選項:

-f:強制刪除用戶,即使用戶當前已登錄;

-r:刪除用戶的同時,刪除與用戶相關的所有文件。
參數:

用戶名:要刪除的用戶名。

 

修改用戶信息

usermod命令用於修改用戶的基本信息。usermod命令不允許你改變正在線上的使用者帳號名稱。當usermod命令用來改變user id,必須確認這名user沒在電腦上執行任何程序。你需手動更改使用者的crontab檔。也需手動更改使用者的at工作檔。採用NIS server須在server上更動相關的NIS設定。

語法 usermod [-LU][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <羣組>][-G <羣組>][-l <帳號名稱>][-s <shell>][-u <uid>][用戶帳號]

選項:

-c<備註>:修改用戶帳號的備註文字;

-d<登入目錄>:修改用戶登入時的目錄;

-e<有效期限>:修改帳號的有效期限;

-f<緩衝天數>:修改在密碼過期後多少天即關閉該帳號;

-g<羣組>:修改用戶所屬的羣組;

-G<羣組>;修改用戶所屬的附加羣組;

-l<帳號名稱>:修改用戶帳號名稱;

-L:鎖定用戶密碼,使密碼無效;

-s:修改用戶登入後所使用的shell

-u:修改用戶ID

-U:解除密碼鎖定。

參數:

登錄名:指定要修改信息的用戶登錄名。

 

用戶口令的管理

passwd命令用於設置用戶的認證信息,包括用戶密碼、密碼過期時間等。系統管理者則能用它管理系統用戶的密碼。

只有管理者可以指定用戶名稱,一般用戶只能變更自己的密碼。

語法:passwd[-k] [-l] [-u [-f]] [-d] [-n mindays] [-x maxdays] [-w warndays][-iinactivedays] [-S] [--stdin] [username]

選項:

-k:用於更改用戶的有效口令,無效口令則保留原來的狀態

-l:鎖定用戶的口令

-u:解鎖,linux不允許創建密碼爲空的用戶,-f可以解除這種保護

-d:刪除使用者的密碼, 只有具備超級用戶權限的使用者方可使用

-n mindays:修改密碼的最小天數,也就是mindays內不能再次修改密碼

-x maxdays:修改密碼的最大天數,也就是maxdays天之後必須修改密碼

-i inactivedays:密碼有效期

-w warndays:密碼過期警告時間

-S:顯示簡短密碼的信息

--stdin:從標準輸入中讀入新密碼(此時可以看見設置的密碼)

參數:

用戶名:需要設置密碼的用戶名。

 

顯示用戶的ID

id命令用於顯示用戶的ID,以及所屬羣組的ID

id會顯示用戶以及所屬羣組的實際與有效ID。若兩個ID相同,則僅顯示實際ID。若僅指定用戶名稱,則顯示目前用戶的ID

語法:id[-gGnru][--help][--version][用戶名稱]

參數說明:

-g--group  顯示用戶所屬羣組的ID

-G--groups  顯示用戶所屬附加羣組的ID

-n--name  顯示用戶,所屬羣組或附加羣組的名稱。

-r--real  顯示實際ID

-u--user  顯示用戶ID

-help  顯示幫助。

-version  顯示版本信息。

 

切換用戶或以其他用戶身份執行命令

su命令用於變更爲其他使用者的身份,除 root 外,需要鍵入該使用者的密碼。

語法:su[-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]

參數說明:

-f --fast 不必讀啓動檔(如 csh.cshrc 等),僅用於 csh tcsh

-m -p --preserve-environment 執行 su 時不改變環境變數

-c command --command=command 變更爲帳號爲 USER 的使用者並執行指令(command)後再變回原來使用者

-s shell --shell=shell 指定要執行的 shell bash csh tcsh 等),預設值爲 /etc/passwd 內的該使用者(USER shell

--help 顯示說明文件

--version 顯示版本資訊

- -l --login 這個參數加了之後,就好像是重新 login 爲該使用者一樣,大部份環境變數(HOME SHELL USER等等)都是以該使用者(USER)爲主,並且工作目錄也會改變,如果沒有指定 USER ,內定是 root

USER 欲變更的使用者帳號

ARG 傳入新的 shell 參數

 

檢查用戶密碼文件的完整性

pwck命令用於檢查用戶密碼文件的完整性(/etc/passwd以及/etc/shadow文件)。
用法:pwck[-q] [-s] [passwd [ shadow ]]
     pwck [-q] [-r] [passwd shadow]
參數:
-q:只顯示錯誤信息,警告不顯示
-s:按id排序
-r:只讀方式檢查

 

修改帳號和密碼的有效期限

chage命令是用來修改帳號和密碼的有效期限。

語法:chage[選項] 用戶名

選項-m:密碼可更改的最小天數。爲零時代表任何時候都可以更改密碼。

-M:密碼保持有效的最大天數。 -w:用戶密碼到期前,提前收到警告信息的天數。

-E:帳號到期的日期。過了這天,此帳號將不可用。

-d:上一次更改的日期。

-i:停滯時期。如果一個密碼已過期這些天,那麼此帳號將不可用。

-l:例出當前的設置。由非特權用戶來確定他們的密碼或帳號何時過期。

 

換登錄系統時使用的shell

chsh命令用來更換登錄系統時使用的shell

若不指定任何參數與用戶名稱,則chsh會以應答的方式進行設置。

語法:chsh(選項)(參數)

選項:

-s--shell:更改系統預設的shell環境;

-l--list-shells:列出目前系統可用的shell清單;

-u--help:在線幫助;

-v-version:顯示版本信息。

 

查詢其他使用者的資料

finger命令可以讓使用者查詢一些其他使用者的資料。會列出來的資料有:

Login Name

User Name

Home directory

Shell

Login status

mail status

.plan

.project

.forward

其中.plan.project .forward 就是使用者在他的 HomeDirectory 裏的.plan .project .forward 等檔案裏的資料。

如果沒有就沒有。finger指令並不限定於在同一服務器上查詢,也可以尋找某一個遠端服務器上的使用者。只要給一個像是E-mail address 一般的地址即可。

語法:finger[options] user[@address]

參數說明:

-l  多行顯示。

-s  單行顯示。這個選項只顯示登入名稱、真實姓名、終端機名稱、閒置時間、登入時間、辦公室號碼及電話號碼。如果所查詢的使用者是遠端服務器的使用者,這個選項無效。

 

改變finger命令顯示的信息

chfn命令用來改變finger命令顯示的信息。

這些信息都存放在/etc目錄裏的passwd文件裏。

若不指定任何選項,則chfn命令會進入問答式界面。

語法:chfn(選項)(參數)

選項:

-f<真實姓名>--full-name<真實姓名>:設置真實姓名;

-h<家中電話>--home-phone<家中電話>:設置家中的電話號碼;

-o<辦公地址>--office<辦公地址>:設置辦公室的地址;

-p<辦公電話>--office-phone<辦公電話>:設置辦公室的電話號碼;

-u--help:在線幫助;

-v-version:顯示版本信息。

參數:

用戶名:指定要改變finger信息的用戶名。

 

 

Linux系統用戶組的管理

每個用戶都有一個用戶組,系統可以對一個用戶組中的所有用戶進行集中管理。不同Linux系統對用戶組的規定有所不同,如Linux下的用戶屬於與它同名的用戶組,這個用戶組在創建用戶時同時創建。

用戶組的管理涉及用戶組的添加、刪除和修改。組的增加、刪除和修改實際上就是對/etc/group文件的更新。

添加新的用戶組

groupadd命令用於將新組加入系統。

groupadd

語法:groupadd[-g gid] [-o]] [-r] [-f] groupname

參數:

-g gid:指定組ID號。

r:創建系統工作組。

(系統工作組CentOS6: ID小於500CentOS 7: ID小於1000

 

刪除羣組

Linux groupdel命令用於刪除羣組。

需要從系統上刪除羣組時,可用groupdel(groupdelete)指令來完成這項工作。倘若該羣組中仍包括某些用戶,則必須先刪除這些用戶後,方能刪除羣組。

語法:groupdel[羣組名稱]修改用戶組的屬性

 

更改羣組識別碼或名稱

groupmod命令用於更改羣組識別碼或名稱。

需要更改羣組的識別碼或名稱時,可用groupmod指令來完成這項工作。

語法:

groupmod [-g <羣組識別碼> <-o>][-n <新羣組名稱>][羣組名稱]

參數:

-g <羣組識別碼>  設置欲使用的羣組識別碼。

-o  重複使用羣組識別碼。

-n <新羣組名稱>  設置欲使用的羣組名稱。

 

用戶組切換

newgrp命令用於登入另一個羣組。

newgrp指令類似login指令,當它是以相同的帳號,另一個羣組名稱,再次登入系統。

欲使用newgrp指令切換羣組,您必須是該羣組的用戶,否則將無法登入指定的羣組。單一用戶要同時隸屬多個羣組,需利用交替用戶的設置。若不指定羣組名稱,則newgrp指令會登入該用戶名稱的預設羣組。

語法:newgrp[羣組名稱]

 

組文件管理工具

gpasswd命令是Linux下工作組文件/etc/group/etc/gshadow管理工具。

用法:gpasswd[-auser][-d user][-A user,...][-M user,...][-r][-R]groupname

參數:

-a:添加用戶到組

-d:從組刪除用戶

-A:指定管理員

-M:指定組成員和-A的用途差不多

-r:刪除密碼

-R:限制用戶登入組,只有組中的成員纔可以用newgrp加入該組

 

grpck命令
功能:檢查用戶組及密碼文件的完整性(etc/group以及/etc/gshadow文件)
用法:grpck [-r] [group [ shadow ]]
      grpck [-s] [group [ shadow ]]

參數:
-q:只顯示錯誤信息,警告不顯示
-s:按id排序
-r:只讀方式檢查

 

與用戶賬號有關的系統文件

完成用戶管理的工作有許多種方法,但是每一種方法實際上都是對有關的系統文件進行修改。

與用戶和用戶組相關的信息都存放在一些系統文件中,這些文件包括/etc/passwd,/etc/shadow, /etc/group等。

下面分別介紹這些文件的內容:

/etc/passwd文件是用戶管理工作涉及的最重要的一個文件。

Linux系統中的每個用戶都在/etc/passwd文件中有一個對應的記錄行,它記錄了這個用戶的一些基本屬性。

這個文件對所有用戶都是可讀的。它的內容類似下面的例子:

cat /etc/passwd

root:x:0:0:Superuser:/:

daemon:x:1:1:System daemons:/etc:

bin:x:2:2:Owner of system commands:/bin:

sys:x:3:3:Owner of system files:/usr/sys:

adm:x:4:4:System accounting:/usr/adm:

uucp:x:5:5:UUCP administrator:/usr/lib/uucp:

auth:x:7:21:Authenticationadministrator:/tcb/files/auth:

cron:x:9:16:Cron daemon:/usr/spool/cron:

listen:x:37:4:Network daemon:/usr/net/nls:

lp:x:71:18:Printeradministrator:/usr/spool/lp:

sam:x:200:50:Sam san:/usr/sam:/bin/sh從上面的例子我們可以看到,/etc/passwd中一行記錄對應着一個用戶,每行記錄又被冒號(:)分隔爲7個字段,其格式和具體含義如下:

用戶名:口令:用戶標識號:組標識號:註釋性描述:主目錄:登錄Shell

"用戶名"是代表用戶賬號的字符串。

通常長度不超過8個字符,並且由大小寫字母和/或數字組成。登錄名中不能有冒號(:),因爲冒號在這裏是分隔符。

爲了兼容起見,登錄名中最好不要包含點字符(.),並且不使用連字符(-)和加號(+)打頭。

口令一些系統中,存放着加密後的用戶口令字。

雖然這個字段存放的只是用戶口令的加密串,不是明文,但是由於/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux系統(如SVR4)都使用了shadow技術,把真正的加密後的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如“x”或者“*”

用戶標識號是一個整數,系統內部用它來標識用戶。

一般情況下它與用戶名是一一對應的。如果幾個用戶名對應的用戶標識號是一樣的,系統內部將把它們視爲同一個用戶,但是它們可以有不同的口令、不同的主目錄以及不同的登錄Shell等。

通常用戶標識號的取值範圍是065 5350是超級用戶root的標識號,199由系統保留,作爲管理賬號,普通用戶的標識號從100開始。在Linux系統中,這個界限是500

組標識號字段記錄的是用戶所屬的用戶組。

它對應着/etc/group文件中的一條記錄。

註釋性描述字段記錄着用戶的一些個人情況。

例如用戶的真實姓名、電話、地址等,這個字段並沒有什麼實際的用途。在不同的Linux系統中,這個字段的格式並沒有統一。在許多Linux系統中,這個字段存放的是一段任意的註釋性描述文字,用做finger命令的輸出。

主目錄,也就是用戶的起始工作目錄。

它是用戶在登錄到系統之後所處的目錄。在大多數系統中,各用戶的主目錄都被組織在同一個特定的目錄下,而用戶主目錄的名稱就是該用戶的登錄名。各用戶對自己的主目錄有讀、寫、執行(搜索)權限,其他用戶對此目錄的訪問權限則根據具體情況設置。

用戶登錄後,要啓動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統後運行的命令解釋器或某個特定的程序,即Shell

Shell是用戶與Linux系統之間的接口。LinuxShell有許多種,每種都有不同的特點。常用的有sh(Bourne Shell), csh(C Shell),ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。

系統管理員可以根據系統情況和用戶習慣爲用戶指定某個Shell。如果不指定Shell,那麼系統使用sh爲默認的登錄Shell,即這個字段的值爲/bin/sh

用戶的登錄Shell也可以指定爲某個特定的程序(此程序不是一個命令解釋器)。

利用這一特點,我們可以限制用戶只能運行指定的應用程序,在該應用程序運行結束後,用戶就自動退出了系統。有些Linux系統要求只有那些在系統中登記了的程序才能出現在這個字段中。

 

由於/etc/passwd文件是所有用戶都可讀的,如果用戶的密碼太簡單或規律比較明顯的話,一臺普通的計算機就能夠很容易地將它破解,因此對安全性要求較高的Linux系統都把加密後的口令字分離出來,單獨存放在一個文件中,這個文件是/etc/shadow文件。 有超級用戶才擁有該文件讀權限,這就保證了用戶密碼的安全性。

 

/etc/shadow中的記錄行與/etc/passwd中的一一對應,它由pwconv命令根據/etc/passwd中的數據自動產生

它的文件格式與/etc/passwd類似,由若干個字段組成,字段之間用":"隔開。這些字段是:

登錄名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標誌

"登錄名"是與/etc/passwd文件中的登錄名相一致的用戶賬號

"口令"字段存放的是加密後的用戶口令字,長度爲13個字符。如果爲空,則對應用戶沒有口令,登錄時不需要口令;如果含有不屬於集合 {./0-9A-Za-z }中的字符,則對應的用戶不能登錄。

"最後一次修改時間"表示的是從某個時刻起,到用戶最後一次修改口令時的天數。時間起點對不同的系統可能不一樣。例如在SCOLinux 中,這個時間起點是197011日。

"最小時間間隔"指的是兩次修改口令之間所需的最小天數。

"最大時間間隔"指的是口令保持有效的最大天數。

"警告時間"字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。

"不活動時間"表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數。

"失效時間"字段給出的是一個絕對的天數,如果使用了這個字段,那麼就給出相應賬號的生存期。期滿後,該賬號就不再是一個合法的賬號,也就不能再用來登錄了。

下面是/etc/shadow的一個例子:

cat /etc/shadow

 

root:Dnakfw28zf38w:8764:0:168:7:::

daemon:*::0:0::::

bin:*::0:0::::

sys:*::0:0::::

adm:*::0:0::::

uucp:*::0:0::::

nuucp:*::0:0::::

auth:*::0:0::::

cron:*::0:0::::

listen:*::0:0::::

lp:*::0:0::::

sam:EkdiSECLWPdSa:9740:0:0::::

 

用戶組的所有信息都存放在/etc/group文件中。

將用戶分組是Linux系統中對用戶進行管理及控制訪問權限的一種手段。

每個用戶都屬於某個用戶組;一個組中可以有多個用戶,一個用戶也可以屬於不同的組。

當一個用戶同時是多個組中的成員時,在/etc/passwd文件中記錄的是用戶所屬的主組,也就是登錄時所屬的默認組,而其他組稱爲附加組。

用戶要訪問屬於附加組的文件時,必須首先使用newgrp命令使自己成爲所要訪問的組中的成員。

用戶組的所有信息都存放在/etc/group文件中。此文件的格式也類似於/etc/passwd文件,由冒號(:)隔開若干個字段,這些字段有:

組名:口令:組標識號:組內用戶列表

"組名"是用戶組的名稱,由字母或數字構成。與/etc/passwd中的登錄名一樣,組名不應重複。

"口令"字段存放的是用戶組加密後的口令字。一般Linux 系統的用戶組都沒有口令,即這個字段一般爲空,或者是*

"組標識號"與用戶標識號類似,也是一個整數,被系統內部用來標識組。

"組內用戶列表"是屬於這個組的所有用戶的列表/b],不同用戶之間用逗號(,)分隔。這個用戶組可能是用戶的主組,也可能是附加組。

/etc/group文件的一個例子如下:

root::0:root

bin::2:root,bin

sys::3:root,uucp

adm::4:root,adm

daemon::5:root,daemon

lp::7:root,lp

users::20:root,sam

 

 

(1)、創建組distro,其GID2016

 

[root@localhost ~]# groupadd -g 2016 distro
[root@localhost ~]# cat /etc/group|grepdistro
distro:x:2016:

[root@localhost ~]#

 

(2)、創建用戶mandriva, ID號爲1005;基本組爲distro

 

[root@localhost ~]# useradd -u 1005 -gdistro mandriva
[root@localhost ~]# cat /etc/passwd|grepmandriva
mandriva:x:1005:2016::/home/mandriva:/bin/bash
[root@localhost ~]# groups mandriva
mandriva : distro
[root@localhost ~]#

 

(3)、創建用戶mageia,其ID號爲1100,家目錄爲/home/linux;

 

[root@localhost ~]# useradd -u 1100 -d/home/linux mageia
[root@localhost ~]# cat /etc/passwd|grepmageia
mageia:x:1100:1100::/home/linux:/bin/bash
[root@localhost ~]#

 

(4)、給用戶mageia添加密碼,密碼爲mageedu

 

1.

[root@localhost ~]# passwd mageia

更改用戶 mageia 的密碼

新的密碼:

重新輸入新的密碼:

passwd:所有的身份驗證令牌已經成功更新。

[root@localhost ~]# passwd -S mageia

mageia PS 2016-12-24 0 99999 7 -1 (密碼已設置,使用SHA512 算法。)

 

2.

[root@localhost ~]# echo 'mageedu' | passwd--stdin mageia

更改用戶 mageia 的密碼

passwd:所有的身份驗證令牌已經成功更新。

[root@localhost ~]# cat /etc/passwd|grepmageia

mageia:x:1100:1100::/home/linux:/bin/bash

[root@localhost ~]#

 

3.

[root@localhost ~]# passwd --stdin mageia

更改用戶 mageia 的密碼

mageedu

passwd:所有的身份驗證令牌已經成功更新。

 

(5)、刪除mandriva,但保留其家目錄;

 

[root@localhost ~]# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

...

...

gnome-initial-setup:x:988:983::/run/gnome-initial-setup/:/sbin/nologin

avahi:x:70:70:Avahi mDNS/DNS-SDStack:/var/run/avahi-daemon:/sbin/nologin

mandriva:x:1005:2016::/home/mandriva:/bin/bash

mageia:x:1100:1100::/home/linux:/bin/bash

 

[root@localhost ~]# userdel mandriva

 

[root@localhost ~]# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

...

...

gnome-initial-setup:x:988:983::/run/gnome-initial-setup/:/sbin/nologin

avahi:x:70:70:Avahi mDNS/DNS-SDStack:/var/run/avahi-daemon:/sbin/nologin

mageia:x:1100:1100::/home/linux:/bin/bash

 

(6)、創建用戶slackware,其ID號爲2002,基本組爲distro,附加組peguin

 

[root@localhost ~]# groupadd peguin

[root@localhost ~]# useradd -u 2002 -gdistro -G peguin slackware

[root@localhost ~]# cat /etc/passwd|grepslackware

slackware:x:2002:2016::/home/slackware:/bin/bash

[root@localhost ~]# groups slackware

slackware : distro peguin

 

(7)、修改slackware的默認shell/bin/tcsh

 

[root@localhost ~]# usermod -s /bin/tcshslackware

[root@localhost ~]# cat /etc/passwd|grepslackware

slackware:x:2002:2016::/home/slackware:/bin/tcsh

[root@localhost ~]#

 

(8)、爲用戶slackware新增附加組admins

 

[root@localhost ~]# groupadd admins

[root@localhost ~]# usermod -a -G adminsslackware

[root@localhost ~]# groups slackware

slackware : distro peguin admins

[root@localhost ~]#

 

(9)、爲slackware添加密碼,且要求密碼最短使用期限爲3天,最長爲180天,警告爲3天;

 

[root@localhost ~]# passwd --stdinslackware

更改用戶 slackware 的密碼

mageedu

passwd:所有的身份驗證令牌已經成功更新。

[root@localhost ~]# passwd -n 3 -x 180 -w 3slackware

調整用戶密碼老化數據slackware

passwd: 操作成功

[root@localhost ~]#

 

(10)、添加用戶openstack,其ID號爲3003, 基本組爲clouds,附加組爲peguinnova

 

[root@localhost ~]# groupadd clouds

[root@localhost ~]# groupadd nova

[root@localhost ~]# useradd -u 3003 -gclouds -G peguin,nova openstack

[root@localhost ~]# cat /etc/passwd|grepopenstack

openstack:x:3003:2019::/home/openstack:/bin/bash

[root@localhost ~]# groups openstack

openstack : clouds peguin nova

[root@localhost ~]#

 

(11)、添加系統用戶mysql,要求其shell/sbin/nologin

 

[root@localhost ~]# useradd -r -s/sbin/nologin mysql

[root@localhost ~]# cat /etc/passwd|grepmysql

mysql:x:987:982::/home/mysql:/sbin/nologin

[root@localhost ~]#

 

(12)、使用echo命令,非交互式爲openstack添加密碼。

 

[root@localhost ~]# echo 'openstack' |passwd --stdin openstack

更改用戶 openstack 的密碼

passwd:所有的身份驗證令牌已經成功更新。

[root@localhost ~]#

 

9、複製/etc/skel目錄爲/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。

 

[root@localhost ~]# cp -a /etc/skel/home/tuser1

[root@localhost ~]# chmod g-x /home/tuser1/

[root@localhost ~]# chmod o-x /home/tuser1/

[root@localhost ~]#

 

Linux/Unix的文件調用權限分爲三級 : 文件擁有者、羣組、其他。利用 chmod 可以藉以控制文件如何被他人所調用。

 

語法:

chmod [-cfvR] [--help] [--version] modefile...

 

參數說明:

 

mode : 權限設定字串,格式如下 :

[ugoa...][[+-=][rwxX]...][,...]

 

其中:

u 表示該文件的擁有者;g 表示與該文件的擁有者屬於同一個羣體(group)者;o 表示其他以外的人;a 表示這三者皆是。

+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。

r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過爲可執行。

-c : 若該文件權限確實已經更改,才顯示其更改動作

-f : 若該文件權限無法被更改也不要顯示錯誤訊息

-v : 顯示權限變更的詳細資料

-R : 對目前目錄下的所有文件與子目錄進行相同的權限變更(即以遞迴的方式逐個變更)

--help : 顯示輔助說明

--version : 顯示版本

 

10、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用兩種方式;

 

[root@localhost ~]# grep "^[Ss]" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              9096 kB
Slab:              65656 kB
SReclaimable:      24784 kB
SUnreclaim:        40872 kB
[root@localhost ~]#

 

[root@localhost ~]# grep -i '^s'/proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              9096 kB
Slab:              65640 kB
SReclaimable:      24752 kB
SUnreclaim:        40888 kB

[root@localhost ~]#

                                                              

11、顯示/etc/passwd文件中其默認shell爲非/sbin/nologin的用戶;

 

[root@localhost ~]# grep -v'/sbin/nologin$' /etc/passwd | cut -d: -f1
root
sync
shutdown
halt
mageia
slackware
openstack
[root@localhost ~]#

 


[root@localhost ~]# egrep"[^/sbin/nologin]$" /etc/passwd | cut -d: -f1
root
sync
halt
mageia
slackware
openstack
[root@localhost ~]#

12、顯示/etc/passwd文件中其默認shell/bin/bash的用戶;

 

[root@localhost ~]# grep '/bin/bash$'/etc/passwd | cut -d: -f1
root
mageia
openstack

 

13、找出/etc/passwd文件中的一位數或兩位數;

 

1.

[root@localhost ~]# grep'\<[[:digit:]]\{1,2\}\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsddaemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
saslauth:x:993:76:Saslauthduser:/run/saslauthd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SDStack:/var/run/avahi-daemon:/sbin/nologin
[root@localhost ~]#

2.

[root@localhost ~]# grep'\<[0-9]\{1,2\}\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsddaemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
saslauth:x:993:76:Saslauthduser:/run/saslauthd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SDStack:/var/run/avahi-daemon:/sbin/nologin
[root@localhost ~]#

 

14、顯示/etc/rc.d/rc.sysinit文件中以#開頭,後面跟至少一個空白字符,而後又有至少一個非空白字符的行;

 

[root@localhost ~]# grep'^#[[:space:]]\+[^[:space:]]\+' /etc/rc.d/rc.sysinit
grep: /etc/rc.d/rc.sysinit: 沒有那個文件或目錄
[root@localhost ~]# ls /etc/rc.d/
init.d  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local

[root@localhost ~]# grep '#[[:space:]]\+[^[:space:]]\+'/etc/rc.d/rc.local
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
[root@localhost ~]#

 

15、打出netstat -tan命令執行結果中以‘LISTEN’,後或跟空白字符結尾的行;

 

[root@localhost ~]# netstat -tan | grep"LISTEN[[:space:]]\+$"
tcp       0      0 192.168.122.1:53        0.0.0.0:*               LISTEN    
tcp       0      0 0.0.0.0:22              0.0.0.0:*               LISTEN    
tcp       0      0 127.0.0.1:631           0.0.0.0:*               LISTEN    
tcp       0      0 127.0.0.1:25            0.0.0.0:*               LISTEN    
tcp       0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN    
tcp6      0      0 :::22                   :::*                    LISTEN    
tcp6      0      0 ::1:631                 :::*                    LISTEN    
tcp6      0      0 ::1:25                  :::*                    LISTEN    
tcp6      0      0 ::1:6010                :::*                    LISTEN    
[root@localhost ~]#

 

16、添加用戶bash, testbash,basher, nologin (此一個用戶的shell/sbin/nologin),而後找出當前系統上其用戶名和默認shell相同的用戶的信息;

 

[root@localhost ~]# useradd bash
[root@localhost ~]# useradd testbash
[root@localhost ~]# useradd basher
[root@localhost ~]# useradd -s/sbin/nologin nologin
[root@localhost ~]# grep'\(\<[[:alnum:]]\+\>\).*\1$' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:3004:3004::/home/bash:/bin/bash
nologin:x:3007:3007::/home/nologin:/sbin/nologin


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章