2020/03/06
第四课
五、Linux系统用户与用户组管理
5.1 认识/etc/passwd 和/etc/shadow
[root@localhost ~]# cat /etc/passwd | head
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
- head前面的符号|叫做管道符,它的作用是把前面的命令的输出再输入给后面的命令。
5.1.1 /etc/passwd 解说
/etc/passwd文件:用户账户信息文件
Linux系统使用一个特殊文件将登录名与相应的UID值匹配,这就是/etc/passwd文件。
如:root:x:0:0:root:/root:/bin/bash
我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,具体含义如下:
用户名:口令:用户标识号:组标识号:注释说明:家目录:Shell
-
第一个字段是用户名:(如:root)是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成,点或下划线,并且不使用连字符(-)和加号(+)打头,其他字符不合法。
-
第二个字段是口令:(这里的x)虽然这个字段存放的只是用户口令的加密串,不是明文,但基于安全因素,Linux系统都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个“x”代替。
-
第三个字段是用户标识号(UID):(如这里的“0”)是一个整数,系统通过这个数字识别用户身份。取值范围是0-65535(实际上已经支持到429 496 729 4)。0是超级用户root的标识号,如果我们自定义建立一个普通用户,该账号的标识号是大于或等于1000的。
-
第四个字段是组标识号(GID):(如这里的“0”)字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。
-
第五个字段是注释说明:(如这里的root)没有实际意义。通常记录该用户的一些属性,如姓名、电话、地址等。
-
第六个字段是家目录:(如这里的root)就是用户的起始目录,它是用户在登录到系统之后所处的目录。root的家目录是/root,普通用户的家目录则为/home/username目录下,用户家目录是可以自定义的。
-
第七个字段是Shell:(这里的/bin/bash)用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。Linux的shell有sh、csh、ksh、tcsh、bahs等多种。
5.1.2 /etc/shadow 解说
/etc/shadow文件:用户密码文件。/etc/shadow文件只有根用户才能访问/etc/shadow文件。
对于系统上的每个用户账户,/etc/shadow文件都包含一个相应的记录,例如:
# cat /etc/shadow | grep -n 3
1:root:$6$OIcDHvR30kEE2EDz$tMDWC4b9h13q19cQWI9phxB9WLJAGCX5Pc6Zn08d630BN2qq1NA6dWwjuUgbd8RCQylvlj4SRj55F0klsQ1An.::0:99999:7:::
14:avahi-autoipd:!!:18325::::::
15:systemd-bus-proxy:!!:18325::::::
16:systemd-network:!!:18325::::::
17:dbus:!!:18325::::::
18:polkitd:!!:18325::::::
19:tss:!!:18325::::::
20:postfix:!!:18325::::::
21:sshd:!!:18325::::::
每个/etc/shadow文件都有9个字段
-
用户名:与/etc/passwd文件中的登录名相一致的用户账号。
-
用户密码:存放的是加密后的用户真正密码。但是黑客还是能够解密的,所以将文件属性设置为000,但root用户是可以访问或更改的,如
# ls -l /etc/shadow ----------. 1 root root 644 Mar 4 04:46 /etc/shadow
-
上次更改密码的时间:这个时间起点是1970年1月1日和上次修改密码的日期为基准计算而来的。
-
要过多少天能够修改密码,默认是0,即不受限制。
-
密码还有多少天后到期,即多少天内必须要修改密码。默认是99999,可以理解为永远不需要改。
-
密码到期前的警告期限,距密码逾期并警告用户修改密码的天数。
-
密码失效期限。表示的是用户没有登录活动但账号仍能保持有效的最大天数。
-
账号的生命周期。这个周期为自1970年1月1日开始的天数,在这个日期前可以使用,到期后账号作废。
5.2 用户和用户组管理
5.2.1 新增组的命令 groupadd
groupadd [组名]
[root@localhost ~]# groupadd grptest1
[root@localhost ~]# tail -n1 /etc/group
grptest1:x:1000:
groupadd -g [组名] (-g:指定gid)
[root@localhost ~]# groupadd -g 1008 grptest2
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:1000:
grptest2:x:1008:
5.2.2 删除组的命令 groupdel
groupdel:不能删除包含有用户的组,只有删除用户后才可以删除组。
格式:groupdel [组名]
[root@localhost ~]# groupdel grptest1
[root@localhost ~]# tail -n2 /etc/group
sshd:x:74:
grptest2:x:1008:
5.2.3 新增用户的命令 useradd
user:增加用户。
格式:useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]
- -u 表示自定义UID。
- -g 使新增用户属于已经存在的某个组,后面可跟组名,也可以跟组ID。
- -d 表示自定义用户的家目录 。
- -M 表示不建立家目录。
- -s 表示自定义shell。
直接添加用户不加参数,系统默认添加同名组
5.2.4删除账户的命令 userdel
格式:userdel [-r] 账户名(-r:当删除用户时,一并删除用户的家目录)
5.2.5 使用命令chfn更改用户的finger
chfn:用于更改用户的finger。finger即在/etc/passwd文件第五个字段中显示的信息。
# chfn test1
Changing finger information for test1.
Name []: test1
Office []: test1'office
Office Phone []: 000000
Home Phone []: 000000
Finger information changed.
[root@localhost ~]# grep 'test1' /etc/passwd
test1:x:1000:1000:test1,test1'office,000000,000000:/home/test1:/bin/bash
5.3 用户密码管理
5.3.1 命令passwd
passwd:为用户设置密码。
格式:passwd [username](如果不跟用户名,则是为自己设置密码)
# passwd test1
Changing password for user test1.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
root 用户可以修改其他用户的密码,普通用户只能修改自己的密码。
5.3.2 命令 mkpasswd
mkpasswd:用于生成密码。
- -l 指定生成密码长度
- -s 指定特殊字符个数
- -d 指定数字个数
默认安装的Linux是没有这个命令的,需要安装一个expert软件包。
5.4 用户身份切换
5.4.1 命令 su
su:切换用户。格式为:su [-] username
- 普通用户的su命令不加username时,就是切换到root用户。
- root用户也可以使用su命令切换到普通用户。
- su命令后面加-后,会初始化当前用户的各种环境变量。
5.4.2 命令 sudo
sudo:是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
-
编辑配置文件命令:visudo
注意:sudo的配置文件/etc/sudoers是一般使用visudo(必须使用root用户)去编辑。## Allow root to run any commands anywhere root ALL=(ALL) ALL test ALL=(root) /usr/sbin/test ##添加权限,这里的/usr/sbin/useradd表示普通用户执行时必须使用全路径,可以使用which 命令查看哦! ## Allows members of the 'sys' group to run networking, software,
-
增加一个用户就设置一行,有点麻烦,可以这么做:#%wheel ALL=(ALL) ALL前面的#起掉,让这一行生效。然后把要设置sudo权限的用户加入到这个组就可以了。
-
只允许普通用户登录,而普通账户登录后,可以不输入密码就能用sudo切换到root账户:
# visudo User_Alias USER_SU = test,test1,aming //user别名,USER_SU相当于 test,test1,aming 三个账户 Cmnd_Alias SU = /usr/bin/su //命令别名,SU相当于/usr/bin/su USER_SU ALL=(ALL) NOPASSWD:SU
示例
①、创建test并为其创建密码
# useradd test
# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
②、修改配置文件,为test添加特殊权限test
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tom ALL=(root) /usr/sbin/test ##添加权限,这里的/usr/sbin/useradd表示普通用户执行时必须使用全路径,可以使用which 命令查看哦!
## Allows members of the 'sys' group to run networking, software,
③、切换到用户test,验证特殊权限
[root@localhost ~]# su test
[test@localhost root]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for test:
Matching Defaults entries for test on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1
PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User test may run the following commands on this host:
(ALL) ALL
[test@localhost root]$
④、查看日志/vat/log/secure
5.4.3 不允许root远程登录Linux
默认允许root用户远程登录ssh的配置文件为/etc/ssh/sshd_config
# vi /etc/ssh/sshd_config
PermitRootLogin yes //去掉#号,把yes改成no,然后保存退出
# systemctl sshd.service
只适用于通过ssh远程登录Linux的情况。
六、Linux的磁盘管理
6.1 查看磁盘或者目录的容量
6.1.1 命令df
df:用于查看已挂载磁盘的总容量、使用容量、剩余容量等。
- -i:表示查看inodes的使用情况;如已使用100%,即使磁盘空间有富余,也会提示磁盘空间已满。
- -h:表示使用合适的单位显示。
- -k、-m:分别表示以KB、MB为单位显示。
6.1.2 命令du
du:用于查看某个目录或文件所占的大小
-
格式:du [-abckmsh] [文件名或目录名]
-a:表示全部文件和目录的大小都列出来。
-b:表示列出的值以B为单位输出。
-k:表示以KB的单位输出。
-m:表示以MB的单位输出。
-h:表示系统自动调节单位。
-c:表示最后加总。
-s:表示只列出总和。
6.2 磁盘的分区和格式化
6.2.1 增加虚拟磁盘
①右击虚拟机选项卡,选择“设置”,会弹出“虚拟机设置”对话框,在左侧选择“硬盘”,然后点击下方的“添加”按钮,会弹出“添加硬件向导”对话框,点击“下一步”按钮。
②“选择磁盘类型”对话框这里保持默认,无需更改,点击“下一步”;
③“选择磁盘”对话框这里也保持默认,无需更改,点击“下一步”;
④“指定磁盘容量”对话框这里设定“最大磁盘大小”为5GB,然后选择“将虚拟磁盘存储为单个文件”。
⑤点击“完成”,完成添加虚拟磁盘,虚拟磁盘添加后,需要重启一下系统。
6.2.2 命令fdisk
fdisk:是Linux下磁盘的分区工具,但是只能划分小于2TB的分区。
格式为:fdisk [-l] [设备名称]
- fdisk [-l] [设备名称](如果不加-l后不加设备名称,会直接列出系统所有的磁盘设备以及分区表;加上设备名称,则列出该设备的分区表。)
- fdisk(后面不加-l,则进入另一种模式,可以对磁盘进行分区操作)
这里primary表示主分区,extended表示拓展分区。Linux系统中最大多只能创建4个主分区,如果想要对创建几个分区,就可以在创建3个主分区后,创建1一个拓展分区,然后在拓展分区里面创建逻辑分区。如图sdb1、sdb2、sdb3是主分区,sdb4是拓展分区,sdb5、sdb6是逻辑分区。
6.3 格式化磁盘分区
6.3.1 命令mke2fs、mkfs.ext2、mkfs.ext3、mkfs.ext4和 mkfs.xfs
mke2fs、mkfs.ext2、mkfs.ext3、mkfs.ext4这四个命令是一样的,mke2fs命令常用的选项如下所示:
- -b:表示分区时设定每个数据区块所占用的空间大小;
- -i:表示设定inode的大小;
- -N:表示设定inode的数量;
- -c:表示在格式化前检测一下磁盘是否有问题;
- -L:表示预设该分区的标签(label);
- -j:表示建立ext3格式的分区;如果使用mkfs.ext3格式,就不用加这个选项了。
- -t:用来指文件系统的类型,可以是ext2、ext3,也可以是ext4。
mke2fs -t ext4 /dev/sdb5相当于mkfs.ext4 /dev/sdb5,然而mke2fs并不支持把分区格式化成CFS,而只能使用mkfs.xfs;
-L选项指定标签,标签会在挂载磁盘时使用,也可以写入配置文件。
格式化磁盘中-t和-L这两个选项比较常用及重要
6.3.1 命令e2label
e2label:用于查看或修改分区的标签,只支持ext格式的文件系统,不支持XFS文件系统。
6.4 挂载/卸载磁盘
6.4.1 命令mount
mount:查看当前系统已经挂载的所有分区、分区文件系统的类型、挂载点及一些选项等消息。
- 挂载
(在挂载某个分区前,先建立一个挂载点,这个挂载点是以目录的形式出现的。一旦把某个分区挂载到这个挂载点(目录)下,要再往这个目录写数据时,就都会写到该分区中。所以,在挂载该分区前,挂载点(目录)必须是个空目录,若不是空目录的话,一旦挂载,该目录下以前的东西就看不到了(数据并没有丢失),除非卸载该分区。)
也可以用LABEL的方式挂载分区。
- 卸载
6.4.2 /etc/fstab配置文件
/etc/fstab文件内容如下:
- 第1列:分区的标识;可以写分区的LABEL、分区的UUID,也可以写分区名(/dev/sda1)
- 第2列:挂载点;
- 第3列:分区的格式;
- 第4列:mount的一些挂载参数;一般情况下,直接写defaults即可;
常用选项有:
async/sync | async表示与磁盘和内存不同步;系统每隔一段时间就会把内存数据写入磁盘中,而sync则会时时同步内存和磁盘中的数据 |
---|---|
auto/noauto | 表示开机自动挂载/不自动挂载 |
default | 表示按照大多数永久文件系统的默认值设置挂载定义.它包含了rw、 suid、dev、exec、auto、nouser和async |
ro | 表示按只读权限挂载 |
rw | 表示按可读可写权限挂载 |
exec/noexec | 表示允许/不允许可执行文件执行,但千万不要把根分区挂载为 noexec,否则将无法使用系统,甚至连mount命令都无法使用 |
user/nouser | 表示允许/不允许root外的其他用户挂载分区。为了安全,请用 nouser |
suid/nosuid | 表示允许/不允许分区有suid属性,一般设置nosuid |
usrquota | 表示启动用户的磁盘配额模式。磁盘配额会针对用户限定他们使用的磁盘额度 |
grquota | 表示启动群组的磁盘配额模式 |
- 第5列:表示是否被dump备份。1表示备份,0表示不备份。
- 第6列:表示开机时是否自检磁盘;1和2表示检测,0表示不检测。1比2优先级高,所有先检测1,再检测2。如果有多个分区需要开机自动自检,就都设置成2,1检测完后会同时检测2。
在/etc/fstab文件中增加一行来挂载新增分区:
- -a:会把/etc/fstab中出现的所有磁盘分区挂载上;
- -t:用来指定挂载的分区类型,默认不指定,会自动识别。
- -o:用来指定挂载的分区有哪些特性,即上面/etc/fstab配置文件中的第4列那些。
6.4.3 命令 blkid
blkid:获取各分区的UUID。
分区在开机后自动挂载
①在/etc/fstab文件中添加一行
UUID="57fc2df9-005d-4ded-b442-95770af04fa8" /newdir ext4 defaults 0 0
②把挂载命令写到/etc/rc.d/rc.local文件中去,然后执行chmod a+x /etc/rc.d/rc.local命令
6.4.4 命令 umount
umount:卸载磁盘。其格式为:umount [-l] [挂载点或分区命](不可以跟LABEL和UUID)
6.5 建立一个swap文件增加虚拟内存
基本思路:建立swapfile——格式化为swap格式——启动该虚拟磁盘
其中用到的dd命令:
- if:指定源(一般写/dev/zero,它是UNIX系统特有的一个文件,它可以源源不断地提供“0”)
- of:指定目标文件
- bs:定义块的大小
- count:定义块的数量
- 目标文件的大小=bs*count