01.linux系统用户管理

发布于 2020-03-13  209 次阅读


  1. 1.用户基本概述

    Linux用户属于多用户操作系统,windows中,可以创建多个用户,但不允许同一时间多个用户进行系统登陆,但是Linux可以同时支持多个用户同时登陆操作系统,登陆后互相之间并不影响。


    用户和组存在的意义

  • 1.系统上的每一个进程(运行的程序)都需要特定的用户运行
  • 2.每一个文件都有特定的用户拥有
  • 3.访问一个文件或目录受到用户的限制
  • 4.进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关

查看当前登录的用户信息

[root@lxgyw-node1 /]# id

uid=0(root) gid=0(root) groups=0(root)

用户分类

0 超级管理员(拥有最高权限)
1-200
系统用户,由系统分配给系统进程使用
201-999
系统用户,用来运行服务账户,不需要登陆系统(动态分配)
1000+
常规普通用户

注意: CentOS7系统之前, UID1-499用于系统用户, UID 500+则用于普通用户。

组的类别

基本组
优先使用基本组, 用户只能属于一个基本组, 用户默认基本组
附加组
基本组不能满足授权要求, 创建附加组, 用户可以属于多个附加组
私有组
私有组, 创建用户时如果没有指定基本组, 系统会创建和用户同名的组

用户相关配置文件

用户的信息存放在/etc/passwd用户的密码都保存在/etc/shadow这两个文件是linux系统中最重要的文件之一。
如果没有这两个文件或者这两个文件出问题,会导致无法正常登录linux系统。

/etc/passwd 账户文件

[root@node1 ~]# head -1 /etc/passwd

root:x:0:0:root:/root:/bin/bash

 

// /etc/passwd ':' 为分割符, 分为7个字段,每个字段的具体含义如下:

字段名称
注释说明

1.用户名称
//
用户的账号名称

2.密码占位符
//
存放账户的口令,暂用x表示,密码保存在/etc/shadow

3.用户的UID //用户标识号

4.用户基本组GID //组标识号

5.用户注释
//
用户详细信息

6.用户家目录
//root
家目录是/root普通用户家目录存在/home/username(可自定义)

7.用户登录Shell //用户登录Linux使用的shell #cat /etc/shells

/etc/shadow 用户密码文件

[root@lxgyw ~]# tail -1 /etc/shadow

bgx1:!!:16312:0:99999:7:::

 

// /etc/shadow ':' 为分割符, 分为9个字段,每个字段的具体含义如下:

字段名称
注释说明

1.用户登陆名
//
用户的账号名称

2.加密后的密码
//
用户密码,这是加密过的口令(未设密码时为!!)

3.最近一次密码更改时间
//
1970年到最近一次更改密码时间之间过了多少天

4.密码最少使用几天
//
密码最少使用几天才可以更改密码(0表示无限制)

5.密码最长使用几天
//
密码使用多少天需要修改密码(默认99999永不过期)

6.密码到期前警告期限
//
密码过期前多少天提醒用户更改密码(默认过期提前7天警告)

7.密码到期后保持活动的天数
//
在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定

8.账户到期时间
//
1970年起,账户在这个日期前可使用,到期后失效。

9.标志
//
保留

按照图配置用户相关属性


使用chage更改用户密码密码使用情况

-d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码

-m //设置用户两次改变密码之间使用"最小天数"

-M //设置用户两次改变密码之间使用"最大天数"

-W //设置密码更改警告时间
将过期警告天数设为"警告天数"

-I //设置密码过期天数后, 密码为失效状态

-E //设置用户过期时间, 账户失效后无法登陆

-l //显示用户信息

 

 

//修改时间为20140831,和图中时间匹配,方便后续验证

[root@lxgyw ~]# date -s '20140831'

Sun Aug 31
00:00:00 CST 2014

[root@lxgyw ~]# date

Sun Aug 31
00:00:01 CST 2014

[root@lxgyw ~]# useradd bgx1

[root@lxgyw ~]# echo "123" |passwd --stdin bgx1

[root@lxgyw ~]# tail -1 /etc/shadow

