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


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