zoukankan      html  css  js  c++  java
  • linux学习16 Linux用户和组管理命令演练和实战应用

    一、上集回顾

      1、bash globing,IO重定向及管道

        glob:*,?,[],[^]

        IO重定向:

          >,>>,

          2>,2>>

          &>,&>>

          >  /PATH/TO/SOMEWHERE 2>&1

          <,<<(Here Document)

          COMMAND1 | COMMAND2

          命令:tr,tee

      2、用户管理基础概念

        a、用户类别:

          管理员,普通用户(系统用户和登陆用户)

        b、组类别:

          管理员组,普通用户组

          基本组和附加组(主组和附加组)

          私有组,公共组

        c、数据库文件:

          /etc/passwd

            login:password:uid:gid:comment:home:shell

          /etc/shadow

            login:encrpted_password:最近一次修改密码日期:密码最短使用期限:最长使用期限:警告时长:非活动时间:过期时间:保留字段

          /etc/group

            group:password:gid:user_list

          密码存储格式:单向加密,并借助于salt完成

            md5

            sha1

            sha224

            sha256

            sha384

            sha512

    二、Linux用户和组管理

      1、groupadd:添加组   groupadd [options] group

        a、groupadd -g:自定义gid如果不指定那么默认是上一个组的gid + 1

        b、groupadd -r:创建系统组

    [root@node1 ~]# tail -2 /etc/group
    centos:x:5002:
    gentoo:x:5003:
    [root@node1 ~]# groupadd -r testgrp
    [root@node1 ~]# tail -2 /etc/group
    gentoo:x:5003:
    testgrp:x:990:
    [root@node1 ~]# groupadd -g 2000 grp1
    [root@node1 ~]# groupadd -r -g 306 mariadb
    [root@node1 ~]# tail -2 /etc/group
    grp1:x:2000:
    mariadb:x:306:

      2、安全上下文模型:

        进程以其发起者的身份运行:

          进程对文件的访问权限,取决于发起此进程的用户的权限:

        系统用户:为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不用登陆系统。

      3、groupmod:修改组属性 groupmod  [options] GROUP

        a、groupmod  -g:GID,修改GID

    [root@node1 ~]# tail -2 /etc/group
    grp1:x:2000:
    mariadb:x:306:
    [root@node1 ~]# groupmod -g 702 mariadb 
    [root@node1 ~]# tail -2 /etc/group
    grp1:x:2000:
    mariadb:x:702:

        b、group -n  new_name old_name:修改组名称

    [root@node1 ~]# groupmod -n perconaserver mariadb
    [root@node1 ~]# tail -2 /etc/group
    grp1:x:2000:
    perconaserver:x:702:

      4、groupdel:删除组   groupdel GROUP

    [root@node1 ~]# groupdel perconaserver
    [root@node1 ~]# groupdel grp1

      5、useradd命令:创建用户   useradd [options] LOGIN

    [root@node1 ~]# file $(which adduser)
    /usr/sbin/adduser: symbolic link to `useradd'

        a、useradd wohaoshuai1

    [root@node1 ~]# useradd wohaoshuai1
    [root@node1 ~]# tail -1 /etc/passwd
    wohaoshuai1:x:5004:5004::/home/wohaoshuai1:/bin/bash
    [root@node1 ~]# tail -1 /etc/group
    wohaoshuai1:x:5004:

        b、useradd -u  UID:指明uid

    [root@node1 ~]# useradd -u 3000 openstack
    [root@node1 ~]# tail -1 /etc/group
    openstack:x:5005:

        c、useradd -g GROUP:指定基本组ID,此组得事先存在,否则可能出错。(指明组名称或组ID都可以)。创建用户的时候如果不指明组那么就会创建默认的私有组。-g表示将用户加入此基本组,-G表示将此用户加入附加组。

    [root@node1 ~]# useradd -g openstack wohaoshuai2
    [root@node1 ~]# tail -1 /etc/passwd
    wohaoshuai2:x:5005:5005::/home/wohaoshuai2:/bin/bash
    [root@node1 ~]# useradd -g 5005 wohaoshuai3
    [root@node1 ~]# tail -1 /etc/passwd
    wohaoshuai3:x:5006:5005::/home/wohaoshuai3:/bin/bash
    [root@node1 ~]# tail -1 /etc/group
    openstack:x:5005:

        d、useradd -c :增加注释信息

    [root@node1 ~]# useradd -c "MogileFS DFS" mogilefs
    [root@node1 ~]# tail -1 /etc/passwd
    mogilefs:x:5004:5004:MogileFS DFS:/home/mogilefs:/bin/bash

        e、useradd -G && useradd --groups:指明用户所属的附加组,多个组之间用逗号分隔。

    [root@node1 ~]# cat /etc/group|grep ygrp
    mygrp:x:3000:testuser
    [root@node1 ~]# useradd -G mygrp archlinux
    [root@node1 ~]# tail -1 /etc/passwd
    archlinux:x:5005:5006::/home/archlinux:/bin/bash
    [root@node1 ~]# tail -1 /etc/group
    archlinux:x:5006:
    [root@node1 ~]# cat /etc/group|grep ygrp
    mygrp:x:3000:testuser,archlinux

        f、useradd -d HOME_DIR:以指定的路径为用户的家目录,通过复制/etc/skel此目录并重命名来实现,指定的家目录路径如果事先存在则不会为用户复制环境配置文件。

    [root@node1 ~]# useradd -d /tmp/moosefs moosefs
    [root@node1 ~]# ls /tmp/
    moosefs  systemd-private-310789de41c149e295ca734de6eb34ff-vgauthd.service-2RCX6b  systemd-private-310789de41c149e295ca734de6eb34ff-vmtoolsd.service-fjAVWv
    [root@node1 ~]# ls -la /tmp/moosefs/
    total 12
    drwx------   2 moosefs moosefs  62 Dec 19 20:43 .
    drwxrwxrwt. 10 root    root    267 Dec 19 20:44 ..
    -rw-r--r--   1 moosefs moosefs  18 Aug  3  2017 .bash_logout
    -rw-r--r--   1 moosefs moosefs 193 Aug  3  2017 .bash_profile
    -rw-r--r--   1 moosefs moosefs 231 Aug  3  2017 .bashrc
    [root@node1 ~]# mkdir /tmp/mytest
    [root@node1 ~]# useradd -d /tmp/mytest mytest
    useradd: warning: the home directory already exists.
    Not copying any file from skel directory into it.
    [root@node1 ~]# ls -la /tmp/mytest/
    total 0
    drwxr-xr-x   2 root root   6 Dec 19 20:46 .
    drwxrwxrwt. 11 root root 281 Dec 19 20:47 ..
    [root@node1 ~]# ls -la /etc/skel/
    total 24
    drwxr-xr-x.  2 root root   62 Jun  4  2019 .
    drwxr-xr-x. 96 root root 8192 Dec 19 20:47 ..
    -rw-r--r--.  1 root root   18 Aug  3  2017 .bash_logout
    -rw-r--r--.  1 root root  193 Aug  3  2017 .bash_profile
    -rw-r--r--.  1 root root  231 Aug  3  2017 .bashrc

        g、useradd -s SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中

    [root@node1 ~]# cat /etc/shells 
    /bin/sh
    /bin/bash
    /sbin/nologin  #表示系统用户的不登录
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin
    /bin/tcsh
    /bin/csh
    [root@node1 ~]# useradd -s /bin/csh keystone
    [root@node1 ~]# tail -1 /etc/passwd
    keystone:x:5008:5009::/home/keystone:/bin/csh

        h、useradd -r 创建系统用户

        i、useradd -M:不要创建用户的主目录,即使/etc/login.defs(Create_Home)中的系统宽设置设置为yes。

        j、用户创建时默认选项在/etc/login.defs文件中

    [root@node1 ~]# cat /etc/login.defs |grep -Ev "^#|^$"
    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 

        j、useradd -D:显示用户创建时默认的配置信息。默认信息保存路径为/etc/default/useradd。也可以直接编辑此文件进行修改

    [root@node1 ~]# cat /etc/default/useradd
    # useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/csh
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    [root@node1 ~]# useradd -D
    GROUP=100 #创建用户时同时创建一个与用户同名的私有组
    HOME=/home #用户创建时是否创建家目录,如果创建那么家目录就在/home
    INACTIVE=-1  #非活动期限为禁用
    EXPIRE=  #默认过期期限为永不过期
    SHELL=/bin/bash #用户创建时的默认shell
    SKEL=/etc/skel  #默认在哪个目录复制信息
    CREATE_MAIL_SPOOL=yes #是否给用户创建邮件路径。默认在/var/spool/mail/路径下

          修改创建用户时默认的shell为cshell

    [root@node1 ~]# useradd -D -s /bin/csh
    [root@node1 ~]# useradd -D
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/csh
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    [root@node1 ~]# useradd nova
    [root@node1 ~]# tail -1 /etc/passwd
    nova:x:5009:5010::/home/nova:/bin/csh

      6、usermod命令:修改用户属性。 usermod [options] LOGIN

        a、usermod -u UID:修改用户的ID为此处指定的新UID

        b、usermod -g  GID:修改用户所属的基本组为此处所指定的组,不过此组应该事先存在才可以

        c、usermod  -G  GROUP [,GROUP2,...]:修改用户所属的附加组,原来的附加组会被覆盖,如果不想原来的附加组被覆盖那么加-a,即--append即可。

        d、usermod  -c,即--comment COMMENT:修改注释信息

        e、usermod  -d,即--home HOME_DIR:以指定的路径为用户的家目录。如果用户本来有家目录并且创建了其它文件的话那么修改过后就会没有了,因此我们一般和参数-m一起使用,即      --move-home

        f、usermod -l:即--login NEW_LOGIN,修改用户名

        g、usermod -s,--shell  SHELL:修改用户指定的shell

        h、usermod -L:即--lock,锁定用户密码,即在用户原来的密码字符串之前添加一个"!",如果要解锁用户的密码,那么需要使用-U,即--unlock,解锁用户的密码

      7、userdel命令:删除用户

        a、userdel -r:删除用户时默认不会删除其家目录,添加-r时会一并删除其家目录。

    三、练习

      1、创建用户gentoo,UID为4001,基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001)

      2、创建用户fedora,其注释信息为"Fedora Core",默认shell为/bin/tcsh

      3、修改gentoo用户的家目录为/var/tmp/gentoo:要求其原有文件仍能被用户访问

      4、为gentoo新增附加组为netadmin

    四、其它命令

      1、passwd:密码管理

        a、passwd :修改用户自己的密码

        b、passwd  USERNAME:修改指定用户的密码,但仅root有此权限。

        c、-l,-u:锁定和解锁用户

        d、-d  --delete:清除用户的密码

        e、-e  DATE:过期期限

        f、-i  DAYS:非活动期限

        g、-n DAYS:修改密码的最短使用期限

        h、-x DAYS:密码的最长使用期限

        i、-w  DAYS:警告期限

        j、--stdin,从标准输入获取密码

    [root@node1 ~]# echo "wohaoshuai"|passwd --stdin nova
    Changing password for user nova.
    passwd: all authentication tokens updated successfully.

      2、gpasswd:给组定义密码

        a、-a USERNAME:向组中添加用户

        b、-d USERNAME:从组中移除用户

        c、gpasswd USERNAME:给组添加密码

    [root@node1 ~]# gpasswd mygrp
    Changing the password for group mygrp
    New Password: 
    Re-enter new password: 
    [root@node1 ~]# cat /etc/gshadow |grep mygrp
    mygrp:$6$xdoRQ/GgErjlnaj$OjOXc7zCrU.1OwNA3InYcn1hous5Jmj6iiXwHawiAEsW0tt3rrzpFJzcdVd0JxJpHOJ2IgtZW0zTjckwtO0Ed.::testuser,archlinux
    [root@node1 ~]# su - archlinux 
    [archlinux@node1 ~]$ whoami
    archlinux
    [archlinux@node1 ~]$ id
    uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp)
    [archlinux@node1 ~]$ touch test
    [archlinux@node1 ~]$ ll
    total 0
    -rw-rw-r-- 1 archlinux archlinux 0 Dec 19 22:16 test
    [archlinux@node1 ~]$ newgrp mygrp #切换基本组为mygrp
    [archlinux@node1 ~]$ id
    uid=5005(archlinux) gid=3000(mygrp) groups=3000(mygrp),5006(archlinux)
    [archlinux@node1 ~]$ touch test2
    [archlinux@node1 ~]$ ll
    total 0
    -rw-rw-r-- 1 archlinux archlinux 0 Dec 19 22:16 test
    -rw-r--r-- 1 archlinux mygrp     0 Dec 19 22:19 test2
    [archlinux@node1 ~]$ exit #退出基本组
    exit
    [archlinux@node1 ~]$ id
    uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp)
    
    #之所以可以任意切换是因为archlinux本来就属于mygrp组
    
    现在我们来使用nova用户
    [root@node1 ~]# su - nova
    [nova@node1 ~]$ id
    uid=5009(nova) gid=5010(nova) groups=5010(nova)
    [nova@node1 ~]$ touch test
    [nova@node1 ~]$ ll
    total 0
    -rw-rw-r-- 1 nova nova 0 Dec 19 22:22 test       
    [nova@node1 ~]$ newgrp mygrp #此时就需要输入密码了
    Password: 
    [nova@node1 ~]$ touch test2
    [nova@node1 ~]$ ll
    total 0
    -rw-rw-r-- 1 nova nova  0 Dec 19 22:22 test
    -rw-r--r-- 1 nova mygrp 0 Dec 19 22:23 test2

      3、newgrp命令:临时切换指定的组为其它组

        a、- :会模拟用户重新登录以实现重新初始化其工作环境

      4、chage命令:更改用户密码过期信息   chage [选项] 登录名

        a、-d

        b、-b

        c、-w

        d、-m

        e、-M

      5、id命令:显示用户的实际和有效的id

        a、id :显示自己的

        b、id  username:显示其它人的id

        c、-u:仅显示有效的UID

        d、-g:仅显示用户的基本组GID

    [root@node1 ~]# id archlinux
    uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp)
    [root@node1 ~]# id -g archlinux
    5006

        c、-G:仅显示用户所属的所有组GID

    [root@node1 ~]# id archlinux
    uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp)
    [root@node1 ~]# id -g archlinux
    5006
    [root@node1 ~]# id -G archlinux
    5006 3000

        d、-n:仅显示名字而非ID

      6、su命令:switch user

        a、登录式切换(完全式切换):会通过重新读取用户的配置文件来重新初始化

          su - USERNAME

          su -l  USERNAME

    [root@node1 ~]# su - nova
    Last login: Thu Dec 19 22:22:16 CST 2019 on pts/1
    [nova@node1 ~]$ pwd
    /home/nova

        b、非登录式切换(非完全切换):不会读取目标用户的配置文件进行初始化

          su  USERNAME

    [root@node1 ~]# su nova
    [nova@node1 /root]$ pwd
    /root

        c、注意:管理员可无密码切换至其它任何用户

        d、su -c 'COMMAND',不切换用户,仅仅以目标用户运行此处指定的命令

    [root@node1 ~]# su - nova -c 'pwd'
    /home/nova
    [root@node1 ~]#

      7、其它不常用命令:

        a、chsh修改管理员sh

    [root@node1 ~]# chsh nova 
    Changing shell for nova.
    New shell [/bin/csh]: /bin/sh 
    Shell changed.
    [root@node1 ~]# cat /etc/passwd|grep nova
    nova:x:5009:5010::/home/nova:/bin/sh

        b、chfn 

        c、finger

        d、whoami

        e、pwck:查看用户密码是否有问题

        f、grpck:查看组密码是否有问题

    五、命令总结

      groupadd,groupmod,groupdel,useradd,usermod,userdel,passwd,gpasswd,newgrp,id,su,chage

  • 相关阅读:
    面向对象程序设计(JAVA) 第11周学习指导及要求
    面向对象程序设计(JAVA) 第10周学习指导及要求
    国内外计算机教育领域顶会、权威期刊名录
    面向对象程序设计(JAVA) 第8周学习指导及要求
    JAVA类与类之间的关系及代码示例
    面向对象程序设计(Java) 第7周学习指导及要求
    面向对象程序设计(Java) 第6-7周学习指导及要求
    面向对象程序设计(Java) 第4周学习指导及要求
    面向对象程序设计(Java) 第2周学习指导及要求
    前端开发基础,JavaScript 主要作用是什么?
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/12066899.html
Copyright © 2011-2022 走看看