Linux(centOS7)学习笔记(三)

时间:2024-05-20 10:39:50

六、用户和用户组管理

1、用户信息文件

1、/etc/passwd

可以使用 vim /etc/passwd查看
Linux(centOS7)学习笔记(三)

第一字段:用户名称

第二字段:密码标志

第三字段:UID(用户ID)

0: 超级用户

1-499: 系统用户(伪用户)

500-65535: 普通用户

第四字段:GID(用户初始组ID)

第五字段:用户说明

第六字段:家目录

普通用户:/home/用户名/

超级用户:/root/

第七字段:登录之后的Shell

2、初始组和附加组

初始组:指用户一登录就立刻拥有这个用户组相关的权限,每个用户的初始组只能有一个,一般是将用户名相同的组名作为初始组。

附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。

2、影子文件

1、/etc/shadow

可以使用 vim /etc/shadow查看

Linux(centOS7)学习笔记(三)

第一字段:用户名称

第二字段:加密密码

如果密码位是“!!”或“*”,代表没有密码。不能登录

第三字段:密码最后一次修改日期

使用1970年1月1日最为标准时间,每过一天加时间戳1

第四字段:两次密码的修改时间间隔(与第三字段相比)

第五字段:密码有效期(与第三字段相比)

第六字段:密码到期前的警告天数(和第五字段相比)

第七字段:密码过期后的宽限天数(和第五字段相比)

0:代表密码过期后立即失效

-1:代表密码永远不会失效

第八字段:账号失效时间

用时间戳表示

第九字段:保留字段

2、时间戳换算

把时间戳换算为日期:date -d "1970-01-01 17056 days"

把日期换算为时间戳:echo (((date -date=“2017/02/06”+%s)/86400+1)

3、组信息文件

1、组信息文件/etc/group

Linux(centOS7)学习笔记(三)

第一字段:组名

第二字段:组密码标志

第三字段:GID

第四字段:组中附加用户

2、组密码文件/etc/gshadow

第一字段:组名

第二字段:组密码

第三字段:组管理员用户名

第四字段:组中附加用户

4、用户管理相关文件

1、用户的家目录

普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700

超级用户:/root/,所有者和所属组都是root用户,权限是550

2、用户的邮箱

/var/spool/mail/用户名/

3、用户模板目录

/etc/skel/

5、用户管理命令useradd

1、useradd命令格式

语法:useradd [选项] 用户名

选项:

-u (UID) 手工指定用户的UID号
-d (家目录) 手工指定用户的家目录
-c (用户说明) 手工指定用户的说明
-g (组名) 手工指定用户的初始组
-G (组名) 指定用户的附加组
-s (shell) 手工指定用户的登录shell,默认是/bin/bash

2、passwd命令格式

语法:passwd [选项] 用户名

选项:

-S 查询用户密码的密码状态。仅root用户可用
-l 暂时锁定用户。仅root用户可用
-u 解锁用户。仅root用户可用
–stdin 可以通过管道符输出的数据作为用户的密码

6、用户管理命令usermod和change

1、修改用户信息usermod

语法:usermod [选项] 用户名

选项:

-u UID 修改用户名的UID号
-c 用户数说明 修改用户的说明信息
-G 组名 修改用户的附加组
-L 临时锁定用户(Lock)
-U 解锁用户锁定(Unlock)

示列:

​ usermod -c ‘test user’ zhangsan #修改用户的说明

​ usermod -G root zhangsan #把zhangsan用户加入root 组

​ usermod -L zhangsan #锁定用户

​ usermod -U zhangsan #解锁用户

2、修改用户密码状态change

​ 语法:change [选项] 用户名

​ 选项:

-l 列出用户的详细密码状态
-d 日期 修改密码最后一次更改日期 (shadow3字段)
-m 天数 两次密码修改间隔(4字段)
-M 天数 密码有效期(5字段)
-W 天数 密码过期前警告天数(6字段)
-I 天数 密码过后宽限天数 (7字段)
-E 日期 账号失效时间(8字段)

7、用户管理命令userdel

语法:userdel [-r] 用户名

选项:

​ -r 删除用户的同时删除用户家目录

手工删除用户的命令:

​ vi /etc/passwd

​ vi /etc/shadow

​ vi /etc/group

​ vi /etc/gshadow

​ rm -rf /var/spool/mail/zhangsan

​ rm -rf /home/zhangsan/

1、查看用户ID

​ 语法:id 用户名

2、切换用户身份su

语法:su [选项] 用户名

选项:

- 选项只使用“-”代表连带用户的环境变量一起切换
-c命令 仅执行一次命令,而不切换用户身份

8、用户组管理命令

1、添加用户组

语法:groupadd [选项] 组名

选项:

​ -g GID: 指定组ID

2、修改用户组

语法:groupmod [选项] 组名

选项:

-g GID 修改组ID
-n 新组名 修改组名

示列:groupmod -n testgrp group1 #把组名group1修改为testgrp

3、删除用户组

语法:groupdel 组名

4、把用户添加入组或组中删除

语法:gpasswd 选项 组名

选项:

-a 用户名 把用户加入组
-d 用户名 把用户从组中

七、权限管理

1、ACL权限-简介与开启

1、ACL权限简介

Linux(centOS7)学习笔记(三)

2、查看分区ACL权限是否开启

语法:dumpe2fs -h /dev/sda3

#dumpe2fs命令是查询指定分区详细文件系统信息的命令

选项:

​ -h 仅显示超级块中信息,而不是显示磁盘块组的详细信息

3、临时开启分区ACL权限

语法:mount -o remount,acl / #重新挂载根分区,并挂载加入acl权限

4、永久开启分区ACL权限

语法:vi /etc/fstab #加入acl

​ mount -o remount / #重新挂载文件系统或启动系统,使修改生效

2、ACL权限-查看与设定

1、查看ACL命令

语法:getfacle 文件名 #查看acl权限

2、设定ACL权限的命令

语法:setfacl 选项 文件名

-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限

3、ACL设定

用法:useradd zhangsan

​ useradd st

​ groupadd tgroup

​ mkdir /project

​ chown root:tgroup /project/

​ chmod 770 /project/

​ setfacl -m u:st:rx /project/

#给用户st赋予r-x权限,使用“u:用户名:权限” 格式

4、给用户组设定ACL权限

用法:groupadd tgroup2

​ sefacl -m g:tgroup2:rwx project/ #为组group2分配ACL权限,使用“g:组名:权限”格式

3、ACL权限-最大有效权限与删除

1、修改最大有效权限

语法:setfacl -m m:rx 文件名 #设定mask权限为r-x 。使用“m:权限”格式

2、删除ACL权限

语法:setfacl -x u:用户名 文件名 #删除指定用户的ACL权限

​ setfacl -x g:组名 文件名 #删除指定用户组的ACL权限

​ setfacl -b 文件名 #删除文件的所有ACL权限

4、ACL权限-默认与递归ACL权限

1、默认ACL权限

默认ACL权限的作用是如果给夫目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。

setfacl -m d:u:用户名:权限 文件名

2、递归ACL权限

递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。

setfacl -m u:用户名:权限 -R 文件名

5、文件特殊权限-SetUID

1、SetUID的功能

1、只有可执行的二进制程序才能设定SUID权限

2、命令执行者要对该程序拥有x(执行)权限

3、命令执行者在执行该程序是获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)

