随堂练习 用户和组的权限管理

用户信息文件

[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

从左往右,分七个字段,均用冒号分隔开

列    说明

root    用户名,即用户登录的名称

x     基于安全考虑,密码转移到了/etc/shadow中,此处 x 的表示此用户的密码从 /etc/shadow 获得

0     此处的0 表示这个用户的编号,即UID;每个用户都有一个唯一的UID,默认root 的UID 为0 ,新创建的第一个用户默认UID 为1000,后面的新建的用户UID 按1001,1002,...依次分配

0     此处的 0 表示这个用户所属的主组id 号码,即GID

root    表示该用户的说明信息

/root    此处表示用户的家目录,或者初始化工作目录,ROOT 用户的家目录默认在/root。普通用户的家目录,默认在/home/username

/bin/bash  最后的字段代表用户默认使用shell 类型,root 和普通用户默认使用的是 /bin/bash

其中 UID 和 GID 的编号由系统自动分配的范围是 0 - 65535

注意:

1)root 用户是作为超级用户或超级管理,对整个Linux系统具有最高权限;当然在Linux判断是否是超级用户,不是看用户名是否为root,而是看其UID 是否为 0,换句话说用户的UID是 0, 则其就是超级用户

2)CentOS6中默认是将 1 - 499作为系统用户的 UID ;而 CentOS7 以上的版本是将 1 - 999 作为系统用的 UID,剩下的 UID 则分配给普通用户使用

/etc/shadow 格式(分为9 段,以冒号隔开)

[root@localhost ~]# cat /etc/shadow
root:$6$beCVCBuPw1E/DM4U$WhNxLB4GIFOPntAsVrf2Hyuyksq6N5lamkhR7Vvn4NBgJLWZTSFee70Joeyzq8R.KEP6oq1SQrTKxE87pPZlK0::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::

列              说明

root            此处的用户名代表这行密码是属于 /etc/passwd 文件中对应的同名用户的密码信息

$6$beCVCBuPw1E/DM...    这行内容同时使用三个 $ 符号分隔成三字段。第一段代表加密使用的单向加密算法,使用数字表示,1 表示 MD5算法,6 表示 SHA512 算法。第二个代表加密算法使用的随机因子,我们一般称为盐(salt),对加密加密时,使用 salt,可以避免相同的密码,加密后值一样。salt 和加密算法一起构成了密码最终的加密方式。第三个内容代表加密后最终结果,称为密文,由于是单向加密,根据加密算法和盐后是很难反向推导出密码的明文的,所以比较安全的,如果以感叹号“!” 开头的密码字段表示密码已被锁定

17834           此处的数字,表示修改密码的日期时间,具体的数值代表1970 年 1 月 1日 到修改密码的那天的天数  (我这里是 空,表示没有)

0              再次修改密码需要经过的天数,如果为 0 代表随时可以修改密码

99999            本次修改密码后,再经过对手天后密码将过期

7               密码过期前发出提示消息的时间, 7 代表,在密码过期前 7 天开始,给用户发生提示信息,要求用户更改密码

              密码过期后还可以继续使用的天数,超过此时间,用户将不可登录,此项为空,表示密码过期后仍可登录

              从 1970 年 1 月 1 日到用户帐号被禁用的天数。在这个时间以后用户将不能登录,此项为空,表示此用户帐号永久有效

               保留内容,为以后新增功能预留的位置

用户组信息文件

/etc/group 格式

