第6章 Linux下的账号与权限管理
用户和组的相关文件
用户的添加/删除/更改
组的添加/删除/更改
su和sudo
用户和组账号的概述
Linux基于用户身份对资源访问进行控制
⚫ 用户帐号:
◆ 超级用户root
◆ 普通用户
◆ 程序用户(虚拟用户)
⚫ 组帐号:
◆ 基本组(私有组)
◆ 附加组(公共组)
⚫ UID和GID:
◆ UID(User Identity,用户标识号)
◆ GID(Group Identify,组标识号)
Linux下的用户角色
在Linux系统下用户的角色不同,权限和所能完成的任务也不同,用户角色是通过UID 来识别的,注意:在Linux下要注意root用户的UID的唯一性。
⚫ Root
◆ 系统管理员超级用户,系统唯一,可以登陆系统,可以操作任何文件和命令,拥有最高权限,UID值为0。
⚫ 虚拟用户
◆ 与真实的用户分开来,这类用户不能登陆系统,但是在使用某些服务的时候使用,这类用户是系统默认添加的。
⚫ 普通用户
◆ 这类用户可以登陆系统,但是只能操作自己家目录的内容,受限账户,这类用户都是管理员自行添加的。
用户相关文件
⚫ 用户账号文件
/etc /shadow
⚫ 用户密码文件(影子文件)
/etc /login.defs
⚫ 用户默认属性文件
/etc /skel /
⚫ 用户环境目录
/etc/passwd文件
用户账号信息文件,记录所有用户记录,每行表示一个用户信息,7个字段都有各自的
含义
⚫ 字段1:用户帐号的名称
⚫ 字段2:用户密码字串或者密码占位符“x”
⚫ 字段3:用户帐号的UID号
⚫ 字段4:所属基本组帐号的GID号
⚫ 字段5:用户全名
⚫ 字段6:宿主目录
⚫ 字段7:登录Shell信息
/etc/shadow文件
用户账户的影子文件,包含用户的加密密码和其他信息,两个文件互补来记录用户信息, 这个文件只有root可以读取和操作
⚫ 字段1:用户帐号的名称
⚫ 字段2:加密的密码字串信息
⚫ 字段3:上次修改密码的时间
⚫ 字段4:密码的最短有效天数,默认值为0
⚫ 字段5:密码的最长有效天数,默认值为99999
⚫ 字段6:提前多少天警告用户口令将过期,默认值为7
⚫ 字段7:在密码过期之后多少天禁用此用户
⚫ 字段8:帐号失效时间,默认值为空
⚫ 字段9:保留字段(未使用)
/etc/login.defs文件
默认创建用户的属性设置
⚫ MAIL_DIR 邮件存放目录
⚫ PASS_MAX_DAYS 密码有效期最长时间
⚫ PASS_MIN_DAYS 密码有效期最短时间
⚫ PASS_MIN_LEN 密码最小长度
⚫ PASS_WARN_AGE 密码到期提示时间
⚫ UID_MIN UID最小值
⚫ UID_MAX UID最大值
⚫ GID_MIN GID最小值
⚫ GID_MAX GID最大值
⚫ CREATE_HOME 是否创建家目录
⚫ UMASK UMASK值
⚫ USERGROUPS_ENAB 当删除用户后,同名组中不在存在用户的时候,是否删除该组
拓展:
查询有效配置
/etc/skel/目录
存放用户启动文件的目录,类似与windows的用户配置文件目录,为用户提供用户环 境,该目录下的文件全部为隐藏文件。在添加用户时会从该目录下复制文件到用户的 家目录下,相当与统一的登陆模板。
用户的添加
添加默认用户并查看
⚫ useradd 用户名
⚫ passwd 用户名
[root@centos7 ~]# useradd jack
[root@centos7 ~]# passwd jack
更改用户 jack 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos7 ~]# tail -1 jack
tail: 无法打开"jack" 读取数据: 没有那个文件或目录
[root@centos7 ~]# tail -1 /etc/passwd
jack:x:1000:1000::/home/jack:/bin/bash
[root@centos7 ~]# tail -1 /etc/shadow
jack:$6$789zHfo1$sysO38kTS1FMVMAKt5DFnI/Ph6CHdh8dMwez.e9ooBAJoMLlIcYFTP./C8f2EaZs0K1g2cEhRdG2KNs8RARUc.:18185:0:99999:7:::
用户的添加
添加指定属性的用户并查看
⚫ useradd -d 用户主目录 用户名
⚫ passwd 用户名
[root@centos7 ~]# useradd -d /rose rose
[root@centos7 ~]# passwd rose
更改用户 rose 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos7 ~]# tail -1 /etc/passwd
rose:x:1001:1001::/rose:/bin/bash
例如:
指定宿主目录在根目录下
创建组并查看
创建用户
查看
到home查看是否有宿主目录
主要参数:
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
-D:变更预设值。
-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。默认值为/bin/bash。
-u:指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。
设置/更改用户口令
passwd命令
⚫ 格式:passwd [选项]... 用户名
常用命令选项
⚫ -l:锁定用户帐号
⚫ -S:查看用户帐号的状态(是否被锁定)
⚫ -u:解锁用户帐号
例如
修改密码
锁定账户
解锁
修改用户账号的属性
usermod命令
⚫ 格式:usermod [选项]... 用户名
常用命令选项
⚫ -l:更改用户帐号的登录名称
◆ usermod -l 新用户名 原用户名
⚫ -L:锁定用户账户
⚫ -U:解锁用户账户
例如:
锁定
解锁用户
Usermod更改用户名
先添加lisi
查看
宿主目录不变
拓展:
另一个用法
更改目录数组
先创建一个组
显示jack
查看jakc基本组
给jack添加附加组tech
查看jack所属的组
还可以查看tech
删除用户帐号
userdel命令
⚫ 格式:userdel [-r] 用户名
⚫ 添加 -r 选项时,表示连用户的宿主目录一并删除
删除rose用户
删除rose用户及其的宿主目录
使用 -r
组的相关文件
⚫ 组账号文件
/etc/group
⚫ 组密码文件
/etc/gshadow
添加组帐号
groupadd命令
⚫ 格式:groupadd 组帐号名
gpasswd命令
⚫ 用途:设置组帐号密码(极少用)、添加/删除组成员
⚫ 格式:gpasswd [选项]... 组帐号名
⚫ 常用命令选项
◆ -a:向组内添加一个用户
◆ -d:从组内删除一个用户成员
例如:
(1)
从testgroup删除jack
gpasswd -d jack testgroup
(2)
将jack添加到testgroup
检查
groupdel命令
⚫ 格式:groupdel 组帐号名
例如:
删除组
groupdel testgroup
查看验证
grep testgroup
用户和组帐号查询
id命令
⚫ 用途:查询用户身份标识
⚫ 格式:id [用户名]
groups命令
⚫ 用途:查询用户所属的组
⚫ 格式:groups [用户名]
finger命令
⚫ 用途:查询用户帐号的详细信息
⚫ 格式:finger [-l] [用户名]
例如:
finger jack
users、who命令
⚫ 用途:查询已登录到主机的用户信息
普通用户权限的提升
sudo 命令 选项 普通用户使用特权用户命令
⚫注意:命令为绝对路径
⚫visudo 添加一行
root ALL=(ALL) ALL
jack ALL=(ALL) /usr/sbin/fdisk
◆ sudo 命令
[jack@centos7 ~]$ which fdisk /usr/sbin/fdisk
[jack@centos7 ~]$ sudo /usr/sbin/fdisk -l
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节 ……
[jack@centos7 ~]$ sudo –l //查看授权的指令
拓展:
切换用户的命令
Su 切换
Su jack
另一种方式
Su - jack
例如:
在root:
Which fdisk
Visudo:
root ALL=(ALL) ALL
用户名 ALL=(ALL) /usr/sbin/fdisk
sudo+授权命令
在jack:
Su -jack
Sudo -l
Sudo fdisk -l