4、SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码

示列:ll /usr/bin/passwd #-rwsr-xr-x root root /usrbin/passwd

cat 命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

示列:ll /bin/cat #-rwxr-xr-x root root /bin/cat

2、设定SetUID的方法

4代表SUID

​ chmod 4755 文件名

​ chmod u+s 文件名

3、取消SetUID的方法

​ chmod 755 文件名

​ chmod u-s 文件名

4、危险的SetUID

关键目录应严格控制写权限。比如“/”、“/usr”等

用户的密码设置要严格遵守密码三原则

对系统中默认应该具有SetUID权限的文件作一列表,定时检测有没有这之外的文件被设置了SetUID权限

6、文件特殊权限-SetGID

1、SetGID针对文件的作用

1、只有可执行的二进制程序才能设置SGID权限

2、命令执行者要对改程序用于x(执行)权限

3、命令执行在执行程序的时候,组身份升级为该程序文件的属组

4、SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

2、SetGID针对目录的作用

1、普通用户必须对此目录拥有r和x权限,才能进入此目录

2、普通用户在此目录中的有效组会变成此目录的属组

3、若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组

用法示列:

​ ll usr/bin/locate #-rwx–s--x root slocate /usr/bin/locate

​ ll /var/lib/mlocate/mlocate.db #-rw-r----- root slocate /var/lib/mlocate/mlocate.db

4、/usr/bin/locate是可执行二进制程序,可以赋予SGID

5、执行用户lamp对/usr/bin/locate命令拥有执行权限

6、执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组队/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库

7、命令结束,sun用户的组身份返回为sun组

示列:

​ cd /tmp/ => mkdir test => chmod g+s test => ll -d test/ =>chmod 777 test/ =>su - sun =>

​ cd /tmp/test/ =>cd /tmp/test/ => touch abc => ll

3、设定SetGID

2代表SGID

​ chmod 2755 文件名

​ chmod g+s 文件名

7、L文件特殊权限-Sticky BIT

1、SBIT粘着位作用

1、粘着位目前只对目录有效

2、普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限

3、如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件

2、设置与取消粘着位

1、设置粘着位

​ chmod 1755 目录名

​ chmod o+t 目录名

2、取消粘着位

​ chmod 777 目录名

​ chmod o-t 目录名

8、chattr 权限

1、chattr命令格式

语法:chattr [±=] [选项] 文件或目录名

​ +: 增加权限

​ -: 删除权限

​ =: 等于某权限

选项:

i 如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件
a 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除

2、查看文件系统属性

语法:lsattr 选项 文件名

选项:

-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的

9、sudo权限管理

1、sudo 权限

1、root把本来只能超级用户执行的命令赋予普通用户执行

2、sudo的操作对象是系统命令

2、sudo使用

用法: visudo #实际修改的是/etc/sudoers/文件

​ root ALL=(ALL) ALL

​ #用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

#%wheel ALL=(ALL) ALL

#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

3、授权sc用户可以重启服务器

语法:visudo

​ sun ALL=/sbin/shutdown -r now

4、普通用户执行sudo赋予的命令

语法:su - sun

​ sudo -l #查看可用的sudo 命令

​ sudo /sbin/shutdown -r now #普通用户执行sudo赋予的命令|