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

    linux用户管理

    一、初识Linux系统用户管理

    Linux系统中存在三种用户

    • 第一种超级管理用户 root用户,此用户唯一,UID是0 (其他用户其实也可以通过更改UID来成为超级管理员用户,但是此法很危险,不提倡)
    • 第二种是虚拟用户 虚拟用户的UID是1~499 虚拟用户是不能登录到系统的,虚拟用户的作用是用来管理某个软件的进程启动运行的。
    • 第三种是普通用户 ,这一类用户是有超级管理员创建,可以登陆系统,但是权限较小。此用户的UID CentOS6为500起 CentOS7为1000起。
      在Linux系统中,和用户用户组直接相关的文件主要有/etc/passwd(用户文件),/etc/shadow(用户密码所在文件),/etc/group(用户组所在文件),/etc/gshadow(用户组密码文件(废弃基本不用))这四个配置文件。
      每当我们创建或删除用户和用户组就是修改这四个文件,我们来测试一下
      先用MD5sum给这四个文件做文件计算和检测(指纹识别)
    [root@node ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
    b8eae63b201fb5f36b0d968921402323  /etc/passwd
    1ffe5fff81b6a26c9908847d497c5f9c  /etc/shadow
    f6517909c59eecb857592278970d94ee  /etc/group
    eb6c3c1496582ccb6cadcf4a3192aec9  /etc/gshadow
    

    我们创建一个用户看看有没有没变化

    [root@node ~]# useradd chj
    [root@node ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
    e6c2c322801138625928355671e8285d  /etc/passwd
    b96d24230f85569a56fac49d3e93250f  /etc/shadow
    674673bb205813dacf83f62af17be137  /etc/group
    8871d3e4ca9869d6e63bec33374ad044  /etc/gshadow
    我们可以看到指纹识别码已经发生变化了,证明这四个文件被修改过
    
    [root@node ~]# grep chj /etc/passwd /etc/shadow /etc/group /etc/gshadow
    /etc/passwd:chj:x:1003:1003::/home/chj:/bin/bash
    /etc/shadow:chj:!!:18365:0:99999:7:::
    /etc/group:chj:x:1003:
    /etc/gshadow:chj:!::
    

    1.1.1 用户所在文件/etc/passwd

    [root@node ~]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    
    root :0 :0 root :/root :/bin/bash
    用户名称 :用户密码 :用户UID :用户GID :用户说明 :用户家目录

    1.1.2存储用户密码信息文件/etc/shadow

    [root@node ~]# cat /etc/shadow
    root:$6$1a5VFSee0goEi1Hn$AiJBbeR63N5wY24m8Rd54HZXOh.uJdmXRBFEmLmcHCD1iYwoIA15E/WrX3VONe0qc21rxKhsSVXNKO7GTQVKz.::0:99999:7:::
    chj:!!:18365:0:99999:7:::
    
    root :!! :18365 :0 :99999 :7 : : :
    用户名称 用户密码 最近更改密码时间 禁止修改密码文件的天数 用户必须修改密码的天数 警告更改密码的期限 不活动时间 失效时间 标志

    1.1.3 用户组文件/etc/group

    [root@node ~]# cat /etc/group
    root:x:0:
    bin:x:1:
    
    root :x :0 :
    用户组名称 用户组密码 用户组ID 用户组成员

    1.1.4 组密码文件/etc/gshadow

    [root@node ~]# cat /etc/gshadow
    root:::
    
    root : : :
    用户组名 用户组密码 用户组管理员用户 用户组成员

    二、Linux用户命令介绍

    1. useradd命令使用
    参数 说明
    -u 指定uid
    -s 指定登录的shell解释器
    -M 不创建家目录
    -g 指定用户组
    -e 设定登录截止日期
    [root@node ~]# useradd -u 888 jiaoji -s /sbin/nologin -M
    [root@node ~]# tail -1 /etc/passwd
    jiaoji:x:888:1004::/home/jiaoji:/sbin/nologin
    

    查看用户登录截止日期

    [root@node ~]# chage -l test
    Last password change					: Apr 12, 2020
    Password expires					: never
    Password inactive					: never
    Account expires						: never   #看这里(如果你设施截止登录日期这里就会出现日期)
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    

    指定用户组

    [root@node ~]# useradd test1 -g incahome
    [root@node ~]# id test1
    uid=1004(test1) gid=1001(incahome) groups=1001(incahome)
    

    useradd 命令的配置文件

    [root@node ~]# ll /etc/default/useradd 
    -rw-r--r-- 1 root root 119 Aug  6  2019 /etc/default/useradd
    
    [root@node ~]# cat /etc/default/useradd 
    # useradd defaults file
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    

    Linux添加用户要用到的文件
    创建普通用户的默认配置文件

    [root@node ~]# ll /etc/default/useradd 
    

    创建用户时拷贝普通用户的环境变量(拷贝到普通用户的家目录下)

    [root@node ~]# ll /etc/skel 
    

    登录文件 (了解即可)

    [root@node ~]# ll /etc/login.defs 
    -rw-r--r-- 1 root root 2027 Aug  6  2019 /etc/login.defs
    

    2.1.5 userdel 删除用户
    -r 递归删除家目录及以下内容

    [root@node ~]# userdel -r test1
    [root@node ~]# userdel -r test
    [root@node ~]# ls /home/
    chj  oldboy  oldgirl
    [root@node ~]# userdel -r chj
    [root@node ~]# ls /home/
    oldboy  oldgirl
    

    2.1.6 usermod 修改用户属性

    参数 说明
    -u 指定uid
    -s 指定登录的shell解释器
    -M 不创建家目录
    -g 指定用户组
    -e 设定登录截止日期
    [root@node ~]# useradd -u 1012 -s /sbin/nologin -M -g incahome -e "2020/5/1" chj
    [root@node ~]# grep chj /etc/passwd
    chj:x:1012:1001::/home/chj:/sbin/nologin
    [root@node ~]# id chj
    uid=1012(chj) gid=1001(incahome) groups=1001(incahome)
    [root@node ~]# chage -l chj 
    Last password change					: Apr 15, 2020
    Password expires					: never
    Password inactive					: never
    Account expires						: May 01, 2020
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    
    
    [root@node ~]# usermod -u 8888 -s /bin/bash  -g root -e "2021/5/1" chj
    [root@node ~]# id chj
    uid=8888(chj) gid=0(root) groups=0(root)
    [root@node ~]# chage -l chj
    Last password change					: Apr 15, 2020
    Password expires					: never
    Password inactive					: never
    Account expires						: May 01, 2021
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    [root@node ~]# grep  chj /etc/passwd
    chj:x:8888:0::/home/chj:/bin/bash
    
    

    2.1.7 passwd 添加或修改用户密码

    参数 说明
    --stdin 从标准输入接受密码并设置

    root 给其它用户设置密码

    [root@node ~]# passwd chj
    Changing password for user chj.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    普通用户自己设置密码

    [oldboy@node ~]$ passwd 
    Changing password for user oldboy.
    Changing password for oldboy.
    (current) UNIX password: 
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    非交互设置密码--stdin

    [root@node ~]# echo "123456"|passwd --stdin oldgirl
    Changing password for user oldgirl.
    passwd: all authentication tokens updated successfully.
    

    也可以这样

    [root@node ~]# passwd --stdin oldgirl <pass
    Changing password for user oldgirl.
    passwd: all authentication tokens updated successfully.
    

    2.1.8 chpasswd 批量修改用户密码(从标准输入更改用户密码)

    [root@node ~]# tail -4 /etc/passwd|awk -F ":" '{print $1":123456"}'
    oldgirl:123456
    ntp:123456
    jiaoji:123456
    chj:123456
    [root@node ~]# tail -4 /etc/passwd|awk -F ":" '{print $1":123456"}'>pass.log
    [root@node ~]# cat pass
    pass      pass.log  
    [root@node ~]# cat pass.log 
    oldgirl:123456
    ntp:123456
    jiaoji:123456
    chj:123456
    
    

    出现以下报错:

    [root@node ~]# chpasswd <pass.log 
    chpasswd: cannot lock /etc/passwd; try again later.
    解决方法:
    [root@node ~]# ps -axu|grep  chpasswd
    root       2011  0.0  0.0 125520   932 pts/0    T    20:47   0:00 chpasswd
    root       2111  0.0  0.0 112712   968 pts/0    R+   21:03   0:00 grep --color=auto chpasswd
    [root@node ~]# kill -9 2011
    
    [root@node ~]# chpasswd <pass.log 
    

    其实最简单的就是直接管道然后接chpasswd命令(前提你要保证管道之前的内容是正确的)

    [root@node ~]# tail -4 /etc/passwd|awk -F ":" '{print $1":123456"}'|chpasswd
    

    三、用户组命令介绍

    3.1.1 groupadd 添加一个组

    [root@node ~]# groupadd sa
    [root@node ~]# grep sa /etc/group
    sa:x:1005:
    

    参数

    参数 说明
    -g 指定组id
    [root@node ~]# groupadd -g 1235 sa1
    [root@node ~]# grep sa1 /etc/group
    sa1:x:1235:
    

    3.1.2 groupdel 删除一个组

    [root@node ~]# groupdel sa
    [root@node ~]# grep sa /etc/group
    

    3.1.3 chage 查看和修改密码属性
    参数

    参数 说明
    -l 显示一个用户的密码信息
    -E 修改账户过期时间
    [root@node ~]# chage  -l oldboy
    Last password change					: Apr 15, 2020  #最近密码修改的时间
    Password expires					: never #密码过期时间
    Password inactive					: never #密码停权日期
    Account expires						: never  #账户过期时间
    Minimum number of days between password change		: 0  #两次密码修改的时间间隔 0(随时可以)
    Maximum number of days between password change		: 99999  #密码使用期限
    Number of days of warning before password expires	: 7  #过期前第七天提示用户修改密码
    
    [root@node ~]# chage  -E "2023/10/1" oldboy
    [root@node ~]# chage  -l oldboy
    Last password change					: Apr 15, 2020
    Password expires					: never
    Password inactive					: never
    Account expires						: Oct 01, 2023
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    

    四、用户查询相关的命令

    4.1.1 whoami 查看当前用户

    [root@node ~]# whoami 
    root
    

    4.1.2 id 查看当前用户

    [root@node ~]# id 
    uid=0(root) gid=0(root) groups=0(root)
    

    4.1.3 w 查看当前登录的所有用户

    [root@node ~]# w
     22:21:36 up  2:27,  1 user,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.36.1     19:55    0.00s  0.26s  0.00s w
    [root@node ~]# su - oldboy
    Last login: Wed Apr 15 20:20:48 CST 2020 on pts/0
    [oldboy@node ~]$ 
    [root@node ~]# w
     22:23:47 up  2:29,  2 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.36.1     19:55    3.00s  0.27s  0.00s w
    root     pts/1    192.168.36.1     22:23   11.00s  0.02s  0.01s -bash
    
    [root@node ~]# who
    root     pts/0        2020-04-15 19:55 (192.168.36.1)
    root     pts/1        2020-04-15 22:23 (192.168.36.1)
    

    4.1.4 显示登陆过的用户信息列表

    [root@node ~]# last
    root     pts/1        192.168.36.1     Wed Apr 15 22:23   still logged in   
    root     pts/1        192.168.36.1     Wed Apr 15 21:11 - 21:33  (00:22)    
    root     pts/0        192.168.36.1     Wed Apr 15 19:55   still logged in   
    reboot   system boot  3.10.0-1062.18.1 Thu Apr 16 03:54 - 22:31  (-5:-22)   
    root     pts/0        192.168.36.1     Thu Apr 16 03:08 - crash  (00:45)    
    reboot   system boot  3.10.0-1062.18.1 Thu Apr 16 03:07 - 22:31  (-4:-36)   
    root     pts/0        192.168.36.1     Tue Apr 14 17:19 - down   (07:48) 
    

    4.1.4 查看用户最近登录时间

    [root@node ~]# lastlog 
    Username         Port     From             Latest
    root             pts/1    192.168.36.1     Wed Apr 15 22:23:30 +0800 2020
    bin                                        **Never logged in**
    daemon                                     **Never logged in**
    

    五、su 的功能讲解

    su 是Linux用户身份切换的工具。

    参数 说明
    - 加载切换用户自己的环境变量
    -c 指定一个用户身份执行命令而不用切换到用户
    [root@node ~]# su - oldboy
    Last login: Wed Apr 15 22:23:43 CST 2020 on pts/1
    [oldboy@node ~]$ 
    [oldboy@node ~]$ whoami 
    oldboy
    [root@node ~]# su -l oldboy
    Last login: Thu Apr 16 17:05:05 CST 2020 on pts/0
    [oldboy@node ~]$ whoami 
    oldboy
    
    

    注意加“-” 是携带环境变量登录 -l也可以

    如果我们不加-或-l就会出现环境变量还是原来用户的。

    [root@node ~]# env|grep root
    USER=root
    MAIL=/var/spool/mail/root
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    PWD=/root
    HOME=/root
    LOGNAME=root
    
    [oldboy@node /root]$ env|grep root
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    MAIL=/var/spool/mail/root
    PWD=/root
    #环境变量还是root的
    

    加“-”

    [root@node ~]# su - oldboy
    Last login: Thu Apr 16 17:09:16 CST 2020 on pts/0
    [oldboy@node ~]$ env|grep oldboy
    USER=oldboy
    MAIL=/var/spool/mail/oldboy
    PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oldboy/.local/bin:/home/oldboy/bin
    PWD=/home/oldboy
    HOME=/home/oldboy
    LOGNAME=oldboy
    

    -c 指定一个用户身份执行命令而不用切换到用户

    [root@node ~]# su - oldboy -c pwd
    /home/oldboy
    [root@node ~]# su - oldboy -c whoami
    oldboy
    

    5.1.1 在企业生产环境中怎么使用su
    不能直接登录root账户,先登录普通用户,没事的时候就是用普通用户,只有执行的任务需要root权限的时候,才允许你登录root。

    六、sudo命令的使用

    sodu 这个命令可以在普通用户在执行某个命令的时候赋予root权限(前提你得赋予普通用户执行这个命令的权限),这要做的目的是最小化权限控制管理,防止意外错误发生。
    6.1.1 在生产过程中如何配置sudo权限

     [root@node ~]# visudo或者[root@node ~]# vim /etc/sudoers (语法严格,不太推荐,如果一定要用,配置完成,要检查语法)
     [root@node ~]# visudo -c
    /etc/sudoers: parsed OK
    
    

    6.1.2 授权oldboy用户可以使用ls命令访问root目录
    1.首先oldboy 对/root 目录是没有访问权限的

    [oldboy@node ~]$ ls /root
    ls: cannot open directory /root: Permission denied
    
    [root@node ~]# visudo
      100 root    ALL=(ALL)       ALL 
    #     用户    主机=(角色)   命令
      101 oldboy  ALL=(ALL)       /bin/ls #添加oldboy用户以及授权的命令
      #oldboy  ALL=(ALL)       NOPASSWD: /bin/ls
      #不用每五分钟输入一次验证密码
    

    切换到oldboy用户 先查看是否有权限(首次输入需要oldboy密码。时效5分钟,如果你嫌麻烦授权的时候这样配置:oldboy ALL=(ALL) NOPASSWD: /bin/ls)

    [oldboy@node ~]$ sudo -l
    
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    [sudo] password for oldboy: 
    Matching Defaults entries for oldboy on node:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
        HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
        LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin:/bin:/usr/sbin:/usr/bin
    
    User oldboy may run the following commands on node:
        (ALL) /bin/ls (用于执行ls的权限)
    
    [oldboy@node ~]$ sudo ls /root
    90  anaconda-ks.cfg  a.txt  b.txt  d.txt  oldboy.txt  oldgirl.txt  pass  pass.log  passwd.sh  test
    

    不需要root密码普通用户直接切换到root用户

    [root@node ~]# visudo
    oldboy  ALL=(ALL)       NOPASSWD: ALL
    [root@node ~]# sudo su - root
    Last login: Thu Apr 16 17:45:44 CST 2020 from 192.168.36.1 on pts/2
    [root@node ~]# 
    
  • 相关阅读:
    从Active Directory中获取用户信息
    BindingNavigator & BindingSource Classes in VS2005
    New patterns & practices for Visual Studio 2005 and .NET 2.0
    Logging application block of Enterprise Library 2.0
    Pocket C# Project
    Enterprise Library 1.0 HandsOn Labs
    Visual Studio 2005 Team System Technical Articles from MSDN
    Web Services Enhancements (WSE) 3.0 Released!
    更新Active Directory/Exchange Address Book的小工具
    Android 菜单项选项
  • 原文地址:https://www.cnblogs.com/woaiyunwei/p/12886110.html
Copyright © 2011-2022 走看看