• 权限管理&用户组管理


    权限管理&用户组管理
    Linux用户介绍:

    1、什么是用户?
    用户对硬件资源的操作都需要通过操作系统,比如用户要读取硬盘中的一份关键数据
    出于安全考虑,操作系统的开发者们都专门开发了安全机制,要使用操作系统必须事先输入正确的用户名 与密码
    这便是用户的由来
    2、为何要有用户?或者说我们为何要哦创建用户?
    #主要就是权限问题
    1、系统上的每一个进程,都需要一个特定的用户运行,一个用户拥有特定的权限,该用户运行的进程与 用户权限一致
    2、通常在公司是使用普通用户管理服务器,因为root权限过大,容易出问题
    3、如何查看用户相关信息
    命令# id           #查看当前用户 
    uid=0(root) gid=0(root) groups=0(root) 
    命令# whoami       #查看当前用户是谁
    root
    命令# id egon                              # 查看egon用户 
    uid=0(root) gid=0(root) groups=0(root) 
    命令# who                                   #查看所有登录的用户
    命令# id	                           # 查看当前用户
    uid =0(root) gid=0(root) groups=0(root)
    命令#  whoami	                           # 查看当前用户是谁
    root
    命令# id egon	                           # 查看egon用户
    uid =0(root) gid=0(root) groups=0(root)
    命令# who                                   # 查看所有登录的用户
    root   pts/2   2020-10-23 15:24 (139.227.12.100)
    命令# ps aux |grep [s]sh                   #每一个进程都有其用户root
    命令# ps aux |grep [s]sh                   #每一个进程都有其用户
    root   067   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是一个多用户、多任务的操作系统
    #window s是一个单用户多任务操作系统
    多用户不是说可以创建多个用户,而是指一次可以登录多个用户
    多任务指的是可以并发执行多个进程
    回忆之前讲过的linux发展史:
    multics-》unix-》linux,所以linux是多用户的,天然支持多个连机终端,连机终端在没有互联网 的情况下是有意义的,多个人可以用不同的连机终端连到一台机器/服务器上使用,而有了互联网之后, 多个人可通过网络访问服务器,这个时候多用户or单用户的概念就不再那么重要
    

    二、用户与组相关文件

    和用户、组相关的文件:
    •/etc/passwd
    •/etc/shadow
    •/etc/group
    •/etc/gshadow
    /etc/passwd
    

    root:x:0:0:root:/root:/bin/bash
    
    第一字段:用户名(也被称为登录名);
    第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow文件中;
    第三字段:UID ;请参看本文的UID的解说;
    第四字段:GID;请参看本文的GID的解说;
    第五字段:描述信息,可选
    第六字段:用户的家目录所在位置;
    第七字段:用户所用S HEL L的类型
    

    /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.de fs文件定义中获取, PASS_MIN_DAYS 中有定义;
    第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系 统的安全性;如果是系统默认值,是在添加用户时由/etc/login.de fs文件定义中获取,在 PASS_MAX_DAYS 中定义;
    第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废; 如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE中定 义;
    第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户, 也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
    第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个 字段的值为空,帐号永久可用;www.hackdig.com
    第九字段:保留字段,目前为空,以备将来Linux发展之用;
    如果更为详细的,请用man shadow来查看帮助,您会得到更为详尽的资料;
    

    /etc/group:组文件

    /etc/gshadow:组密码文件

    /etc/skel/用户老家的模板 
    /home/xxx用户家目录 
    /var/spool/mail/xxx 用户邮箱文件
    

    三、用户管理命令

    用户管理命令汇总
    useradd	#添加用户
    userdel	#删除用户
    usermod	#修改用户信息
    
    1、	创建用户
    [root@localhost ~]# useradd userl
    
    2、	查看用户,
    [root@localhost ~]# id userl
    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
    #其他练习
    命令#  useradd user01	
    命令#  useradd user02 -u 503 usr02,指定 uid	#创建用户
    命令#  useradd user03 -d /aaa user03指定家目录	#创建用户
    命令#  useradd user04 -M 用户user04,不创建家目录	#创建
    命令#  useradd user05 -s /sbin/nologin	#创建用户并指定shell
    命令#  useradd user06 -g hr 用户,指定主组	#创建
    命令#  useradd user07 -G sale 附加组	#创建用户,指定
    命令#  useradd user08 -e 2014-04-01	#指定过期时间
    命令#  useradd user10 -u 4000 -s /sbin/nologin
    命令#  useradd xxx -M -s /sbin/nologin 不能登录系统	#创建普通用户,但是没有家目录,
    命令#  useradd -r yyy -s /sbin/nologin 户uid范围内	# yyy属于系统用户,uid处于系统用
    
    5、usermod命令
    同useradd参数基一致,只不过useradd是添加,usermod是修改
    -u	#指定要修改用户的UID
    -g	#指定要修改用户基本组
    -a	#将用户添加到补充组。仅与-G选项一起使用
    -G	#指定要修改用户附加组,使用逗号隔开多个附加组,覆盖原有的附加组
    -d	#指定要修改用户家目录
    -c	#指定要修改用户注释信息
    -s	#指定要修改用户的bash shell
    
    命令#  usermod -e 2013-02-11 user1000 # 修改过期时间
    命令#  usermod -g group1 jj # 修改主组
    命令#  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
    

    练习

     ==修改uid, shell ==
    命令# usermod --help
    命令# useradd user10
    命令# grep 'user10' /etc/passwd
    user1 0:x:509:509::/home/user1 0:/bin/bash
    命令#  usermod    -u 2000 user1 0	//修改用户uid
    命令#   usermod    -s /sbin/nologin user1 0	//修改用户shell
    
    补充,-G 在没有-a的情况下代表覆盖原有组
    命令#   usermod   -G  group1,group2 user1 0	//把用户user1 0添加到组
    group1 group2
    命令#   usermod   -G  group3,group4 user1 0	//把用户user1 0添加到组
    group3 group4中,此时group3,group4会覆盖掉之前添加的group1,group2
    == 密码锁定, 解锁==
    命令# useradd user1 000
    命令#  passwd user1 000
    命令#  grep 'user1 000 ' /etc/shadow
    user1 000:s1sHw2wcJoesPu91esBsBx1w0cGdIhnwh/	:15775:0:99999:7:::
    命令#  usermod    - 工  user1 000	# 锁住用户
    命令#  grep 'user1 000 ' /etc/shadow
    user1000:$6$WLHLl8zV$0jVjYsQig.jPNrcikI.R8GsgXPaSnlzslEmsRV1Nyb7FUr9Ls6RosWtHs f3LPio7PgM80raOqlWzd/lGn5fN71:18484:0:99999:7:::
    登录测试
    命令# usermod -U user1000 # 解锁用户
    命令# grep 'user1000' /etc/shadow
    user1000:$6$WLHLl8zV$0jVjYsQig.jPNrcikI.R8GsgXPaSnlzslEmsRV1Nyb7FUr9Ls6RosWtHs
    
    f3LPio7PgM80raOqlWzd/lGn5fN71:18484:0:99999:7:::
    登录测试
    
    ==设置账号过期==
    命令# date
    22:49:12 CST 2020
    命令# usermod -e 2020-11-11 user1000
    命令# grep 'user1000' /etc/shadow
    user1000:$6$WLHLI8zV$0jVjYsQig.jPNrcikI.R8GsgXPaSnlzslEmsRV1Nyb7FUr9Ls6RosWtHs f3LPio7PgM80raOqlWzd/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详解
    命令# 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	            #组1。的最小值
    GID_MAX 60000	            #组[。的最大值
    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 详解
    命令# 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・l$,如何解决!
    -bash-4.1$ cp -a /etc/skel/.bash* ./
    -bash-4.1$ exit                    	#重新连接即可恢复
    
    

    四、组管理

    组管理命令汇总:

    groupadd
    groupmod
    groupdel
    gpasswd #设置组密码
    newgrp #切换主组
    

    创建组

    [root@aliyum ~]# groupadd gg1 # 创建基本组,不指定 gid
    [root@aliyum ~]# tail -1 /etc/group
    gg1:x:2005:
    [root@aliyum ~]# groupadd -g 5555 gg2 # 创建基本组,扌旨定 g id为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:
    

    修改组

    [ rootaaliyum - ]# groupmod -g 1111 gg3 [ rootaaliyum - ]# tail - 1 /etc/group gg3:x:1111:
    [ rootaaliyum - ]#
    
    [ rootaaliyum - ]# groupmod  -n new gg3 gg3	# -n 修改组名称
    [ rootaaliyum - ]# tail - 1 /etc/group new gg3:x:1111:
    

    删除组

    如果一个组是一个用户的主组, 那么该组不能被删除, 删掉用户会默认一起删掉他的主组
    [ rootaaliyum - ]# useradd egon1
    [ rootaaliyum - ]# groupadd deqops
    [ rootaaliyum - ]# usermod -G deqops egon1
    [ rootaaliyum - ]# id egon1
    uid=2 004 ( egon1 ) gid=2004 ( egon1 ) groups=2004 ( egon1 ) ,555 6( deqops )
    [ rootaaliyum - ]# [ rootaaliyum - ]#
    [ rootaaliyum  - ]# groupdel  deqops	# 附加组可以删除
    

    组成员管理

    对于用户来说, 组是分类的 1 、一类是基本组或称主组, 用户只能有一个基本组, 创建时可通过﹒g指定, 如未指定则创建一个默认的组(与用户同名)
    2、附加组, 基本组不能满足授权要求, 创建附加组, 将用户加入该组, 用户可以属于多个附加组, 加入一个组后就拥有了该组的权限
    
    注意: gpasswd将用户添加到组或从组中删除, 只针对已存在的用户
    命令#  gpasswd  -a user07  it	                # 将某个用户加入到某个组
    命令#  gpasswd  -M user02,user03,user04 it	# 将多个用户加入到it组
    命令#  grep   'it '  /etc/group                  #查看it组中的成员
    it:x:505:user02,user03,user04
    命令#  gpasswd -d user07 it                     #删除用户usr07从it组
    
    我们可以为组设置密码, 然后让一些非组成员的用户通过命令"newgrp 组"临时切换到组内并输入密码的方式获取用户组的权限和特性, 如下
    命令# groupadd group1 
    命令# gpasswd group1 正在修改 group1 组的密码
    新密码:
    请重新输入新密码:
    命令# touch /tmp/a.txt
    命令# ll /tmp/a .txt
    -rw-r--r--  1  root  root 0  8月	10 21:01 /tmp/a.txt
    命令# chown .group1 /tmp/a.txt
    命令# !ll ll /tmp/a .txt
    -rw-r--r--  1   root  group1  0 8月	10 21:01 /tmp/a.txt
    命令# chmod g+w /tmp/a.txt
    命令# gpasswd group1
    
    命令# su - egon
    
    上一次登录:一8月 10 21:01:46 CST 2020pts/0 上
    命令egon# echo 123 >> /tmp/a.txt # 此时没有权限
    -bash: /tmp/a.txt: 权限不够
    命令egon# newgrp group1 #临时切换到组g roup1下,拥有其权限
    密码:
    命令egon#  echo 123 >> /tmo/a.txt
    命令egon#  cat tmp/a.txt
    123
    

    五、手动创建用户

    1、/etc/passwd
    命令# vim /etc/passwd # 新加——行
    [命令# tail -1 /etc/passwd egon:x:2002 :2002 :哈哈哈:/home/egon:/bin/bash
    
    2、/etc/shadow
    命令# openssl passwd -1 -salt 'i have a dream
    Password:
    $1$i have a$jBGkkhpFu9WPSI1Nv.whT/
    命令# vim /etc/shadow
    命令# tail -1 /etc/shadow
    egon:$1$i have a$jBGkkhpFu9WPSI1Nv.whT/:18303::::::
    
    制作密码
    openssl passwd手动生成密码
    引言:在Linux系统中我们要向手动生成一个密码可以采用o pensll passwd来生成一个密码作为用户账号 的密码。Linux系统中的密码存放在/etc/shadow文件中,并且是以加密的方式存放的,根据加密方式的 不同,所产生的加密后的密码的位数也不同。
    openssl passwd的作用是用来计算密码hash的,目的是为了防止密码以明文的形式出现。
    语法格式: openssl passwd [option] passwd
    openssl passwd常用的选项如下:
    -1:表示采用的是MD5加密算法。b dxxxxxxxxxxxxxx
    -salt:指定salt值,不使用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一 样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为 8字节的字符串。
    
    示例:
    命令# openssl passwd -1 -salt 'i have a dream' ##注意'i have a dream'不是密码而是密码的盐,注意密码的盐里不要有中文
    Password:	                        ##这里输入的是密码
    $1$12 345678$1qWiC4czIc07B4J8bPjfC0	## 这是生成的密文密码
    ##将生成的密码串,手动添加到/etc/shadow中就可用作用户的登陆密码了。
    
    
    3、/etc/group
    命令# vim /etc/group
    命令# tail -1 /etc/group
    egon:x:2002:
    
    4、/etc/gshadow
    命令# vim /etc/gshadow
    命令# tail -1 /etc/gshadow egon:!::
    5、创建用户家目录,并用用户老家的模板/etc/skel/装修一下,
    注意权限
    命令# mkdir
    /home/egon
    /etc/skel/.[!.]* /home/egon/
    命令# chmod
    700
    /home/egon/
    命令# chown -R egon.egon /home/egon/
    
    6、/var/spool/mail/xxx 用户邮箱文件
    命令# touch /var/spool/mail/egon
    命令# chmod 660 !$
    chmod 660 /var/spool/mail/egon
    命令# chown egon.mail /var/spool/mail/egon
    
    测试账号的登录
    命令# ssh egon@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 !
    命令# whoami
    egon
    
    
    
  • 相关阅读:
    Java 常提到的自然序(Natural Ordering)
    设计模式(三)行为模式
    设计模式(二)结构模式
    设计模式(一)建造者模式
    设计模式的概念以及面向对象设计原则
    Java源码 HashMap<K,V>
    mybatis注解使用
    spring整合mybatis
    数据库中的表批量映射为对象
    返回用户提交的图像工具类
  • 原文地址:https://www.cnblogs.com/qiukangle/p/13971473.html
Copyright © 2020-2023  润新知