权限管理-用户组管理
一、linux用户介绍
1、什么是用户
⽤户对硬件资源的操作都需要通过操作系统,⽐如⽤户要读取硬盘中的⼀份关键数据
出于安全考虑,操作系统的开发者们都专⻔开发了安全机制,要使⽤操作系统必须事先输⼊正确的⽤户
名与密码
这便是⽤户的由来
2、为何要有⽤户?或者说我们为何要哦创建⽤户?
主要就是权限问题
1、系统上的每⼀个进程,都需要⼀个特定的⽤户运⾏,⼀个⽤户拥有特定的权限,该⽤户运⾏的进程与
⽤户权限⼀致
2、通常在公司是使⽤普通⽤户管理服务器,因为root权限过⼤,容易出问题
3、如何查看⽤户相关信息
[root@aliyum ~]# id # 查看当前⽤户
uid=0(root) gid=0(root) groups=0(root) [root@aliyum ~] # whoami # 查看当前⽤户是谁
root
[root@aliyum ~]# id egon # 查看egon⽤户
uid=0(root) gid=0(root) groups=0(root)
[root@aliyum ~]# who # 查看所有登录的⽤户
root pts/2 2020-10-23 15:24 (139.227.12.100)
[root@aliyum ~]# ps aux |grep [s]sh # 每⼀个进程都有其⽤户
root 1067 0.0 0.2 112920 4328 ? Ss Feb15 0:04 /usr/sbin/sshd -D
root 27197 0.0 0.2 154708 5576 ? Ss 15:24 0:00 sshd:
root@pts/2
4、linux系统中⽤户⻆⾊划分
在linux系统中的⽤户分为管理员⽤户与其他⽤户
管理员⽤户拥有最⾼权限
其他⽤户根据管理员的分配拥有不同的权限
需要强调的是:
对于linux系统来说,⽤户的⻆⾊是通过UID和GID识别的;⽤户系统帐号的名称(如egon)其实给
⼈(管理员)看的,linux系统能够识别的仅仅是UID和GID这样的数字。
uid与gid
- UID (User Identify)⽤户ID,唯⼀标识⼀个系统⽤户的帐号,uid在系统中是唯⼀的。uid
相当于⼀个⼈的身份证,⽤户名就相当于这个⼈的名字 - GID (Group Identify)组ID,如果把⼀个操作系统当成⼀家公司,uid相当于这个⼈的员⼯
号,gid相当于他的部⻔编号。
centos7系统之前约定
uid: 0 由超级⽤户或具备超级⽤户权限的⽤户创建的⽤户(贫⺠⽼百姓,⼤⾂,布
⾐/bin/bash)
uid: 1~499 系统虚拟⽤户:UID范围1-499,存在满⾜⽂件或服务启动的需要。⼀般不能登录,
只是傀儡
uid: 500-65535 普通⽤户
centos7系统约定:
0 超级管理员,最⾼权限,有着极强的破坏能⼒
1~200 系统⽤户,⽤来运⾏系统⾃带的进程,默认已创建
201~999 系统⽤户,⽤来运⾏安装的程序,所以此类⽤户⽆需登录系统
1000+ 普通⽤户,正常可以登录系统的⽤户,权限⽐较⼩,能执⾏的任务有限
⽤户和组的关系:
⼀对⼀,多对⼀,⼀对多,多对多
5、超级⽤户
默认是root⽤户,其UID和GID均为0。root⽤户在每台unix/linux操作系统中都是唯⼀且真实存
在的,通过它可以登录系统,可以操作系统中任何⽂件和命令,拥有最⾼的管理权限。
举个例⼦:
- 1、操作系统=》⼀个国家
- 2、root⽤户=》国王
- 3、root⽤户的家⽬录=》皇宫
需要注意的是:
- 1、在⽣产环境中,⼀般会禁⽌root帐号通过SSH远程连接服务器(保护好皇帝),当然了,也会
更改默认的SSH端⼝(保护好皇宫),以加强系统安全。 - 2、企业⼯作中:没有特殊需求,应该尽量不要登录root⽤户进⾏操作,应该在普通⽤户下操作任
务,然后⽤sudo管理普通⽤户的权限,可以细到每个命令权限分配。 - 3、在linux系统中,uid为0的⽤户就是超级⽤户。但是通常不这么做,如果确实有必要在某⼀操
作上⽤到管理的权限的话,那就⽤sudo单独授权,也不要直接⽤uid为0的⽤户,
6、扩展阅读
Linux/Unix是⼀个多⽤户、多任务的操作系统
windows是⼀个单⽤户多任务操作系统
多⽤户不是说可以创建多个⽤户,⽽是指⼀次可以登录多个⽤户
多任务指的是可以并发执⾏多个进程
回忆之前讲过的linux发展史:
multics-》unix-》linux,所以linux是多⽤户的,天然⽀持多个连机终端,连机终端在没有互联
⽹的情况下是有意义的,多个⼈可以⽤不同的连机终端连到⼀台机器/服务器上使⽤,⽽有了互联⽹之
后,多个⼈可通过⽹络访问服务器,这个时候多⽤户or单⽤户的概念就不再那么重要
⼆、⽤户与组相关⽂件
和⽤户、组相关的⽂件:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/passwd
root❌0:0:root:/root:/bin/bash
第⼀字段:⽤户名(也被称为登录名);
第⼆字段:⼝令;在例⼦中我们看到的是⼀个x,其实密码已被映射到/etc/shadow ⽂件中;
第三字段:UID ;请参看本⽂的UID的解说;
第四字段:GID;请参看本⽂的GID的解说;
第五字段:描述信息,可选
第六字段:⽤户的家⽬录所在位置;
第七字段:⽤户所⽤SHELL的类型
/etc/shadow
small_egon:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
big_egon:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
第⼀字段:⽤户名(也被称为登录名),在/etc/shadow中,⽤户名和/etc/passwd 是相同的,这
样就把passwd 和shadow中⽤的⽤户记录联系在⼀起;这个字段是⾮空的;
第⼆字段:密码(已被加密),如果是有些⽤户在这段是x,表示这个⽤户不能登录到系统;这个字段
是⾮空的;
第三字段:上次修改⼝令的时间;这个时间是从1970年01⽉01⽇算起到最近⼀次修改⼝令的时间间隔
(天数),您可以通过passwd 来修改⽤户的密码,然后查看/etc/shadow中此字段的变化;
第四字段:两次修改⼝令间隔最少的天数;如果设置为0,则禁⽤此功能;也就是说⽤户必须经过多少
天才能修改其⼝令;此项功能⽤处不是太⼤;默认值是通过/etc/login.defs⽂件定义中获取,
PASS_MIN_DAYS 中有定义;
第五字段:两次修改⼝令间隔最多的天数;这个能增强管理员管理⽤户⼝令的时效性,应该说在增强了
系统的安全性;如果是系统默认值,是在添加⽤户时由/etc/login.defs⽂件定义中获取,在
PASS_MAX_DAYS 中定义;
第六字段:提前多少天警告⽤户⼝令将过期;当⽤户登录系统后,系统登录程序提醒⽤户⼝令将要作
废;如果是系统默认值,是在添加⽤户时由/etc/login.defs⽂件定义中获取,在PASS_WARN_AGE
中定义;
第七字段:在⼝令过期之后多少天禁⽤此⽤户;此字段表示⽤户⼝令作废多少天后,系统会禁⽤此⽤
户,也就是说系统会不能再让此⽤户登录,也不会提示⽤户过期,是完全禁⽤;
第⼋字段:⽤户过期⽇期;此字段指定了⽤户作废的天数(从1970年的1⽉1⽇开始的天数),如果这
个字段的值为空,帐号永久可⽤; www.hackdig.com
第九字段:保留字段,⽬前为空,以备将来Linux发展之⽤;
如果更为详细的,请⽤ man shadow来查看帮助,您会得到更为详尽的资料;
![](https://www.icode9.com/i/l/?n=20&i=blog/2260226/202103/2260226-20210317102539102-800662429.png)
/etc/group:组⽂件
![](https://www.icode9.com/i/l/?n=20&i=blog/2260226/202103/2260226-20210317102624230-1217847397.png)
/etc/gshadow:组密码⽂件
![](https://www.icode9.com/i/l/?n=20&i=blog/2260226/202103/2260226-20210317102634790-784215069.png)
/etc/skel/ ⽤户⽼家的模板
/home/xxx ⽤户家⽬录
/var/spool/mail/xxx ⽤户邮箱⽂件
三 ⽤户管理命令
useradd #添加⽤户
userdel #删除⽤户
usermod #修改⽤户信息
1,创建用户
[root@localhost ~]# useradd user1
2,查看用户
[root@localhost ~]# id user1
uid=1002(user1) gid=1003(user1) 组=1003(user1)
[root@localhost ~]# who # 查看所有登录的⽤户信息
[root@localhost ~]# whoami # 查看当前登录的⽤户名
注意:当创建⼀个⽤户时,如果没有指定⽤户的主组,将会创建⼀个同名的组作为⽤户的主组。
3,删除用户
[root@localhost ~]# userdel user1 # 删除⽤户user1,但不删除⽤户家⽬录和mail
[root@localhost ~]# userdel -r user1 # 要想删彻底,加-r选项
4,useradd命令详解:创建⽤户的同时指定选项
#怎样在Linux系统中添加⼀个新的⽤户账户
1) 掌握useradd命令的功能:新增⼀个⽤户。
2) 了解useradd命令的常⽤选项:
3) –u:指定⽤户的UID
4) –g:指定⽤户所属的主群
–G:指定⽤户所属的附加群
5) –d:指定⽤户的家⽬录
6) –c:指定⽤户的备注信息
7) –s:指定⽤户所⽤的shell
8) -e:修改过期时间
9) -M: 不创建家⽬录
10) -r: 创建系统账户,uid处于系统⽤户范围内,默认就没有家⽬录
#灵活应⽤useradd命令的举例:
a) 例如:在系统中新增⼀个fox(狐狸)⽤户的命令:useradd fox
b) 例如:在系统中新增⼀个⽤户user01,属组为police以及uid为600的命令:
useradd –u 600 –g police user01
# 其他练习
[root@root ~]# useradd user01
[root@root ~]# useradd user02 -u 503 # 创建⽤户usr02,指定uid
[root@root ~]# useradd user03 -d /aaa # 创建⽤户user03 指定家⽬录
[root@root ~]# useradd user04 -M # 创建⽤户user04,不创建家⽬录
[root@root ~]# useradd user05 -s /sbin/nologin # 创建⽤户并指定shell
[root@root ~]# useradd user06 -g hr # 创建⽤户,指定主组
[root@root ~]# useradd user07 -G sale # 创建⽤户,指定附加组
[root@root ~]# useradd user08 -e 2014-04-01 # 指定过期时间
[root@root ~]# useradd user10 -u 4000 -s /sbin/nologin
[root@aliyum ~]# useradd xxx -M -s /sbin/nologin # 创建普通⽤户,但是没有家⽬
录,不能登录系统
[root@aliyum ~]# useradd -r yyy -s /sbin/nologin # yyy属于系统⽤户,uid处于系
统⽤户uid范围内
5,usermod命令
同useradd参数基⼀致,只不过useradd是添加,usermod是修改
-u #指定要修改⽤户的UID
-g #指定要修改⽤户基本组
-a #将⽤户添加到补充组。仅与-G选项⼀起使⽤
-G #指定要修改⽤户附加组,使⽤逗号隔开多个附加组, 覆盖原有的附加组
-d #指定要修改⽤户家⽬录
-c #指定要修改⽤户注释信息
-s #指定要修改⽤户的bash shell
[root@root ~]# usermod -e 2013-02-11 user1000 # 修改过期时间
[root@root ~]# usermod -g group1 jj # 修改主组
[root@root ~]# usermod -a -G group2 jj # 修改附加组,-a添加,不加-a代表覆盖
其他选项
-m #将⽤户主⽬录的内容移动到新位置。如果当前主⽬录不存在,则不会创建新的主⽬录
-l #指定要修改⽤户的登陆名
-L #指定要锁定的⽤户
-U #指定要解锁的⽤户
6、设定与修改密码
passwd # 默认给当前⽤户设定密码
passwd ⽤户名 # root⽤户可以给⾃⼰以及所有其他⽤户设定密码,普通⽤户只能设定⾃⼰的密码
echo "密码" | passwd --stdin ⽤户名 # ⾮交互式
# 补充:可以利⽤系统内置变量⽣成随机字符串来充当密码
[root@aliyum ~]# echo $RANDOM|md5sum|cut -c 1-10
70ba11a74b