用户信息文件
[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/ 写权限和执行权限