系统相关
首页 > 系统相关> > Linux05-权限管理&用户组管理

Linux05-权限管理&用户组管理

作者:互联网

Day5 权限管理&用户组管理

一 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 root # 查看root用户
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 ~]#
[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
1. UID (User Identify)用户ID,唯一标识一个系统用户的帐号,uid在系统中是唯一的。uid相当于一个人的身份证,用户名就相当于这个人的名字
2. 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

root:x:0:0:root:/root:/bin/bash
第一字段:用户名(也被称为登录名);
第二字段:口令;在例子中我们看到的是一个x,其实密码
已被映射到/etc/shadow 文件中;
第三字段:UID ;请参看本文的UID的解说;
第四字段:GID;请参看本文的GID的解说;
第五字段:描述信息,可选
第六字段:用户的家目录所在位置;
第七字段:用户所用SHELL的类型
[root@localhost ~]# useradd user1
[root@localhost ~]# id user1
uid=1002(user1) gid=1003(user1) 组
=1003(user1)
[root@localhost ~]# who # 查看所有登录的用户
信息
[root@localhost ~]# whoami # 查看当前登录的用
户名

注意:当创建一个用户时,如果没有指定用户的主组,将会创建一个同名的组作为用户的主组。

练习:查看所有与用户相关的文件及目录

[root@localhost ~]# userdel user1 # 删除用户user1,但不删除用户家目录和mail
[root@localhost ~]# userdel -r user1 # 要想删彻底,加-r选项
#怎样在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 2021-04-01
 # 指定过期时间
[root@root ~]# useradd user10 -u 4000 -s
/sbin/nologin
#创建user10用户,制定UID为4000,并指定shell
[root@aliyum ~]# useradd xxx -M -s
/sbin/nologin # 创建普通用户,但是没有家目录,不能登录系统
[root@aliyum ~]# useradd -r yyy -s
/sbin/nologin # yyy属于系统用户,uid处于系统用户uid范围内
选项 功能 例子
-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,修改账号过期的日期 usermodtom -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 ~]# usermod -e 2013-02-11 user1000 # 修改过期时间
[root@root ~]# usermod -g group1 jj # 修改主组
[root@root ~]# usermod -a -G group2 jj # 修改附加组,-a添加,不加-a代表覆盖
passwd  # 默认给当前用户设定密码
passwd 用户名  # root用户可以给自己以及所有其他用户设定密码,普通用户只能设定自己的密码
echo "密码" | passwd --stdin 用户名  # 非交互式
# 补充:可以利用系统内置变量生成随机字符串来充当密码
[root@aliyum ~]# echo $RANDOM|md5sum|cut -c 1-1070ba11a74b[root@aliyum ~]#
==修改UID,SHELL==
[root@root ~]# usermod --help
[root@root ~]# useradd user10
[root@root ~]# grep 'user10'/etc/passwd user10:x:509:509::/home/user10:/bin/bash
[root@root ~]# usermod -u 2000 user10//修改用户uid
[root@root ~]# usermod -s /sbin/nologin user10 //修改用户shell
补充,-G在没有-a的情况下代表覆盖原有组
[root@root ~]# usermod -G group1,group2 user10 //把用户user10添加到组group1 group2
[root@root ~]# usermod -G group3,group4 user10 //把用户user10添加到组group3group4中,此时group3,group4会覆盖掉之前添加的group1,group2
==密码锁定,解锁==
[root@root ~]# useradd user10
[root@root ~]# passwd user10
[root@root ~]# grep 'user10' /etc/shadow user10:$6$5uy5OdYB$N4oVgSrlsz2SfcHmOSh44AaT
/TBAM2plmOZGCPS7cIOhSu5PQjegJSp4PHKUwFsnbVjwfRv1GxrtR/SJubMeX1:18589:0:99999:7:::
[root@root ~]# usermod -L user1000 # 锁住用户
[root@root ~]# grep 'user1000' /etc/shadow user10:!$6$5uy5OdYB$N4oVgSrlsz2SfcHmOSh44AaT/TBAM2plmOZGCPS7cIOhSu5PQjegJSp4PHKUwFsnbVjwfRv1GxrtR/SJubMeX1:18589:0:99999:7:::
登录测试
[root@root ~]# usermod -U user10 # 解锁用户
[root@root ~]# grep 'user10' /etc/shadow 
user10:$6$5uy5OdYB$N4oVgSrlsz2SfcHmOSh44AaT
/TBAM2plmOZGCPS7cIOhSu5PQjegJSp4PHKUwFsnbVjwfRv1GxrtR/SJubMeX1:18589:0:99999:7:::
登录测试
==设置账号过期==
[root@root ~]# date
Mon Aug 10 22:49:12 CST 2020
[root@root ~]# usermod -e 2020-11-11 user1000
[root@root ~]# grep 'user1000' /etc/shadow
user1000:$6$WLHLI8zV$0jVjYsQig.jPNrcikI.R8GsgXPaSnlzslEmsRV1Nyb7FUr9Ls6RosWtHsf3LPio7PgM80raOqlWzd/lGn5fN71:18484:0:99999:7::18577:
登录测试
==useradd 命令参考的文件==
1. /etc/login.defs
2. /etc/default/useradd # 可以使用命令 useradd -D查看
3. /etc/skel/* # 用户的初始配置文件
useradd创建用户时,对于未指定的选项(-u、-g等
等),会以/etc/login.defs、/etc/default/useradd两个配置文件中的配置作为参照物
#配置文件/etc/login.defs详解
[root@egon ~]# grep -Ev "^#|^$"/etc/login.defs MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999     #密码最大有效期
PASS_MIN_DAYS 0       #两次修改密码的最小间隔时间
PASS_MIN_LEN 5       #密码最小长度,对于root无效
PASS_WARN_AGE 7       #密码过期前多少天开始提示
UID_MIN 1000       #用户ID的最小值
UID_MAX 60000       #用户ID的最大值
SYS_UID_MIN 201       #系统用户ID的最小值
SYS_UID_MAX 999       #系统用户ID的最大值
GID_MIN 1000       #组ID的最小值
GID_MAX 60000       #组ID的最大值
SYS_GID_MIN 201       #系统用户组ID的最小值
SYS_GID_MAX 999       #系统用户组ID的最大值
CREATE_HOME yes       #使用useradd的时候是可以创建用户家目录
UMASK 077         #创建家目录时umask的默认控制权限
USERGROUPS_ENAB yes     #删除用户的时候是否同时删除用户组
ENCRYPT_METHOD SHA512   #密码加密规则
#配置文件/etc/default/useradd详解
[root@egon ~]# cat /etc/default/useradd GROUP=100         #依赖于/etc/login.defs的USERGRUUPS_ENAB参数,如果为no,则在此处控制
HOME=/home         #把用户的家目录建在/home中。
INACTIVE=-1       #是否启用账号过期停权,-1表示不启用。
EXPIRE=         #账号终止日期,不设置表示不启用。
SHELL=/bin/bash     #新用户默认所有的shell类型。
SKEL=/etc/skel       #配置新用户家目录的默认文件存放路径。
CREATE_MAIL_SPOOL=yes   #创建mail文件。
当使用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@egon ~]#     #重新连接即可恢复

三 组管理

组管理命令汇总

groupadd
groupmod
groupdel
gpasswd  # 设置组密码
newgrp  # 切换主组
参数说明:
-g:指定新建工作组的 id;
-r:创建系统工作组,系统工作组的组ID小于 500;
-K:覆盖配置文件 "/ect/login.defs";
-o:允许添加组 ID 号不唯一的工作组。
-f,--force: 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。
 
[root@aliyum ~]# groupadd gg1 #创建基本组,不指定gid
[root@aliyum ~]# tail -1 /etc/group gg1:x:2005:
[root@aliyum ~]# groupadd -g 5555 gg2 #创建基本组, 指定gid为5555
[root@aliyum ~]# tail -1 /etc/group gg2:x:5555:
[root@aliyum ~]# groupadd -r gg3 # 创建系统组,gid从201-999
[root@aliyum ~]# tail -1 /etc/group gg3:x:991:
[root@aliyum ~]#
参数:
-g <群组识别码> 设置欲使用的群组识别码。
-o 重复使用群组识别码。
-n <新群组名称> 设置欲使用的群组名称。
[root@aliyum ~]# groupmod -g 1111 gg3
[root@aliyum ~]# tail -1 /etc/group gg3:x:1111:
[root@aliyum ~]#
[root@aliyum ~]# groupmod -n new_gg3 gg3 # -n 修改组名称
[root@aliyum ~]# tail -1 /etc/group new_gg3:x:1111:
[root@aliyum ~]#
[root@aliyum ~]# useradd cm
[root@aliyum ~]# groupadd devops
[root@aliyum ~]# usermod -G devops cm
[root@aliyum ~]# id cm uid=1004(cm) gid=1004(cm) groups=1004(cm),1005(devops)
[root@aliyum ~]#
[root@aliyum ~]#
[root@aliyum ~]# groupdel devops # 附加组可以删除
[root@aliyum ~]# id cm # 查看用户,发现他的附加组没有了uid=1004(cm) gid=1004(cm) groups=1004(cm)
[root@aliyum ~]# groupdel cm # 无法删除组cm,因为组cm属于cm用户的主组
groupdel: cannot remove the primary group of user 'egon1'
[root@aliyum ~]#

对于用户来说,组是分类的
1、一类是基本组或称主组,用户只能有一个基本组,创建时可通过-g指定,如未指定则创建一个默认的组(与用户同名)

2、附加组,基本组不能满足授权要求,创建附加组,将用户加入该组,用户可以属于多个附加组,加入一个组后就拥有了该组的权限

可选项参数:
-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
-M:指定组成员和-A的用途差不多;
-r:删除密码;
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
注意:gpasswd将用户添加到组或从组中删除,只针对已存在的用户
[root@root ~]# groupadd it
[root@root ~]# gpasswd -a user07 it # 将某个用户加入到某个组
[root@root ~]# gpasswd -M user02,user03,user04 it  # 将多个用户加入到it组
[root@root ~]# gpasswd -A cm it # 指定cm为组 it的组长,除了root用户外cm用户也可以采用第一条命令往it组里添加成员
[root@root ~]# grep 'it' /etc/group
# 查看it组中的成员
it:x:505:user02,user03,user04
[root@root ~]# gpasswd -d user07 it
# 删除用户usr07从it组

我们可以为组设置密码,然后让一些非组成员的用户通过命令”newgrp 组”临时切换到组内并输入密码的方式获取用户组的权限和特性,如下

[root@localhost ~]# groupadd group1
[root@localhost ~]# gpasswd group1 正在修改 group1 组的密码
新密码:
请重新输入新密码:
[root@localhost ~]# touch /tmp/a.txt
[root@localhost ~]# ll /tmp/a.txt
-rw-r--r-- 1 root root 0 8月  10 21:01
/tmp/a.txt
[root@localhost ~]# chown .group1
/tmp/a.txt
[root@localhost ~]# !ll
ll /tmp/a.txt
-rw-r--r-- 1 root group1 0 8月  10 21:01
/tmp/a.txt
[root@localhost ~]# chmod g+w /tmp/a.txt
[root@localhost ~]# gpasswd group1
[root@localhost ~]# su - cm
上一次登录:一 8月 10 21:01:46 CST 2020pts/0上
[cm@localhost ~]$ echo "123" >> /tmp/a.txt
 # 此时没有权限
-bash: /tmp/a.txt: 权限不够
[cm@localhost ~]$ newgrp group1  # 临时切换到组group1下,拥有其权限
密码:
[cm@localhost ~]$ echo "123" >> /tmp/a.txt
[cm@localhost ~]$ cat /tmp/a.txt
123

五 手动创建用户

[root@aliyun ~]# vim /etc/passwd # 新加一行
[root@aliyun ~]# tail -1 /etc/passwd
cm1:x:2002:2002:哈哈哈:/home/cm1:/bin/bash
[root@aliyun ~]# openssl passwd -1 -salt 'i have a dream'
Password:
$1$i have a$jBGkkhpFu9WPSI1Nv.whT/
[root@aliyun ~]# vim /etc/shadow
[root@aliyun ~]# tail -1 /etc/shadow
cm1:$1$i have a$jBGkkhpFu9WPSI1Nv.whT/:18303::::::

制作密码

openssl passwd 手动生成密码
引言:在Linux系统中我们要向手动生成一个密码可以采用opensll passwd来生成一个密码作为用户账号的密码。
Linux系统中的密码存放在/etc/shadow文件中,并且是以加密的方式存放的,根据加密方式的不同,所产生的加密后的密码的位数也不同。openssl passwd的作用是用来计算密码hash的,目的是
为了防止密码以明文的形式出现。语法格式: openssl passwd [option] passwd openssl passwd常用的选项如下:
-1:表示采用的是MD5加密算法。
-salt:指定salt值,不使用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。
示例:
[tom@localhost ~]$ openssl passwd -1 -salt 'i have a dream'  ##注意'i have a dream' 不是密码而是密码的盐,注意密码的盐里不要有中文
Password:  ##这里输入的是密码
$1$12345678$1qWiC4czIc07B4J8bPjfC0  ##这是生成的密文密码
$1$i have a$UEsc7yzrB5DWmTvxRpTsp.
##将生成的密码串,手动添加到/etc/shadow中就可用作
用户的登陆密码了。
[root@aliyun ~]# vim /etc/group
[root@aliyun ~]# tail -1 /etc/group
cm1:x:2002:
[root@aliyun ~]# vim /etc/gshadow
[root@aliyun ~]# tail -1 /etc/gshadow
cm1:!::
[root@aliyun ~]# mkdir /home/cm1
[root@aliyun ~]# cp -r /etc/skel/.[!.]*/home/cm1/
[root@aliyun ~]# chmod 700 /home/cm1/
[root@aliyun ~]# chown -R cm1.cm1 /home/cm1/
[root@aliyun ~]# touch /var/spool/mail/cm1
[root@aliyun ~]# chmod 660 !$ chmod 660 /var/spool/mail/cm1
[root@aliyun ~]# chown cm1.mail /var/spool/mail/cm1
[root@aliyun ~]# ssh cm1@127.0.0.1
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

标签:Linux05,管理,usermod,用户组,用户,etc,useradd,root,aliyum
来源: https://blog.csdn.net/qq_40808228/article/details/110100680