[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:

列         说明

root      代表组名称

x        代表组管理密码,x 为占位符,具体密码的密文在 /etc/gshadow 文件中保存

0        代表组编号,即 GID

       代表用户,属于此附加组的用户列表,多个用户之间使用逗号进行分隔

/etc/gshadow 格式

[root@localhost ~]# cat /etc/gshadow
root:::
bin:::
daemon:::

列         说明

root      组名称

         组管理密码,以感叹号 ! 开头的密码字段表示密码已被锁定

         该管理组的管理员用户帐号,多个用户之间用“,”分隔

       属于此附加组的用户帐号列表,多个用户之间用“,”分隔

创建用户和用户组

useradd 语法格式

useradd [OPTIONS] LOGIN

选项          说明

-u UID         指定创建用户的 UID

-o           配合 -u 选项, 不会检查 UID 的唯一性

-g GID         指明用户所属主要组,可为组的名称,也可以是 GID

-c COMMENT        用户的注释信息

-d HOME_DIR        以指定的路径为家目录

-s SHELL        指明用户的默认 shell 程序,可用列表在 /etc/shells 文件中

-G GROUP1[,GROUP2]    为用户指明附加组,组须事先存在

-N            不创建和用户同名的私用组做主组

-r             创建系统用户 CentOS6:ID< 500,CentOS7:ID< 1000

-m           创建家目录,一般用于系统用户

-M            不创建家目录,一般用于非系统用户

/etc/default/useradd  文件内容说明

[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100          # 在useradd 使用 -N 或 /etc/login.defs 中USERGROUPS——ENAB=no 时,表示创建用户时不创建同用户名的主组,而使用此处指定的组作为主组

HOME=/home      # 把用户的家目录建在 /home 中

INACTIVE=-1    # 是否启用帐号过期设置, -1 表示不启用
EXPIRE=      # 帐号过期时间,不设置表示不启用
SHELL=/bin/bash  # 新建用户默认的 shell 类型

SKEL=/etc/skel    # 指定模板目录,新建用户时会自动复制此目录作为新建用户的家目录内容
CREATE_MAIL_SPOOL=yes   #是否创建用户 Mail 文件

创建组

groupadd 语法格式

groupadd [options] GROUP

选项              说明

-f ,--force          当组已经存在时,返回成功,使用此选项将忽略 -g 选项

-g,--gid GID         指定创建组的 GID

-h,--help            显示帮助

-K,--key KEY=VALUE       使用指定值,覆盖 /etc/login.defs 的默认值

-o,--non-unique         允许使用已存在的 GID 创建新的组

-p,--password PASSWORD   使用加密的密码

-r,--system          创建系统组

修改用户信息

usermod 语法格式

usermod [options] LOGIN

选项              说明

-c,--comment COMMENT    修改用户的描述信息,即修改 /etc/passwd 文件中的第 5 个字段

-d, --home HOME_DIR      修改用户家目录

-e,--expiredate EXPIRE_DATE  设置帐号的有效期,即修改 /etc/shadow 文件第 8 个字段,EXPIRE_DATE 要格式为 YYYY-MM-DD

-f,--inactive INACTIVE      指定天数,即修改 /etc/shadow 文件中的第 7 个字段

-g,--gid GROUP          修改为指定主组

-G,--groups GROUPS       修改附属组

-a,--append          配合 -G 选项, 增加附属组

-h, --help            查看帮助

-l, --login NEW_LOGIN      修改用户名

-L,--lock            锁定用户

-m, --move-home        配合 -d 选项,移动家目录数据到新的家目录

-o,--non-unique         允许使用重复的 UID

-p,--password PASSWORD    使用加密的密码

-s,--shell SHELL         修改使用新的 shell 类型

-u,--uid UID           修改 UID

-U,--unlock            解锁用户

passwd 格式

passwd [option...] <accountName>

选项            说明

--stdin  使用管道时传入密码的方式,常用于 shell 脚本

-l     同 usermod 命令的 -L 命令效果一样,在shadow 的密码前加上叹号

-u    同 usermod 命令的 -U 命令效果一样,取消 -l 命令添加的叹号

-e    修改 shadow 第三个内容为 0 ,用户登录时要求重置密码

-n    修改密码后多少天内不能修改,shadow 文件的第 4 个 内容

-x    修改密码的最长游戏的天数,shadow 文件的第 5 个内容

-w    修改密码过期前警告的天数,shadow 文件的第 6 个内容

-i      修改密码失效后还可以使用的宽限时间,shadow 文件第 7 个内容

-S    显示出用户的密码的相关信息

修改用户信息

chage 命令格式

chage [options] LOGIN

选项      说明

-d    修改 shadow 文件的第三个内容,格式为 YYYY-MM-DD

-m      修改 shadow 文件的第四个内容,最早修改密码的天数

-M      修改 shadow 文件的第五个内容,最晚修改密码的天数

-W     修改 shadow 文件的第六个内容,密码失效前的提示天数

-I(大写字母 i )     修改 shadow 文件的第七个内容,密码失效后宽限的时间

-E    修改 shadow 文件的第八个内容,格式为 YYYY-MM-DD

修改组信息

groupmod 命令格式

groupmod [options] GROUP

选项            说明

-g,--gid GID      修改组的 GID

-h,--help         查看帮助

-n,--new-name NEW_GROUP  修改组名

-o,--non-unique     允许组的 GID 不唯一

-p,--password PASSWORD    设置组的加密密码

组管理命令

groupmems 语法格式

groupmems [options] [action]

选项            说明

-g,--group groupname    指定要操作修改那个组

-a, --add username      指定添加一个组的成员

-l,list            列出所有的组成员

-d, --delete username      指定删除一个组的成员

-p,--purge          清空所有的用户

-h, --help          帮助

gpasswd 命令格式

gpasswd [option] GROUP

选项              说明

-a,--add USER        添加一个用户到该组中

-d,--delete USER       将一个用户从该组中删除

-r,--delete-password       取消组的密码

-A,--administrator ADMIN...    设置组的管理员

-M,--members USER...      设置组的成员

-h,--help           查看帮助

删除用户和用户组

userdel 用户名

groupdel 组

使用 su 命令进行身份切换

su 命令格式

su [options] [-] [USER [arg]...]

选项                说明

-m,-p,--preserve-environment    保留环境变量,不重设 HOME,SHELL,USER 和 LOGNAME 变量

-g,--group <group>          指定主要组

-G,--supp-group <group>        指定附属组

-,-l,--login               开启 login shell ,如果后面没有指定用户,默认为root 执行命令

-c,--command <command>        执行命令

-s,--shell <shell>            运行指定的 shell

-h,help               帮助

-v, --version               查看版本

文件权限管理

[root@localhost ~]# ls -l
total 8
-rw-------. 1  root root 1457 Jun 29 17:12 anaconda-ks.cfg
-rwxr-xr-x. 1 root root 813 Jun 29 17:22 netifname_eth0.sh
drwxr-xr-x 2 root root 6 Jul 1 16:12 test
-rw-r--r-- 1    root root 0 Jul 1 11:39 test-2020-06-30.log

每个文件的左边一共有 10 个字符,第一个代表文件类型,比如 - 代表普通文件,d 代表目录文件,从第二个到第十个字符开始就是文件权限的描述信息。

以 test 文件为例,文件属性信息中有root root 两项,从左往右分别代表文件的所有者为root,和文件所属组为 root,其他用户共三类用户

r  (4) 对文件表示可否可读取内容,对目录表示可以使用 ls 命令查看目录中的文件列表

w (2)   对文件表示可否修改文件内容,对目录表示可以在目录中创建文件,删除文件

x (1)   对文件表示可否执行,对目录表示是否可以切换至目录中,访问目录内的文件

文件的属主和属组

chown 命令格式

chown [option]... [owner] [:[group]] file...

选项          说明

-h          后面的文件如果是链接文件,只针对链接文件设置,而非默认对链接文件指向的文件

-R          对目录中的所有文件进行递归设置

--reference=RFILE    参考 RFILE 的文件权限设置权限

文件的默认权限

umask 语法格式

umask [option] [mode]

选项     说明

-S    以模式形式,而非默认的数字

-p    打印 umask 命令和值,可作为输入

mode    可以是模式形式,如:u=rwx,g=rx,o=rx,也可以是数字形式,如 :0022

文件的特殊权限

SUID 特殊权限

[root@localhost ~]# ls -al /etc/shadow
----------. 1 root root 563 Jun 29 17:12 /etc/shadow

[root@localhost ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd

其中passwd 文件的属主执行权限位是 s,代表 passwd 属主可以执行,同时具有 SUID 权限

当一个程序没有可执行权限,但是设置了 SUID 权限,属主的可执行权限位显示为大写字母 S

范例

设置 SUID 权限

1)去除 SUID 权限

[root@localhost ~]# chmod u-s /bin/passwd

2)添加 SUID 权限

[root@localhost ~]# chmod u+s /bin/passwd

SGID特殊权限

1)此权限是设置在文件所属组上的执行权限位上。SGID 可以设置在 二进制文件和目录上