bgx1:!!:16312:0:99999:7:::

 

 

//设置最近一次修改密码时间

[root@lxgyw ~]# chage -d "2014-09-01" bgx1

[root@lxgyw ~]# tail -n1 /etc/shadow

bgx1:!!:16314:0:99999:7:::

 

//设置最短使用密码时间

[root@lxgyw ~]# chage -m 2 bgx1

[root@lxgyw ~]# tail -n1 /etc/shadow

bgx1:!!:16314:2:99999:7:::

 

//设置密码最长使用时间

[root@lxgyw ~]# chage -M 15 bgx1

[root@lxgyw ~]# tail -n1 /etc/shadow

bgx1:!!:16314:2:15:7:::

 

//设置密码警告时间

[root@lxgyw ~]# chage -W 6 bgx1

[root@lxgyw ~]# tail -n1 /etc/shadow

bgx1:!!:16314:2:15:6:::

[root@lxgyw ~]# chage -W 7 bgx1

[root@lxgyw ~]# tail -n1 /etc/shadow

bgx1:!!:16314:2:15:7:::

 

//设置密码过期时间

[root@lxgyw ~]# chage -I 5 bgx1

[root@lxgyw ~]# tail -n1 /etc/shadow

bgx1:!!:16314:2:15:6:5::

 

//设置用户过期时间

[root@lxgyw ~]# chage -E "20115-08-31" bgx1

[root@lxgyw ~]# tail -n1 /etc/shadow

bgx1:!!:16314:2:15:6:5:6627567:

 

[root@lxgyw ~]# chage -l bgx1

Last password change : Sep 01, 2014 //最近一次更改密码时间

Password expires : Sep 16, 2014 //密码过期时间

Password inactive : Sep 21, 2014 //密码失效时间

Account expires : Aug 31, 2015 //用户失效时间

Minimum number of days between password change : 2 //密码最短使用时间

Maximum number of days between password change : 15 //密码最长使用时间

Number of days of warning before password expires : 7 //密码过期前警告天数

 

 

//如何验证,只调整时间为如下进行验证:

 

1.验证普通用户是否能修改密码, 不需要调整时间。

 

2.普通用户登陆系统后, 会提示警告密码还剩多少天过期

[root@lxgyw ~]# date -s "2014-09-12"

 

3.普通用户登陆系统后, 强制要求修改密码

[root@lxgyw ~]# date -s "2014-09-18"

 

4.普通用户登陆系统后, 提示账户已过期

