权限管理-用户组管理
1. Linux用户介绍
1. 用户的概念
用户对硬件资源的操作都需要通过操作系统,比如用户要读取硬盘中的一份关键数据,出于安全考虑,操作系统的开发者们都专门开发了安全机制,要使用操作系统必须事先输入正确的用户名与密码,这便是用户的由来
2. 创建用户的目的
1 . 系统上的每一个进程,都需要一个特定的用户运行
一个用户拥有特定的权限,该用户运行的进程与用户权限一致
2 . 通常在公司是使用普通用户管理服务器,因为root权限过大,容易出问题
3. 查看用户相关信息
[ root@aliyum ~ ]
uid= 0 ( root) gid= 0 ( root) groups= 0 ( root)
[ root@aliyum ~ ]
root
[ root@aliyum ~ ]
uid= 0 ( root) gid= 0 ( root) groups= 0 ( root)
[ root@aliyum ~ ]
root pts/ 2 2020 - 10 - 23 15 : 24
( 139.227 .12 .100 )
[ root@aliyum ~ ]
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识别的
用户系统帐号的名称(如lee)其实给管理员看的,linux系统能够识别的仅仅是UID和GID这样的数字
1 . UID (User Identify)用户ID
唯一标识一个系统用户的帐号,uid在系统中是唯一的
uid相当于一个人的身份证,用户名就相当于这个人的名字
2 . GID (Group Identify)组ID
如果把一个操作系统当成一家公司,uid相当于这个人的员工号,gid相当于他的部门编号
uid: 0 由超级用户或具备超级用户权限的用户创建的用户(贫民老百姓,大臣,布衣/ bin / bash)
uid: 1 ~ 499 系统虚拟用户 存在满足文件或服务启动的需要 一般不能登录
uid: 500 - 65535 普通用户
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单用户的概念就不再那么重要
'''
多用户不是说可以创建多个用户,而是指一次可以登录多个
用户多任务指的是可以并发执行多个进程
2. 用户与组相关文件
/ etc/ passwd
/ etc/ shadow
/ etc/ group
/ etc/ gshadow
1. /etc/passwd
root: x: 0 : 0 : root: / root: / bin / bash
第一字段
用户名( 也被称为登录名)
第二字段
口令 在例子中我们看到的是一个x,其实密码已被映射到/ etc/ shadow文件中
第三字段
UID 请参看本文的UID的解说
第四字段
GID 请参看本文的GID的解说
第五字段
描述信息,可选
第六字段
用户的家目录所在位置
第七字段
用户所用SHELL的类型
2. /etc/shadow
small_egon: 1VE. Mq2Xf$2c9Qi7EQ9JP8GKF8gH7P
B1: 13072 : 0 : 99999 : 7 : : :
big_egon: 1IPDvUhXP$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发展之用
'''
ps:
如果要了解更为详细的,请用 man shadow来查看帮助,您会得到更为详尽的资料
'''
3. /etc/group
4. /etc/gshadow
/ etc/ skel/ 用户家的模板
/ home/ xxx 用户家目录
/ var/ spool/ mail/ xxx 用户邮箱文件
3. 用户管理命令
useradd
userdel
usermod
1. 创建用户
[ root@localhost ~ ]
2. 查看用户
[ root@localhost ~ ]
uid= 1002 ( user01) gid= 1003 ( user01) 组= 1003 ( user01)
[ root@localhost ~ ]
[ root@localhost ~ ]
当创建一个用户时,如果没有指定用户的主组,将会创建一个同名的组作为用户的主组
3. 删除用户
[ root@localhost ~ ]
[ root@localhost ~ ]
4. useradd命令详解
'''useradd命令详解 创建用户的同时指定选项'''
1 . 掌握useradd命令的功能:新增一个用户
2 . 了解useradd命令的常用选项
3 . –u:指定用户的UID
4 . –g:指定用户所属的主群
–G:指定用户所属的附加群
5 . –d:指定用户的家目录
6 . –c:指定用户的备注信息
7 . –s:指定用户所用的shell
8 . - e:修改过期时间
9 . - M: 不创建家目录
10 . - r: 创建系统账户,uid处于系统用户范围内,默认就没有家目录
1 . 在系统中新增一个fox(狐狸)用户的命令
useradd fox
2 . 在系统中新增一个用户user01,属组为police以及uid为600 的命令
useradd –u 600 –g police user01
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@aliyum ~ ]
[ root@aliyum ~ ]
5. usermod命令详解
'''同useradd参数基一致,只不过useradd是添加,usermod是修改'''
- h - - help 显示此命令的帮助信息
usermod - h
- c - - comment 修改用户的描述信息
usermod root - c "admin user"
usermod - c "admin user" root
- d 修改用户的家目录(新家目录提前准备好)
usermod tom - md / opt/ tom ( 搬家)
- m 给用户搬家
- e - - expiredate 修改账号过期的日期
usermod tom - e 2019 - 05 - 20
- f - - inactive 修改密码过期后的宽限时间
usermod tom - f 8
- g 修改用户的gid值
usermod tom - g 5
- G 给用户设置新的附属组
usermod tom - G root, lp, bin
- a 将一个用户追加到指定的组中
usermod tom - a root
- l 修改用户的登录名称( 即修改用户名)
usermod tom - l tomer
- L 锁定用户( 锁定后,shadow中的密码左侧有!号)
usermod tom - L
- U 解锁用户
usermod tom - U
- o 允许使用不唯一的UID号
usermod tom - o - u 0
- p 修改加密后的密码(不是登录密码)
usermod tom - p 01
- s 修改用户登录的shell
usermod tom - s / sbin/ nologin
- u 修改用户的uid值
usermod u19 - u 999
- Z 修改用户的selinux参数
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
6. 设定与修改密码
1 . 默认给当前用户设定密码
passwd
2 . root用户可以给自己以及所有其他用户设定密码,普通用户只能设定自己的密码
passwd 用户名
3 . 非交互式
echo "密码" | passwd - - stdin 用户名
[ root@aliyum ~ ]
70ba11a74b
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
user10: x: 509 : 509 : : / home/ user10: / bin / bash
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
user10: 65uy5OdYB$N4oVgSrlsz2SfcHmOSh44AaT/
TBAM2plmOZGCPS7cIOhSu5PQjegJSp4PHKUwFsnbVjwfRv1GxrtR/
SJubMeX1: 18589 : 0 : 99999 : 7 : : :
[ root@root ~ ]
[ root@root ~ ]
user10: !65uy5OdYB$N4oVgSrlsz2SfcHmOSh44AaT/
TBAM2plmOZGCPS7cIOhSu5PQjegJSp4PHKUwFsnbVjwfRv1GxrtR/
SJubMeX1: 18589 : 0 : 99999 : 7 : : :
[ root@root ~ ]
[ root@root ~ ]
user10: 65uy5OdYB$N4oVgSrlsz2SfcHmOSh44AaT/
TBAM2plmOZGCPS7cIOhSu5PQjegJSp4PHKUwFsnbVjwfRv1GxrtR/
SJubMeX1: 18589 : 0 : 99999 : 7 : : :
[ root@root ~ ]
Mon Aug 10 22 : 49 : 12 CST 2020
[ root@root ~ ]
[ root@root ~ ]
user1000: $6 $WLHLI8zV$0jVjYsQig. jPNrcikI. R8GsgXPaSnlzslEmsRV1Nyb7FUr9Ls6RosWtHsf3LPio7PgM80raOqlWzd/ lGn5fN71: 18484 : 0 : 99999 : 7 : : 1857 7 :
1 . / etc/ login. defs
2 . / etc/ default/ useradd
3 . / etc/ skel/ *
7. 扩展阅读
useradd创建用户时,对于未指定的选项(- u、- g等等)
会以/ etc/ login. defs、/ etc/ default/ useradd两个配置文件中的配置作为参照物
[ root@lifei ~ ]
MAIL_DIR / var/ spool/ mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
[ root@lifei ~ ]
GROUP= 100
HOME= / home
INACTIVE= - 1
EXPIRE=
SHELL= / bin / bash
SKEL= / etc/ skel
CREATE_MAIL_SPOOL= yes
'''
当使用useradd创建用户时,创建的用户家目录下会存在.bash_* 环境变量相关的文件
这些环境变量文件默认从/etc/skel目录中拷贝
这个默认拷贝环境变量位置是由/etc/default/useradd配置文件中定义的
'''
在当前用户家目录下执行了rm - rf . * 命令,下次登录系统时出现- bash- 4.1 $,如何解决?
- bash- 4.1 $ cp - a / etc/ skel/ . bash* . /
- bash- 4.1 $ exit
[ root@lifei ~ ]
4. 组管理
组管理命令汇总
groupadd
groupmod
groupdel
gpasswd
newgrp
1. 创建组
- g:指定新建工作组的 id
- r:创建系统工作组,系统工作组的组ID小于500
- K:覆盖配置文件 "/ect/login.defs"
- o:允许添加组 ID 号不唯一的工作组
- f, - - force: 如果指定的组已经存在,则成功状态退出
当与 - g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即- g关闭)
[ root@aliyum ~ ]
[ root@aliyum ~ ]
gg1: x: 2005 :
[ root@aliyum ~ ]
[ root@aliyum ~ ]
gg2: x: 5555 :
[ root@aliyum ~ ]
[ root@aliyum ~ ]
gg3: x: 991 :
2. 修改组
- g < 群组识别码> 设置欲使用的群组识别码
- o 重复使用群组识别码
- n < 新群组名称> 设置欲使用的群组名称
[ root@aliyum ~ ]
[ root@aliyum ~ ]
gg3: x: 1111 :
[ root@aliyum ~ ]
[ root@aliyum ~ ]
new_gg3: x: 1111 :
3. 删除组
如果一个组是一个用户的主组,那么该组不能被删除,删掉用户会默认一起删掉他的主组
[ root@aliyum ~ ]
[ root@aliyum ~ ]
[ root@aliyum ~ ]
[ root@aliyum ~ ]
uid= 1004 ( cm) gid= 1004 ( cm) groups= 1004 ( cm) , 1005 ( devops)
[ root@aliyum ~ ]
[ root@aliyum ~ ]
uid= 1004 ( cm) gid= 1004 ( cm) groups= 1004 ( cm)
[ root@aliyum ~ ]
groupdel: cannot remove the primary group of user 'cm'
5. 组成员管理
1. 组分类
1 . 基本组或称主组
用户只能有一个基本组,创建时可通过- g指定,如未指定则创建一个默认的组( 与用户同名)
2 . 附加组
基本组不能满足授权要求,创建附加组,将用户加入该组
用户可以属于多个附加组,加入一个组后就拥有了该组的权限
- a:添加用户到组
- d:从组删除用户
- A:指定管理员
- M:指定组成员和- A的用途差不多
- r:删除密码
- R:限制用户登入组,只有组中的成员才可以用newgrp加入该组
gpasswd将用户添加到组或从组中删除,只针对已存在的用户
2. 组成员操作
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
[ root@root ~ ]
it: x: 505 : user02, user03, user04
[ root@root ~ ]
'''
我们可以为组设置密码,然后让一些非组成员的用户通过命令”newgrp 组”临时切换到组内并输入密码的方式获取用户组的权限和特性
'''
[ root@localhost ~ ]
[ root@localhost ~ ]
正在修改 group1 组的密码
新密码:
请重新输入新密码:
[ root@localhost ~ ]
[ root@localhost ~ ]
- rw- r- - r- - 1 root root 0 8 月 10 21 : 01 / tmp/ a. txt
[ root@localhost ~ ]
[ root@localhost ~ ]
ll / tmp/ a. txt
- rw- r- - r- - 1 root group1 0 8 月 10 21 : 01 / tmp/ a. txt
[ root@localhost ~ ]
[ root@localhost ~ ]
[ root@localhost ~ ]
上一次登录:一 8 月 10 21 : 01 : 46 CST 2020pts/ 0
[ cm@localhost ~ ] $ echo "123" >> / tmp/ a. txt
- bash: / tmp/ a. txt: 权限不够
[ cm@localhost ~ ] $ newgrp group1
密码:
[ cm@localhost ~ ] $ echo "123" >> / tmp/ a. txt
[ cm@localhost ~ ] $ cat / tmp/ a. txt
123
6. 手动创建用户
1. /etc/passwd
[ root@aliyun ~ ]
[ root@aliyun ~ ]
cm1: x: 2002 : 2002 : 哈哈哈: / home/ cm1: / bin / bash
2. /etc/shadow
[ root@aliyun ~ ]
Password:
$1 $i have a$jBGkkhpFu9WPSI1Nv. whT/
[ root@aliyun ~ ]
[ root@aliyun ~ ]
cm1: $1 $i have a$jBGkkhpFu9WPSI1Nv. whT/ : 18303 : : : : : :
openssl passwd 手动生成密码
在Linux系统中我们要想手动生成一个密码可以采用opensll passwd来生成一个密码作为用户账号的密码
Linux系统中的密码存放在/ etc/ shadow文件中,并且是以加密的方式存放的,根据加密方式的不同,所产生的加密后的密码的位数也不同
openssl passwd的作用是用来计算密码hash 的,目的是为了防止密码以明文的形式出现
openssl passwd [ option] passwd
- 1 表示采用的是MD5加密算法
- salt 指定salt值,不使用随机产生的salt,salt为8 字节的字符串
在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash 值也不一样
除非密码一样,salt值也一样,计算出来的hash 值才一样
[ tom@localhost ~ ] $ openssl passwd - 1 - salt 'i have a dream'
Password:
$1 $12345678 $1qWiC4czIc07B4J8bPjfC0
$1 $i have a$UEsc7yzrB5DWmTvxRpTsp.
3. /etc/group
[ root@aliyun ~ ]
[ root@aliyun ~ ]
cm1: x: 2002 :
4. /etc/gshadow
[ root@aliyun ~ ]
[ root@aliyun ~ ]
cm1: !: :
5. 创建用户家目录
[ root@aliyun ~ ]
[ root@aliyun ~ ]
/ home/ cm1/
[ root@aliyun ~ ]
[ root@aliyun ~ ]
/ home/ cm1/
6. /var/spool/mail/xxx
[ root@aliyun ~ ]
[ root@aliyun ~ ]
chmod 660 / var/ spool/ mail/ cm1
[ root@aliyun ~ ]
/ var/ spool/ mail/ cm1
7. 测试账号的登录
[ root@aliyun ~ ]
cm1@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 !
[ cm1@aliyun ~ ] $ whoami
cm1