2)当 SGID 设置在二进制文件中时,功能和 SUID 类似,运行这个二进制程序时,运行程序时,最终得到的权限将继承这个程序的所属组的权限,而非默认的执行程序的用户本身的权限

3)当 SGID 设置在目录时,用户在这个目录中创建的新文件的属组将自动继承此目录的属组

范例

设置 SGID 权限

添加 SGID 权限

[root@localhost ~]# chmod g+s  test

设置 Sticky 特殊权限

当一个目录其他用户位有可执行权限,并设置了 Sticky 权限时,使用 t 表示,当其他权限位没有可执行权限时还设置了 Sticky 权限,则是以 T 表示

范例

1)添加 Sticky 权限

[root@localhost ~]# chmod o+t  test

2)去除 Sticky 权限

[root@localhost ~]# chmod o-t  test

3)数字法设置特殊权限

[root@localhost ~]# chmod 1755  test    # 1 表示 Sticky 权限

drwxr-xr-t 2 root root 6 Jul 1 16:12 test

4)数字法添加特殊权限

[root@localhost ~]# chmod 6755  test  # 由 SUID 的 4 和 SGID 的 2 两个特殊权限相加得到 6 的权限

文件的特殊属性

chattr 命令格式

chattr [-RVf] [-+=ia] files...

