1. 用户与组的关系
用户与用户组的对应关系有:一对一,一对多,多对一
一对一:即一个用户可以存在一个组中,也可以是组中唯一成员。
一对多:即一个用户可以存在多个用户组中,那么此用户具有多个组的共同权限。
多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
2. User,Group及Others
根据用户与用户组的关系,可以将权限分为三种:
所有者权限(User) 属组权限(Group) 其他人权限(Others)
-rw--r--r-- 1 root root 19 Jan 4 16:00 aaa
r: 读
w: 写
x: 执行
这里:
root用户 具备rw即读和写的权限
root用户组 具备r读的权限
其他人 具备r读的权限
3. Linux的用户管理
创建一个用户的时候,默认情况下,会为其创建一个同名的用户组。
# 查看用户信息的文件:passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bob:x:1001:1001::/home/bob:/bin/bash
bob 用户名字
x 用户密码
1001 用户ID
1001 主组ID
:: 创建用户时可以指定描述
/home/bob 用户的主目录
:/bin/bash shell程序
# /etc/passwd文件是对所有用户都可读的,因此使用shadow技术,把真正加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如x或者*
# 对于CentOS7来说,1000以内的是系统用户,如果是普通用户,用户ID是从1000开始的
# shell程序:是用户和linux内核交互的一个桥梁。默认是/bin/bash
(1) 创建用户
1. 语法:useradd [选项] {UserName}
选项:
-c 指定一段注释性描述
-d 目录 指定用户主目录,如果目录不存在,则同时使用-m选项,可以创建主目录
-g 用户组 指定用户所属的主用户组
-G 用户组,用户组 指定用户所属的附加组
-s Shell程序 指定用户的登录Shell,有一个特殊的shell程序叫nologin,如果某账户使用此shell,就表示用户不允许登录,该用户通常为伪用户。
-u 用户ID 指定用户的用户号
uid唯一,不重复
例:
# 添加用户tom
useradd tom
# 添加用户jerry,并指定主目录为/yae/jerry,主组为root,附加组为tom和adm
useradd -d /yae/jerry -g root -G tom,adm jerry
# 添加用户test1,指定shell程序为/bin/sh,用户id为80000
useradd -s /bin/sh -u 80000 test1
# 添加用户test2,指定shell程序为/sbin/nologin
useradd -s /sbin/nologin test2
2. 查看用户id
id test1
uid=1004(test1) gid=1004(test1) groups=1004(test1)
# 用户id1004,主组id1004,用户所有组
3. 保存用户组的信息
/etc/group
4. 保存shell程序
cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
# /bin/bash相当于/bin/sh的升级版
例:创建用户test5,指定shell程序为/bin/sh
useradd -s /bin/sh test5
切换到test5
su test5
/bin/sh的命令提示符:sh-4.2$
例:创建用户test6,指定shell程序为/sbin/nologin,代表用户是伪用户
useradd -s /sbin/nologin test6
useradd -d /bigdata/jerry -g root -G test1,zhangsan -u 200000 jerry
(2) 修改用户
语法:usermod [选项] {UserName}
选项同上
例:
1. 修改test1的uid为9000
usermod -u 9000 test1
2. 修改jerry的附加组为test和test1
usermod -G test,test1 jerry
3. 给jerry追加附加组
usermod -aG root,adm jerry
4. 修改test2的shell程序为/bin/bash
usermod -s /bin/bash test2
(3) 删除用户
语法:userdel [选项] {UserName}
选项:
-r 删除用户的同时删除用户的主目录
(4) 密码管理
passwd可以不跟选项、用户名,默认是修改自己的账号密码。普通用户只能修改自己的密码。普通用户修改密码时,必须满足密码安全策略。
修改他人密码,必须是root用户。管理员root用户修改他人密码时,不需要满足密码安全策略。
语法:passwd [选项] {UserName}
选项:
-l 锁定账户
-u 解锁账户
-d 删除密码
# 保存密码的文件(只有root用户可以查看)
/etc/shadow
用户名:经过加密的用户密码:从1970年1月1日到创建一共多少天:可以设置两次设置密码的间隔:密码的有效期:提示到期前七天需要修改密码
例:锁定账户(退出后切换至普通用户后不能切换锁定的账户,但从root用户切换锁定账户是可以切换成功的)
passwd -l tom
解锁账户(可以正常切换)
passwd -u tom
删除用户密码
passwd -d tom
锁定用户和删除用户密码都是可以达到不允许账户远程登录的效果。
(5) 用户身份切换 su
su {UserName} 表示切换用户后,依然停留在当前目录,不切换环境变量
su - {UserName} 表示切换用户后,去到该用户的主目录,并切换环境变量
例:比如当前是root用户,在home目录下,首先输出环境变量(变量通过$符号进行引用)
echo $PATH
当前是root的环境变量,然后切换到tom
su tom
也在home目录,且还是root的环境变量
su - tom
在用户的主目录下,且环境变量变成了tom的环境变量,此时tom用户会自动识别主目录下的bin目录的执行脚本
(6) 用户组常用命令
1. 用户组信息的查询
cat /etc/group
组的名字:组的密码:组的id:把改组看成附加组才会显示(即组内用户列表)
2. 添加、删除用户组
# 添加用户组
groupadd group1
groupadd group2
groupadd -g 1000 group3
# 修改用户组的主组
groupmod -g 3000 group3
# 查看用户组文件,能看到这三个组
cat /etc/group
# 删除用户组
groupdel group1
# 注:删除用户组时,用户组必须存在,如果有组中任意用户在使用中的话,则不能删除。
# 查看用户组文件,只能看到group2和group3
cat /etc/group
注:如果该用户组被追加了主组,是不可以删的。