一、linux用户与组管理
-
什么是用户?
-
用户是操作系统提供一种安全机制
-
用户是权限的化身
-
-
为何要有用户?
1.划分权限,增强安全性
2.每启动一个进程都会与一个用户关联
进程-》用户-》权限(作用在文件身上) -
查看用户相关信息
[root@localhost ~]# id #查看当前用户
[root@localhost ~]# whoami #查看当前用户是谁
[root@localhost ~]# id egon #查看egon用户
[root@localhost ~]# who #查看当前登录的所有用户
[root@localhost ~]# ps aux |grep [s]sh #每一个进程都有其用户 -
linux系统中用户角色划分
-
linux系统中用户分为管理员和其他用户
-
管理员有最高权限
-
其他用户根据管理员的分配拥有不同权限
-
-
UID与GID
-
UID用户ID,唯一表示一个系统用户的账号,UID在系统中是唯一的,相当于一个人身份证,用户名就相当于这个人的名字 ,
-
GID组ID,如果把一个操作系统看成一家公司,UID相当于这个人的员工号,GID就是他的部门编号。
-
用户分类(约定,规范)
centos7规定:
0 超级管理员,最高权限,有极强的破坏能力
1-200 系统用户,由系统分配给系统进程使用
201-999 系统用户,用来运行安装的程序,所以此类用户无需登录系统(动态分配)
1000+ 普通常规用户,正常可以登录系统的用户,权限比较小,能执行任务有限 -
-
组的概念:
主组:用户本身所在部门
附加组:为用户添加的部门 -
用户和组的关系
一对一:一个用户可以属于一个组,用户默认就在自己的主组下
一对多:一个用户可以属于多个组,用户只有一个主组,但可以为用户添加多个附加组
多对多:多个用户可以属于多个组
-
-
超级用户
-
默认root用户,UID和GID均为0。可以操作系统中任何文件和命令,拥有最高管理权限。
-
-
总结:
-
linux系统把文件的权限分为了三类
-
1、属主对应的权限
-
2、属组对应的权限
-
3、其他对应的权限
-
-
一个用户对文件的权限扫描的优先级:
-
1、先看该用户是否是文件的属主
-
2、在1失败的情况,再看该用户是否是文件的属组
-
3、在2失败的情况,该用户属于其他人权限
-
-rw-r--r--. 1 root egon 1149 10月 28 11:51 /etc/passwd
-
-
PS:
linux/Unix是一个多用户、多任务的操作系统
windows 是一个单用户多任务操作系统
二、用户与组相关文件
和用户、组相关的文件:
-
/etc/passwd #保存用户信息的文件
-
/etc/shadow #用户密码
-
/etc/group #组文件
-
/etc/gshadow #组密码
详解如下:
-
/etc/passwd:用户信息文件
[root@zls ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
// /etc/passwd由 ':' 为分割符, 分为7个字段,每个字段的具体含义如下:
字段名称 注释说明
1.用户名称 //用户的账号名称
2.密码占位符 //存放账户的口令,暂用x表示,密码保存在/etc/shadow
3.用户的UID //用户标识号
4.用户基本组GID //组标识号
5.用户注释 //用户详细信息
6.用户家目录 //root家目录是/root普通用户家目录存在/home/username(可自定义)
7.用户登录Shell //用户登录Linux使用的shell #cat /etc/shells -
/etc/shadow:用户密码文件
[root@zls ~]# tail -1 /etc/shadow
zls1:!!:16312:0:99999:7:::
// /etc/shadow由 ':' 为分割符, 分为9个字段,每个字段的具体含义如下:
字段名称 注释说明
1.用户登陆名 //用户的账号名称
2.加密后的密码 //用户密码,这是加密过的口令(未设密码时为!!)
3.最近一次密码更改时间 //从1970年到最近一次更改密码时间之间过了多少天
4.密码最少使用几天 //密码最少使用几天才可以更改密码(0表示无限制)
5.密码最长使用几天 //密码使用多少天需要修改密码(默认99999永不过期)
6.密码到期前警告期限 //密码过期前多少天提醒用户更改密码(默认过期提前7天警告)
7.密码到期后保持活动的天数 //在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定
8.账户到期时间 //从1970年起,账户在这个日期前可使用,到期后失效。
9.标志 //保留,以备linux发展之用 -
etc/group:组文件
[root@zls ~]# head -2 /etc/group
root:x:0:
bin:x:1:bin,daemon
// /etc/group由':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组的名称
2.组的密码(存在/etc/gshadow)
3.组GID信息
4.仅显示附加成员,基本成员不显示 -
/etc/gshadow:
[root@zls ~]# head -2 /etc/gshadow
root:::
bin:::bin,daemon
// /etc/gshadow由 ':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组名称
2.组密码
3.组管理员
4.仅显示附加成员,基本成员不显示 -
/home/xxx #用户家目录
-
/etc/skel/ #用户老家的模板
[panghu@duorou ~]$ ll -a /etc/skel
总用量 24
drwxr-xr-x. 3 root root 78 10月 6 10:14 .
drwxr-xr-x. 146 root root 8192 10月 28 20:31 ..
-rw-r--r--. 1 root root 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 root root 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 root root 231 4月 1 2020 .bashrc
drwxr-xr-x. 4 root root 39 10月 6 10:14 .mozilla -
/var/spool/mail/xxx #用户邮箱文件
[panghu@duorou ~]$ ll /var/spool/mail
总用量 0
-rw-rw----. 1 chirou mail 0 10月 27 19:45 chirou
-rw-------. 1 root mail 0 10月 20 21:02 root
-rw-rw----. 1 rpc mail 0 10月 6 10:14 rpc
-rw-rw----. 1 test mail 0 9月 26 10:46 test
三、手动创建用户
-
准备用户信息
-
/etc/passwd
[root@web01 ~]# vim /etc/passwd #新加一行
[root@web01 ~]# tail -1 /etc/passwd
likui:x:1004:1004::/home/likui:/bin/bash/etc/shadow -
/etc/shadow
[root@web01 ~]# tail -1 /etc/shadow
likui:$6$ilevDH.F$eYR2qYz9yWAIWBGKwNVJN3T4QjPZ5jEgOoRxXJ8WUCXlUR.xhlMDpMTE2j3oY/QGZTZA10.Z7q1lDL9vrofAG0:18563:0:99999:7:::
[root@web01 ~]# openssl passwd -1 -salt 'i have a dream' #制作密码
Password: #输入密码
$1$i have a$UE.0R7CD7Y8Bdh/.F1SFH. #生成的密码
ps:openssl passwd 手动生成密码
语法格式 openssl passwd [option] passwd
选项如下:
-1:表示采用MD5加密算法
-salt:指定salt值,不不使用随机产生的salt。在使用加密算法进行加密时,及时密码一样,salt不一样,所计算出来的bash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。
-
-
准备组信息
-
/etc/group
[root@web01 ~]# tail -1 /etc/group
likui:x:1004:
[root@web01 ~]# tail -1 /etc/gshadow
likui:$6$Q1ywq/DXFEnMDIhP$WzKzOf0mmr4BPhUuYsQVGUFDB8ddEPrlrgLy10ToW4qgYi7xKYEof7OA0JVNwoE966uCj.aVNI5hFnoB4pLoO0:: -
/etc/gshadow
[root@aliyun ~]# vim /etc/gshadow
[root@aliyun ~]# tail -1 /etc/gshadow
ligui:!::
-
-
准备家目录
-
/home/xxx/(创建用户家目录,并且用户老家的模板/etc/skel/ 装修一下,注意权限)
[root@web01 ~]# mkdir /home/likui/
[root@web01 ~]#
[root@web01 ~]# chown likui.lilui /home/likui/
[root@web01 ~]# chmod 700 /home/likui/
[root@web01 ~]#
[root@web01 ~]# cp -ra /etc/skel/.[!.]* /home/likui/ #装饰用户
[root@web01 ~]# chown likui.likui /home/likui/.[!.]* #修改权限
-
-
准备邮箱
-
/var/spool/mail/xxx 用户邮箱文件
[root@web01 ~]# touch /var/spool/mail/likui
[root@web01 ~]# chown likui.mail /var/spool/mail/likui
[root@web01 ~]# chmod 660 /var/spool/mail/likui -
-
激活账号的登录
[root@aliyun ~]# ssh ;ligui@127.0.0.1
egon@127.0.0.1's password:
Last login: Mon Aug 10 23:18:55 2020 from 127.0.0.1
Welcome to Alibaba Cloud Elastic Compute Service !
[egon@aliyun ~]$ whoami
ligui
四、用户管理命令
用户管理命令汇总
-
useradd #添加用户
-
userdel #删除用户
-
usermod #修改用户信息
详解如下:
-
创建用户
[root@localhost ~]# useradd biubiu
-
查看用户
[root@localhost ~]# id biubiu
uid=1011(biubiu) gid=1011(biubiu) 组=1011(biubiu)
[root@localhost ~]# who
[root@localhost ~]# whoami
PS:当创建一个用户时。如果没有指定用户的主组,将会创建一个同名的组作为用户的主组。 -
删除用户
[root@localhost ~]# userdel user01 #删除用户user01,但不删除用户家目录和mail
[root@localhost ~]# userdel -r user01 #要想删彻底,加-r选项
-
useradd 命令详解:创界用户的同时指定选项
'-u' 指定用户的UID,不能和现有ID冲突
'-g' 指定用户用户所属的主组
'-G' 指定用户附加组,用逗号隔开添加多个附加组
'-d' 指定用户家目录
'-c' 指定用户注释信息
'-M' 不建立家目录
'-s' 指定用户默认shell
'-r' 创建系统账户, 没有家目录
//创建zls用户,指定UID5001,基本组students 附加组sa,dba 注释信息:one newB user, 登陆的shell:/bin/bash
[root@zls ~]# groupadd sa
[root@zls ~]# groupadd dba
[root@zls ~]# groupadd students
[root@zls ~]# useradd -u 5001 -g students -G sa,dba -c "one newB user" -d /home/zls -s /bin/bash zls
[root@zls ~]# tail -1 /etc/passwd
zls:x:5001:505:one newB user:/home/zls:/bin/bash
//创建系统用户,不建立用户家目录 指定nologin使其用户无法登陆系统
[root@zls ~]# useradd mysql -M -s /sbin/nologin
[root@zls ~]# useradd -r dba -s /sbin/nologin -
usermod命令详解
'-u' 修改用户的UID
'-g' 修改用户所属的基本组GID
'-G' 修改用户附加组, 使用逗号隔开多个附加组, 覆盖原有的附加组
'-a' 追加更多的附加组, 必须和-G使用: -aG 追加附加组
'-m' 家目录迁移, 必须和-d一起使用, 移动用户的家目录到新的位置
'-d' 指定用户的家目录新位置
'-c' 修改用户的注释信息
'-s' 更改用户使用的shell
'-l' 更改用户登录名
'-L' 锁定用户
'-U' 解锁用户
[root@zls ~]# grep "zls" /etc/passwd
zls:x:5001:505:2018 new student:/home/zls:/bin/bash
//修改用户uid,gid, 附加组, 注释信息, 用户家目录, 登录shell, 登录名
//建立组,指定组gid
[root@zls ~]# groupadd -g 5008 network_sa
[root@zls ~]# groupadd -g 5009 devops
//修改用户属性
[root@zls ~]# usermod -u 6001 -g5008 -a -G 5009 -c "2019 new student" -md /zls -s /bin/sh -l zls_zls zls
//检查是否修改成功
[root@zls ~]# grep "zls" /etc/passwd
zls_zls:x:6001:5008:2019 new student:/zls:/bin/sh
[root@zls ~]# id zls_zls
uid=6001(zls_zls) gid=5008(network_sa) groups=5008(network_sa),503(sa),504(dba),5009(devops)
//验证家目录
[root@zls ~]# ll -d /zls
drwx------. 2 zls_zls network_sa 4096 2014-09-23 00:13 /zls
锁定用户
[root@zls ~]# echo "123" |passwd --stdin zls_zls
[root@zls ~]# usermod -L zls_zls
//无法正常登录系统
➜ ~ ssh zls_zls@192.168.56.11
zls_zls@192.168.56.11's password:
Permission denied, please try again.
解锁用户
[root@zls ~]# usermod -U zls_zls
//正常登录系统
➜