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
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小於500;CentOS 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等。
通常用戶標識號的取值範圍是0~65 535。0是超級用戶root的標識號,1~99由系統保留,作爲管理賬號,普通用戶的標識號從100開始。在Linux系統中,這個界限是500。
“組標識號”字段記錄的是用戶所屬的用戶組。
它對應着/etc/group文件中的一條記錄。
“註釋性描述”字段記錄着用戶的一些個人情況。
例如用戶的真實姓名、電話、地址等,這個字段並沒有什麼實際的用途。在不同的Linux系統中,這個字段的格式並沒有統一。在許多Linux系統中,這個字段存放的是一段任意的註釋性描述文字,用做finger命令的輸出。
“主目錄”,也就是用戶的起始工作目錄。
它是用戶在登錄到系統之後所處的目錄。在大多數系統中,各用戶的主目錄都被組織在同一個特定的目錄下,而用戶主目錄的名稱就是該用戶的登錄名。各用戶對自己的主目錄有讀、寫、執行(搜索)權限,其他用戶對此目錄的訪問權限則根據具體情況設置。
用戶登錄後,要啓動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統後運行的命令解釋器或某個特定的程序,即Shell。
Shell是用戶與Linux系統之間的接口。Linux的Shell有許多種,每種都有不同的特點。常用的有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 中,這個時間起點是1970年1月1日。
"最小時間間隔"指的是兩次修改口令之間所需的最小天數。
"最大時間間隔"指的是口令保持有效的最大天數。
"警告時間"字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。
"不活動時間"表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數。
"失效時間"字段給出的是一個絕對的天數,如果使用了這個字段,那麼就給出相應賬號的生存期。期滿後,該賬號就不再是一個合法的賬號,也就不能再用來登錄了。
下面是/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,其GID爲2016;
[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,附加組爲peguin和nova;
[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