zoukankan      html  css  js  c++  java
  • Linux-用户管理命令

    用户的分类(CentOS7)

    用户UID 系统含义
    0 超级用户(拥有系统的最高权限)
    1-200 系统用户,由系统分配给系统进程使用
    201-999 系统用户,运行服务,不需要登录系统的
    1000+ 普通用户

    注意:在CentOS7之前,创建用户,都是1-499 是系统用户,500+是普通用户,第一个创建的用户,不指定uid,一定是500。

    用户信息相关文件

    创建一个用户,一般会影响四个文件:
    1./etc/passwd # 存放用户信息
    2./etc/shadow # 存放用户密码信息
    3./etc/group # 存放用户组信息
    4./etc/gshadow # 存放用户组密码信息

    /etc/passwd 文件

    [root@localhost ~]# cat /etc/passwd
    wqh: x:777:1001:此列为注释信息: /home/wqh:/bin/bash

    /etc/shadow 文件

    [root@localhost ~]# cat /etc/shadow
    root:$6$iM1LuZaUuwyZrIg.$2X2Upu4KHmQoD1hzKHCzsmJqxPri9PlVDm5MYw/XdQsYgRpJaLIy1xWw0aDXLPePZNAcNRmfrYJrJgb6dmbu/.::0:99999:7:::

    列数 名称 详情
    1 用户登陆名 用户的账号名称
    2 加密后的密码 用户密码,这是加密过的口令,未设密码时为 * 或 !! , * 是1-200的系统进程, !! 是201-999的服务进程
    3 最近一次密码更改时间 从1970年到最近一次更改密码时间之间过了多少天
    4 密码最少使用几天 密码最少使用几天才可以更改密码(0表示无限制)
    5 密码最长使用几天 密码使用多少天需要修改密码(默认99999永不过期)
    6 密码到期前警告期限 密码过期前多少天提醒用户更改密码(默认过期提前7天警告)
    7 密码到期后保持活动的天数 在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定
    8 账户到期时间 从1970年起,账户在这个日期前可使用,到期后失效。
    9 标志 保留备用

    用户创建过程中的配置文件

    我们执行二进制文件 useradd 的时候,会调用哪些配置文件?

    /etc/login.defs 文件

    [root@wqh06 tmp]# ll /sbin/useradd
    -rwxr-x---. 1 root root 118232 Oct 31  2018 /sbin/useradd
    
    [root@localhost ~]# cat /etc/login.defs
    [root@localhost ~]# grep -i  '^[a-z]' /etc/login.defs
    # 指定创建用户后的邮件文件存放位置
    MAIL_DIR	/var/spool/mail
    #  密码,最长天数
    PASS_MAX_DAYS	99999
    # 密码最小天数
    PASS_MIN_DAYS	0
    # 密码最小长度
    PASS_MIN_LEN	5
    # 密码过期前7天 ,提示,密码要过期了,给老子改
    PASS_WARN_AGE	7
    # 普通用户的uid 最小值1000
    UID_MIN                  1000
    # 普通用户的最大uid 60000
    UID_MAX                 60000
    # -r创建的系统用户,201 - 999
    SYS_UID_MIN               201
    SYS_UID_MAX               999
    # 普通用户组的最小gid
    GID_MIN                  1000
    # 普通用户组的最大gid
    GID_MAX                 60000
    # -r创建的系统用户组,201 - 999
    SYS_GID_MIN               201
    SYS_GID_MAX               999
    # 默认创建家目录 
    CREATE_HOME	yes
    # 家目录umask
    UMASK           077
    
      0777        0777
    - 0022        0077
    -------      ------
      0755        0700
    # 在删除用户的时候,是否捆绑,把用户组也删除
    USERGROUPS_ENAB yes
    # 用户密码加密算法
    ENCRYPT_METHOD SHA512
    

    /etc/default/useradd 文件

    [root@localhost ~]# ll /etc/default/useradd
    -rw-r--r-- 1 root root 119 11月  5 2016 /etc/default/useradd
    
    [root@localhost ~]# cat /etc/default/useradd
    # 依赖于/etc/login.defs的USERGRUUPS_ENAB参数,如果为no,则在此处控制
    GROUP=100
    # 默认普通用户的家目录
    HOME=/home
    # 是否启用账号过期停权,-1表示不启用
    INACTIVE=-1
    # 账号终止日期(没有设置)
    EXPIRE=
    # 创建用户的默认shell
    SHELL=/bin/bash
    # 当用户,误删除了自己家目录下的环境变量。
    SKEL=/etc/skel
    -bash-4.2$ cp /etc/skel/.bash* ~/
    # 创建用户的同时,是否创建邮件文件
    CREATE_MAIL_SPOOL=yes
    

    用户管理命令

    增加用户

    useradd
    adduser # useradd 的软链接
    
    Usage:useradd [选项] [用户名]
    默认情况下,在创建用户的时候,会创建一个和用户同名的组,并且把该用户加入该组
    
    [root@localhost ~]# useradd wqh
    -u:(uid)指定uid
    -g:(gid)指定gid,也可以指定组名,需要存在这个组名
    -G:(Group)指定附加组,如果加入多个附加组则用,逗号隔开
    	[root@wqh06 ~]# useradd wqh -g root -G bin,dba,sa
    -d:(directory)指定用户的家目录
    	[root@wqh06 ~]# useradd kkkk -d /tmp/kkkk
    -s:(shell)指定登录的shell,可登录用户:/bin/bash,不可登录用户:/sbin/nologin
    -c:(comment)添加注释
    
    -M:不创建家目录
    -r:帮我们创建一个uid范围是201-999的系统用户(默认可以登录),不创建家目录
    
    

    删除用户

    userdel
    
    Usage:userdel [选项] [用户名]
    # 注意: 默认情况下,在删除用户的同时会把同名的用户组也删除,但是如果组内有其他用户,则不会删除组,只删除用户
    -r:删除用户的同时,删除用户的家目录,和用户的其他 邮件目录... (删干净)
    

    修改用户

    usermod
    Usage:usermod [选项] [用户名]
    -u:修改uid
    -g:修改gid
    -G:修改附加组(一般配合-a使用)      # 直接用会把从组修改没,添加一个新的组,一般都会加-a,会在后面继续添加从组
    -d:指定修改后的家目录(需要加 -m 才可用)
    -s:修改登录的shell
    -c:修改注释
    
    -l:修改登录的用户名,如:usermod wqh -l wqh01
    -L:锁定用户(封号),LOCK
    -U:解锁用户(解封),UNLICK
    -a:配合-G,在修改附加组的时候,起到追加效果(append)
    -m:修改(迁移)家目录,必须配合 -d
    

    查看用户

    id # 查看当前登录用户
    Usage:id [用户名]
    -u:查看UID
    -g:查看GID
    -G:查看附加组
    
    w   # 查看当前登录终端的设备以及用户
    who # 查看当前登录的用户,以及远程连接的IP地址
    
    

    用户密码管理命令

    passwd    # 修改当前登录用户的密码
    #使用交互式的方式设置密码
    [root@localhost ~]# passwd wqh
    # 使用非交互的方式设置密码给指定用户
    [root@localhost ~]# echo '123' | passwd --stdin wqh
    
    md5sum    # 加密算法,并且做校验,相同的一串字符每次md5加密结果相同
    [root@wqh06 ~]# echo 123 |md5sum
    ba1f2511fc30423bdbb183fe33f3dd0f  -
    
    mkpasswd  # 随机生成密码命令,需要安装expect包
    [root@wqh06 ~]# yum install -y expect   //需要安装扩展包
    [root@wqh06 ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4
    |K&13bR)i/
    
    

    批量创建用户并给予密码(面试题)

    面试题:请你创建出来100个用户,并且设置100个随机密码,并且记录密码,每个用户都可以登录,密码记录的格式如username:password
    [root@wqh06 ~]# cat /tmp/1.txt
    wqh001:123456
    wqh002:kzsuhiuh1

    awk方法:
    # 利用mkpasswd生成密码,把格式固定,输入到文件中,再cut出 ":" 后的密码,交给passwd:
    [root@wqh06 ~]# seq -w 100|awk '{print "useradd usr"$1,"&& echo usr"$1":`mkpasswd -l 10` |tee -a /root/wangqihan.pass|awk -F "[:]" "{print $2}"| passwd --stdin usr"$1 }' |bash
    # 利用变量解决:
    [root@wqh06 ~]# seq -w 100|awk '{print "useradd cls"$1,"&&","pass=`echo $RANDOM|md5sum|cut -c 1-10`","&&","echo $pass|passwd --stdin cls"$1,"&& echo cls"$1":$pass >> /tmp/2.pass"}'|bash
    
    
    sed方法:
    [root@wqh06 ~]# seq -w 100|sed -nr 's#(.*)#useradd wls1 && pass=`echo $RANDOM|md5sum|cut -c 1-10` && echo $pass |passwd --stdin wls1 && echo wls1:$pass >> /tmp/wls.pass#gp'|bash
    
    
    for方法:
    [root@wqh06 ~]# for n in `seq -w 100`;do useradd lls$n;pass=`echo $RANDOM|md5sum|cut -c 1-10`;echo $pass |passwd --stdin lls$n;echo lls${n}:$pass >> /tmp/lls.pass;done
    
    
    写一个交互式的脚本文件:
    #!/bin/bash
    
    read -p "请输入需要创建的用户名 :" username
    
    read -p "请输入需要创建用户的数量:" usercount
    
    for n in `seq -w $usercount`;do
        useradd $username$n
        pass=`echo $RANDOM|md5sum|cut -c 1-10`
        echo $pass |passwd --stdin $username$n
        # 下一条语句中的${n},加{}的目的是与后面的`:`分隔开,这里也可以不加,只是作区分用,不等同与命令行的$()的调用功能  
        echo $username${n}:$pass >> /tmp/$username.pass  
    done
    
    

    awk方法结果:

    脚本:

    上图中实际上就是将命令行中的for命令内容,堆起来,每一行用 && 连接,依然可行:

    我们也可以搞一个交互式的脚本:

  • 相关阅读:
    python生成随机密码
    python计算md5值
    python---连接MySQL第五页
    python---连接MySQL第四页
    梯度下降(Gradient Descent)小结
    矩阵的线性代数意义
    矩阵的意义
    偏导数与全导数的关系 以及 偏微分与全微分的关系
    mysql-blog
    python及numpy,pandas易混淆的点
  • 原文地址:https://www.cnblogs.com/zzzwqh/p/12602339.html
Copyright © 2011-2022 走看看