[root@lxgyw ~]# date -s "2014-09-23"

  1. 1.1 用户相关的命令

    添加用户前需要确定

    确定用户的默认组是否有特殊要求
    确定用户是否允许登陆
    确定用户的密码策略
    确定用户的有效期
    确定用户的uid是否有特殊要求

    1.使用useradd命令新增用户, 注意adduser命令软链接指向useradd命令

    '-u'
    指定用户的UID,不能和现有ID冲突

    '-g'
    指定用户用户默认基本组

    '-G'
    指定用户附加组,用逗号隔开添加多个附加组

    '-d'
    指定用户家目录

    '-c'
    指定用户注释信息

    '-M'
    不建立家目录

    '-s'
    指定用户默认shell

    '-r'
    创建系统账户, 没有家目录

     

     

    //创建bgx用户,指定UID5001,基本组students 附加组sa,dba 注释信息:2018
    new student,
    登陆的shell:/bin/bash

    [root@lxgyw ~]# groupadd sa

    [root@lxgyw ~]# groupadd dba

    [root@lxgyw ~]# groupadd students

    [root@lxgyw ~]# useradd -u 5001 -g students -G sa,dba -c "2018new student" -d /home/bgx -s /bin/bash bgx

    [root@lxgyw ~]# tail -1 /etc/passwd

    bgx:x:5001:505:2017
    new
    student:/home/bgx:/bin/bash

     

    //创建系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统

    [root@node1 ~]# useradd mysql -M -s /sbin/nologin

    [root@node1 ~]# useradd -r dba -s /sbin/nologin

    2.使用usermod命令修改用户组

    '-u'
    修改用户的UID

    '-g'
    修改用户所属的基本组GID

    '-G'
    修改用户附加组, 使用逗号隔开多个附加组, 覆盖原有的附加组

    '-a'
    追加更多的附加组, 必须和-G使用: -aG 追加附加组

    '-m'
    家目录迁移, 必须和-d一起使用, 移动用户的家目录到新的位置

    '-d'
    指定用户的家目录新位置

    '-c'
    修改用户的注释信息

    '-s'
    更改用户使用的shell

    '-l'
    更改用户登录名

    '-L'
    锁定用户

    '-U'
    解锁用户

     

     

    [root@lxgyw ~]# grep "bgx" /etc/passwd

    bgx:x:5001:505:2018
    new
    student:/home/bgx:/bin/bash

     

    //修改用户uid,gid, 附加组, 注释信息, 用户家目录, 登录shell, 登录名

     

    //建立组,指定组gid

    [root@lxgyw ~]# groupadd -g 5008 network_sa

    [root@lxgyw ~]# groupadd -g 5009 devops

     

    //修改用户属性

    [root@lxgyw ~]# usermod -u 6001 -g5008 -a -G 5009 -c "2019 new student" -md /bgx -s /bin/sh -l bgx_lxgyw bgx

     

    //检查是否修改成功

    [root@lxgyw ~]# grep "bgx" /etc/passwd

    bgx_lxgyw:x:6001:5008:2019
    new
    student:/bgx:/bin/sh

     

    [root@lxgyw ~]# id bgx_lxgyw

    uid=6001(bgx_lxgyw) gid=5008(network_sa) groups=5008(network_sa),503(sa),504(dba),5009(devops)

     

    //验证家目录

    [root@lxgyw ~]# ll -d /bgx

    drwx------. 2 bgx_lxgyw network_sa 4096
    2014-09-23
    00:13 /bgx

     

     

    锁定用户

    [root@lxgyw ~]# echo "123" |passwd --stdin bgx_lxgyw

    [root@lxgyw ~]# usermod -L bgx_lxgyw

    //无法正常登录系统

    ~ ssh bgx_lxgyw@192.168.56.11

    bgx_lxgyw@192.168.56.11's password:

    Permission denied, please try again.

     

    解锁用户

    [root@lxgyw ~]# usermod -U bgx_lxgyw

    //正常登录系统

    ~ ssh bgx_lxgyw@192.168.56.11

    bgx_lxgyw@192.168.56.11's password:

    Welcome to Aliyun Esc Linux

    -sh-4.1$

    3.使用finger命名查询用户信息以及登录信息

    //安装finger命令

    [root@lxgyw ~]# yum install finger -y

    [root@lxgyw ~]# finger bgx_lxgyw

    Login: bgx_lxgyw Name: 2019 new student

    Directory: /bgx Shell: /bin/sh

    On since Tue Sep 23
    01:33 (CST) on pts/1
    from
    192.168.56.2

    5 minutes 4 seconds idle

    No mail.

    No Plan.

    4.使用chfn修改用户信息

    [root@lxgyw ~]# chfn bgx_lxgyw

    Changing finger information for bgx_lxgyw.

    Name [2019
    new student]: 2020
    new student

    Office []: 110

    Office Phone []: 89270000

    Home Phone []: 15210xxxxxx

     

    //使用finger再次检查

    [root@lxgyw ~]# finger bgx_lxgyw

    Login: bgx_lxgyw Name: 2020
    new student

    Directory: /bgx Shell: /bin/sh

    Office: 110, 89270000 Home Phone: 15210xxxxxx

    On since Tue Sep 23
    01:33 (CST) on pts/1 from 192.168.56.2


    6 minutes 49 seconds idle

    No mail.

    No Plan.

    5.使用chsh命令更改用户登录shell

    [root@lxgyw ~]# chsh bgx_lxgyw

    Changing shell for bgx_lxgyw.

    New shell [/bin/sh]: /bin/bash

    Shell changed.

    [root@lxgyw ~]# grep "bgx_lxgyw" /etc/passwd

    bgx_lxgyw:x:6001:5008:2020
    new student,110,89270000,15210xxxxxx:/bgx:/bin/bash

    6.检查用户登陆情况

    [root@lxgyw ~]# who

    lxgyw pts/0
    2017-10-30
    09:30 (192.168.56.2)

    bgx_lxgyw pts/1
    2014-09-23
    01:33 (192.168.56.2)

    root pts/2
    2017-10-30
    07:13 (192.168.56.2)

     

    [root@lxgyw ~]# w


    01:43:18 up 1 day, 15:00, 3 users, load average: 0.00, 0.00, 0.00

    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

    xuliangw pts/0
    192.168.56.2
    09:30 ? 0.35s 0.18s sshd: xu

    bgx_xuli pts/1
    192.168.56.2
    01:33
    9:24
    0.03s 0.00s bash

    root pts/2
    192.168.56.2
    07:13
    0.00s 1.49s 0.08s w

    7.使用userdel删除账户

    语法 : userdel [-r] username //-r 同时删除家目录

     

    [root@lxgyw ~]# userdel user1

    [root@lxgyw ~]# ll /home/user1/ -d

    drwx------. 3
    501
    501
    4096
    2017-11-15
    12:40 /home/user1/

     

    //连同家目录一起删除

    [root@lxgyw ~]# userdel -r user1

  2. 1.2 用户创建的原理

    Linux创建用户默认会读取/etc/defaults/useradd的配置文件,如果当我指定参数时,使用指定参数,如果不指定参数,默认使用/etc/defaults/useradd中的配置。
    当我们使用useradd命令新建用户时,用户家目录下会产生相应的.bash_*文件,这些文件默认是从/etc/skel目录中复制。如需变更环境拷贝目录站点可修改:/etc/defaults/useradd的配置文件。
    注意:如果执行useradd命令新建用户时,指定了参数,就会覆盖/etc/default/useradd默认的配置。

    [root@student ~]# egrep -v "^#|^$" /etc/login.defs

    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

     

    [root@student ~]# cat /etc/default/useradd

    GROUP=100

    HOME=/home //把用户的家目录建在/home中。

    INACTIVE=-1 //是否启用账号过期停权,-1表示不启用。

    EXPIRE= //账号终止日期,不设置表示不启用。

    SHELL=/bin/bash //新用户默认所有的shell类型。

    SKEL=/etc/skel //配置新用户家目录的默认文件存放路径。

    CREATE_MAIL_SPOOL=yes //创建mail文件。

     

     

    //用户登录linux操作系统,环境变量被误删,出现-bash-4.1$,如何解决!

    -bash-4.1$ cp -a /etc/skel/.bash* ./

    -bash-4.1$ exit

     

    [root@student ~]# su - lxgyw

    [lxgyw@student ~]$

  3. 2. 用户密码管理

    创建完账户后,默认是没有设置密码的,所以该账户是没有办法登陆操作系统。只有使用passwd设置好密码后方可登录系统。
    使用passwd为用户创建密码时,为了安全起见,请尽量设置复杂一些。可以按照如下规则设置密码:

    1.密码的长度最好大于10位字符
    2.
    密码中包含大小写字母数字以及特殊字符 ! @ # $
    3.
    不规则性(不要出现自己名字、公司名字、自己电话、等等简单的密码)

    需要注意:

    1.普通用户只能更改自己的密码(密码必须满足8位字符)
    2.
    管理员用户能更改任何人的密码(密码长度无限制)

    1.使用passwd命令修改用户密码

    语法: passwd [username]

     

    //'passwd'后面不加[username]则是修改当前登陆终端用户的密码。

    //如果你登陆的是root管理员用户,后面可以指定要修改的用户。

    //只有root管理员才可以修该其他用户的密码,普通账户只能修改自己的密码,并且普通用户没有修改其他用户密码的权限

     

     

    //root管理员用户登陆,修改root用户密码

    [root@localhost ~]# passwd

    更改用户 root 的密码。

    新的
    密码:

    重新输入新的
    密码:

    passwd:所有的身份验证令牌已经成功更新。

     

    //root用户登陆,修改其他用户的密码

    [root@localhost ~]# passwd lxgyw

    更改用户 lxgyw 的密码

    新的
    密码:

    重新输入新的
    密码:

    passwd
    所有的身份验证令牌已经成功更新。

     

     

    //普通用户修改root管理员密码

    [bgx_lxgyw@lxgyw ~]$ passwd root

    passwd: Only root can specify a user name.

     

     

    //无需用户交互修改密码, 将前者的输出结果, 成为后者的输入

    [root@lxgyw ~]# echo "123" | passwd --stdin lxgyw

    Changing password for user lxgyw.

    passwd: all authentication tokens updated successfully.

    2.随机复杂密码生成的方式

    //1.系统内置变量生成随机密码

    [root@node1 ~]# echo $RANDOM|md5sum|cut -c 1-10

    d09fe9b1xs

    [root@node1 ~]# echo $(echo $RANDOM|md5sum |cut -c 5-14) |tee pass.txt| passwd --stdin lxgyw

     

    //2.mkpasswd密码生成工具, -l设定密码长度,-d数子,-c小写字母,-C大写字母,-s特殊字符

    [root@lxgyw ~]# yum install -y expect //需要安装扩展包

    [root@lxgyw ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4

    |K&13bR)i/

    3.推荐密码保存工具客户端,支持windowsMacOSIphone以及浏览器插件
    Lastpass
    官方网站

  4. 3.组的基本管理

    组账户信息保存在/etc/group/etc/gshadow两个文件中。

    /etc/group 组账户信息

    [root@node1 ~]# head -2 /etc/group

    root:x:0:

    bin:x:1:bin,daemon

     

    // /etc/group':'
    分割, 分割为4个字段,每个字段的具体含义如下:

    字段名称

    1.组的名称

    2.组的密码(存在/etc/gshadow)

    3.GID信息

    4.仅显示附加成员,基本成员不显示

    /etc/gshadow 组密码信息

    [root@node1 ~]# head -2 /etc/gshadow

    root:::

    bin:::bin,daemon

     

    // /etc/gshadow ':' 分割, 分割为4个字段,每个字段的具体含义如下:

    字段名称

    1.组名称

    2.组密码

    3.组管理员

    4.仅显示附加成员,基本成员不显示

    1.使用groupadd命令新增组groupadd [-g GID] groupname

    //创建基本组, 不指定gid

    [root@node1 ~]# groupadd no_gid

    [root@node1 ~]# tail -n1 /etc/group

    no_gid:x:1000:

     

    //创建基本组, 指定gid5555

    [root@node1 ~]# groupadd -g 5555 yes_gid

    [root@node1 ~]# tail -n1 /etc/group

    yes_gid:x:5555:

     

    //创建系统组,gid201-999

    [root@lxgyw ~]# groupadd -r sys_group

    [root@lxgyw ~]# tail -n1 /etc/group

    sys_group:x:990:

    2.使用groupmod命令新增组

    //-g 修改组gid

    [root@lxgyw ~]# groupmod -g 1111 no_gid

    [root@lxgyw ~]# tail -1 /etc/group

    no_gid:x:1111:

     

    //-n 修改组名称

    [root@lxgyw ~]# groupmod -n active_group yes_gid

    [root@lxgyw ~]# tail -1 /etc/group

    active_group:x:5555:

    3.使用groupdel删除组

    该命令没有特殊选项,如果一个用户有基本组和附加组,只能删除附加组,不能删除基本组

    #删除组

    [root@lxgyw ~]# groupdel active_group

     

    #删除用户附加组

    [root@docker ~]# id lxgyw

    uid=1069(lxgyw) gid=5005(lxgyw) groups=5005(lxgyw),5004(devops)

    [root@docker ~]# groupdel devops

    [root@docker ~]# id lxgyw

    uid=1069(lxgyw) gid=5005(lxgyw) groups=5005(lxgyw)

     

    #无法删除用户基本组

    [root@lxgyw ~]# tail -n1 /etc/group

    network_sa:x:5008:

    [root@lxgyw ~]# groupdel network_sa

    groupdel: cannot remove the primary group of user 'bgx_lxgyw'

    #只有删除用户或者用户变更基本后,方可删除该组

    4.使用gpasswd设置组密码

    [root@lxgyw ~]# groupadd devops

    [root@lxgyw ~]# gpasswd devops

    Changing the password for group devops

    New Password:

    Re-enter new
    password:

    5.使用newgrp命令切换基本组身份

    //检查账户信息

    [root@docker ~]# useradd lxgyw

    [root@docker ~]# id lxgyw

    uid=1069(lxgyw) gid=5005(lxgyw) groups=5005(lxgyw)

     

    //切换普通用户

    [root@docker ~]# su - lxgyw

     

    //创建新文件,并验证权限

    [lxgyw@docker ~]$ touch file_roots

    [lxgyw@docker ~]$ ll

    -rw-rw-r-- 1 lxgyw lxgyw 0 Jun 13
    10:06 file_roots

     

    //切换组信息

    [lxgyw@docker ~]$ newgrp devops

    Password:

     

    //建立文件,检查权限

    [lxgyw@docker ~]$ touch file_test

    [lxgyw@docker ~]$ ll

    total 0

    -rw-rw-r-- 1 lxgyw lxgyw 0 Jun 13
    10:06 file_roots

    -rw-r--r-- 1 lxgyw devops 0 Jun 13
    10:08 file_test

  5. 4.用户身份切换

    Linux系统中,有时候普通用户有些事情是没办法操作,除非是root管理员用户才能做到。这时就需要临时切换到root管理员身份来做事了。那么在学习如何切换用户之前,我们先来了解下用户工作环境。

    1.Shell分类

    交互式shell //等待用户输入执行的命令(终端操作,需要不断提示)

    非交互式shell //执行shell脚本, 脚本执行结束后shell自动退出

     

    登陆shell //需要输入用户名和密码才能进入shell su - lxgyw

    非登陆shell //不需要输入用户和密码就能进入,比如执行sh, bash, su username

     

    //查看登陆shell

    [root@lxgyw ~]# pstree

     

    //临时设置,永久设置需要写配置文件

    [root@lxgyw ~]# export PS1='[\h@\u \t]#'

    [lxgyw@root 02:06:28]#

    2.bash shell配置文件

    Bash的配置文件保存用户的工作环境

     

    个人配置文件: ~/.bash_profile ~/.bashrc

    全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc

     

    profile类文件, 设定环境变量, 登陆前运行的脚本和命令

    bashrc 类文件, 设定本地变量, 定义命令别名

     

    全局配置和个人配置设置冲突, 优先使用个人配置准

    3.shell配置文件应用顺序

    //登录式shell配置文件执行顺序

    /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc

     

    //非登陆式shell配置文件执行顺序

    ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh

     

     

    #验证登陆shell和非登陆shell配置文件执行顺序, 在每个配置文件加入一段 "echo"即可。

    #最后通过登陆shell和非登录shell方式登陆linux, 即可验证执行顺序。

    4.如果全局配置和个人配置出现冲突, 那么如何验证呢?

    编辑全局配置 /etc/profile 新增一行: PS1='[\h@\u \t]#'

    [lxgyw@root 02:16:57]# //当前终端shell环境

     

    编辑个人配置 ~/.bash_profile 新增一行: PS1='[\u@\H]#'

     

     

    [lxgyw@root 02:18:27]#su bgx_lxgyw

    [bgx_lxgyw@lxgyw root]$

     

    [lxgyw@root 02:18:34]# su - bgx_lxgyw

    [bgx_lxgyw@lxgyw.com]#

    5.创建用户,并登录系统

    [root@node1 ~]# useradd lxgyw

    [root@node1 ~]# echo "123"|passwd --stdin lxgyw

     

    //使用lxgyw用户登录当前Linux系统

    ~ ssh lxgyw@192.168.56.111

    lxgyw@192.168.56.111's password:

    [lxgyw@node1 ~]$

     

    //可以使用whoami查看当前登录用户

    [lxgyw@node1 ~]$ whoami

    lxgyw

    6.切换用户,使用命令su [-] username
    su
    命令后面跟-代表进入登陆式shell 如果su命令后不加-代表进入非登陆式shell,他们之间的区别在于加载的环境变量不一样。

    普通用户su -代表直接切换至root用户身份, 但需要输入root用户密码。
    超级管理员root用户使用su - username切换普通用户不需要输入任何密码。

    [lxgyw@node1 ~]$ pwd

    /home/lxgyw

     

    //不加
    '-'
    切换到root账户下时,当前目录没有变化

    [lxgyw@node1 ~]$ su

    密码:

    [root@node1 lxgyw]# pwd

    /home/lxgyw

    [root@node1 lxgyw]# exit

    exit

     

    //
    '-'
    切换到root账户,当前目录为root账户的家目录。

    [lxgyw@node1 ~]$ su -

    密码:

    [root@node1 ~]# pwd

    /root

    3.以某个用户的身份执行某个服务,使用命令su -c username

    [root@lxgyw ~]# su - lxgyw -c 'ifconfig'

    [root@lxgyw ~]# su - lxgyw -c 'ls ~'

  6. 5.用户身份提权

    su命令在切换用户身份时,如果每个普通用户都能拿到root用户的密码,当其中某个用户不小心泄漏了root的密码,那系统会变得非常不安全。
    为了改进这个问题,从而产生了sudo这个命令。
    sudo执行一个仅有root身份才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。
    默认只有root用户能使用sudo命令,普通用户想要使用sudo需要root预先设定,即使用 visudo命令去编辑相关的配置文件/etc/sudoers

    Centos7提权

    [root@node1 ~]# usermod bgx -G wheel

    //日志审计

    [root@node1 ~]$ sudo tail -f /var/log/secure

    CentOS6提权

    #1.系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装

    [root@lxgyw ~]# yum install -y sudo

     

    #2.使用`visudo`命令编辑sudo配置文件, 相当于 vim /etc/sudoers`配置文件

    [root@lxgyw ~]# visudo #会对配置进行验证

    lxgyw ALL=(ALL) /bin/rm, /bin/cp #新增

     

    #3.配置选项详解

    1.用户名
    2.
    主机名
    3.
    角色名
    4.
    命令名

    root ALL= (ALL) ALL

    lxgyw ALL 使用最高角色执行 /bin/rm, /bin/cp #允许使用sudo执行命令

    lxgyw ALL=(ALL) NOPASSWD:/bin/cp, /bin/rm //不需要密码使用rmcp命令

     

    #4.使用visudo -c检查配置文件

    [root@lxgyw ~]# visudo -c

    /etc/sudoers: parsed OK

    4.普通用户验证sudo权限

    #1.切换普通用户

    [root@lxgyw ~]# su - lxgyw

     

    #2.检查普通用户sudo权限明细

    [lxgyw@lxgyw ~]$ sudo -l

    ...

    User lxgyw may run the following commands on this
    host:

    (ALL) /bin/rm, (ALL) /bin/cp

     

    #3.普通用户删除opt目录,删除失败

    [lxgyw@lxgyw ~]$ rm -rf /opt/

    rm: cannot remove `/opt': Permission denied

     

    #4.使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码

    [lxgyw@lxgyw ~]$ sudo rm -rf /opt

    5.sudo免密码配置选项

    #1.普通用户执行sudo不需要输入密码配置

    [root@lxgyw ~]# visudo

    lxgyw ALL=(ALL) /bin/rm, /bin/cp
    #
    默认

    lxgyw ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp
    #
    修改后

     

    #2.默认普通用户无权删除

    [lxgyw@lxgyw ~]$ rm -f /root/002

    rm: cannot remove `/root/002': Permission denied

     

    #3.验证sudo免密码执行权限

    [lxgyw@lxgyw ~]$ sudo rm -f /root/002

    6.sudo配置组

    //如果每增加一个用户需配置一行sudo,这样设置非常麻烦。所以可以进行如下设置

     

    %gbx ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp
    #
    新增组

    //group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。

     

    //创建用户加入该组

    [root@lxgyw ~]# groupadd bgx

    [root@lxgyw ~]# useradd bgx1 -g bgx

    [root@lxgyw ~]# useradd bgx2 -g bgx

     

    //root用户建立目录

    [root@lxgyw ~]# mkdir /root/bgx_sudo

     

    //切换用户并删除测试

    [root@node1 ~]# su - bgx1

    [bgx1@lxgyw ~]$ rm -rf /root/bgx_sudo

    rm: cannot remove `/root/bgx_sudo': Permission denied

     

    //使用sudo

    [bgx1@lxgyw ~]$ sudo rm -rf /root/bgx_sudo

    当然配置文件/etc/sudoers包含了诸多配置项,可以使用命令man sudoers来获得帮助信息。

    下面介绍一个很实用的案例,我们的需求是将Linux服务器设置成如下:
    1.
    仅允许使用普通账户登陆Linux服务器,禁止root直接登录
    2.
    可以让普通用户不输入密码就能sudo su -切换到root账户

    //禁止root用户登陆

    [root@lxgyw ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config

    [root@lxgyw ~]# systemctl restart sshd

     

    //配置sudo权限

    [root@lxgyw ~]# visudo

    User_Alias USER_SU = bgx1,bgx2,lxgyw

    Cmnd_Alias SU = /bin/su

    USER_SU ALL=(ALL) NOPASSWD:SU

     

    //使用root登陆服务器失败

    ~ ssh root@192.168.56.11

    root@192.168.56.11's password:

    Permission denied, please try again.

     

    //使用普通用户登陆服务器

    ~ ssh lxgyw@192.168.56.11

    lxgyw@192.168.56.11's password:

    Last login: Mon Oct 30 09:28:21
    2017 from 192.168.56.2

     

    //使用sudo提权至root用户

    [lxgyw@lxgyw ~]$ sudo su -

    [root@lxgyw ~]#

    7.sudo执行流程:

    1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存
    2.
    如果存在则不需要输入密码, 否则需要输入用户与密码
    3.
    输入密码会检测是否该用户是否拥有该权限
    4.
    如果有则执行,否则报错退出


  7. 6.日志相关审计

    通过sudosyslog配合实现对所有用户进行权限的日志审计并将记录日志集中管理,实施后让所有运维和开发执行的sudo命令都有记录可查,杜绝了内部人员的操作安全隐患。
    sudo
    日志审计,专门针对sudo命令的系统用户记录其执行的命令相关信息,所谓sudo命令日志审计,并不记录普通用户的操作,而是记录执行sudo命令的用户操作。

    1.安装sudorysylog

    [root@node1 ~]# yum install -y sudo rsyslog

     

    //检测是否安装成功

    [root@node1 ~]# rpm -qa sudo rsyslog

    rsyslog-5.8.10-10.el6_6.x86_64

    sudo-1.8.6p3-19.el6.x86_64

    2.配置/etc/sudoers记录日志路径

    [root@node1 ~]# echo "Defaults logfile=/var/log/sudo.log" >>/etc/sudoers

     

    //查看追加的日志配置

    [root@node1 ~]# tail -1 /etc/sudoers

    Defaults logfile=/var/log/sudo.log

     

    //检查语法

    [root@node1 ~]# visudo -c

    /etc/sudoers: parsed OK

    3.配置rsyslog日志服务

    [root@node1 ~]# echo "local2.debug /var/log/sudo.log" >>/etc/rsyslog.conf

     

    //重启rsyslog服务

    [root@node1 ~]# /etc/init.d/rsyslog restart

    Shutting down system logger: [ OK ]

    Starting system logger: [ OK ]

    4.普通用户使用sudo权限验证日志记录

    //使用普通执行sudo命令

    [lxgyw@node1 ~]$ rm -rf /root/test/

    rm: 无法删除"/root/test": 权限不够

    [lxgyw@node1 ~]$ sudo rm -rf /root/test/

     

    //检查用户在什么时间执行过什么操作

    [lxgyw@node1 ~]$ cat /var/log/sudo.log

    Nov 7
    07:56:58 : lxgyw : TTY=pts/1 ; PWD=/home/lxgyw ; USER=root ;

    COMMAND=/bin/rm -rf /root/test/

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

        


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。