选项   说明    

-R   递归处理,将指定目录下的所有文件及子目录一并处理

-V   显示版本信息和设置的权限

-f    隐藏大部分的错误信息

-    表示去掉属性

+    表示添加属性

=    表示重设属性

i    表示不能删除,修改,重命名和创建硬链接

a    表示不能删除,重命名,和创建硬连接,但可以追加内容

lsattr 命令格式

lsattr [-RVadv] [files...]

选项  说明

-a   显示所有文件和目录,包括以“.”为名称开头字符的文件 

-d   显示目录名称,而非其内容

-R   递归处理,将指定目录下的所有文件及子目录一并处理

-v   显示文件或目录版本

-V   显示版本信息

文件的 FACL

setfacl 命令格式

setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

选项            说明

-m,--modify-acl    更改文件的访问控制列表

-M,--modify-file=file  从文件读取访问控制列表来设置

-x,--remove-file=acl  根据文件中访问控制列表移除条目

-X,--remove-file=file  从文件读取访问控制列表条目并删除

-b,--remove-all    清除 FACL

-k,--remove-default  移除默认访问控制列表

--set=acl        设定替换当前的文件访问控制列表

--set-file=file      从文件中读取访问控制列表条目设定

--mask        重新计算有效权限掩码

-n,--no-mask     不重新计算有效权限掩码

-d,--default      应用到默认访问控制列表的操作

-R,--recursive     递归操作子目录

-L,--logical      依照系统逻辑,跟随符号链接

-P,--physical     依照自然逻辑,不跟随符号链接

--restore=file      恢复访问控制列表,和 “getfacl -R” 作用相反

--test          测试模式,并不真正修改访问控制列表属性

-v,--version      显示版本并退出

-h,help        显示本帮助信息

ACL 生效和判断的顺序如下:

1)先判断访问者是否为文件所有者,如果是所有者权限生效,不再往下继续

2)判断是否是ACL 中自定义用户,如果是,对应的 ACL 生效,不再往下继续

3)判断是否是属于 ACL 自定义组,如果是,对应的 ACL 生效,不再往下继续

4)其他人

面试题

1)解释 drwx rwx rwx 中每个字符表示什么?

答:

第一段:drwx:目录文件,属主有读,写,执行权限

第二段:rwx:属组有读,写,执行权限

第三段:rwx:其他人有读,写,执行权限

2)目录权限为711,对其他人而言权限是(B

A,可执行  B,可进入  C,可读,可执行  D,可写入

3)/etc/fstab 复制到 /data/,至少需要什么权限?

答:

1)cp 命令

2)有执行权限

3)/etc/fstab    有读权限

4)/data/  写权限和执行权限   

原文地址:https://www.cnblogs.com/xuanlv-0413/p/13220734.html