2023.5.31 Linux系统⽤户管理

发布时间 2023-05-31 22:39:29作者: 必兮相语--

1.⽤户基本概述
1.1 ⽤户相关的命令
1.2 ⽤户创建的原理
2. ⽤户密码管理
3.组的基本管理
4.⽤户身份切换
5.⽤户身份提权
6.⽇志相关审计

1.⽤户基本概述
Linu属于多⽤户操作系统,在windows中,可以创建多个⽤户,但不允许同⼀时间多个⽤户进⾏系统登陆,但是
Linux可以同时⽀持多个⽤户同时登陆操作系统,登陆后互相之间并不影响。

⽤户和组存在的意义
1.系统上的每⼀个进程(运⾏的程序)都需要特定的⽤户运⾏
2.每⼀个⽂件都有特定的⽤户拥有
3.访问⼀个⽂件或⽬录受到⽤户的限制
4.进程能够以何种⽅式访问某⼀个⽂件或⽬录, 与进程所关联的⽤户有关
查看当前登录的⽤户信息

[root@wing /]# id
uid=0(root) gid=0(root) groups=0(root)

⽤户Uid分类
0 超级管理员(拥有最⾼权限)
1-200 系统⽤户,由系统分配给系统进程使⽤
201-999 系统⽤户,⽤来运⾏服务账户,不需要登陆系统(动态分配)
1000+ 常规普通⽤户
注意: 在CentOS7系统之前, UID1-499⽤于系统⽤户, ⽽UID 500+则⽤于普通⽤户。
组的类别
基本组 优先使⽤基本组, ⽤户只能属于⼀个基本组, ⽤户默认基本组
附加组 基本组不能满⾜授权要求, 创建附加组, ⽤户可以属于多个附加组
私有组 私有组, 创建⽤户时如果没有指定基本组, 系统会创建和⽤户同名的组

 

 

⽤户相关配置⽂件
⽤户的信息存放在 /etc/passwd ⽤户的密码都保存在 /etc/shadow 这两个⽂件是 linux 系统中最重要的⽂件之
⼀。
如果没有这两个⽂件或者这两个⽂件出问题,会导致⽆法正常登录 linux 系统。
/etc/passwd 账户⽂件
/etc/shadow ⽤户密码⽂件
[root@wing /]# id
uid=0(root) gid=0(root) groups=0(root)
[root@node1 ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash /bin/sh
// /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@wing ~]# 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 更改⽤户密码密码使⽤情况
[root@wing ~]# 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.标志            //保留
-d //设置最近⼀次更改密码时间, 0下次登陆系统强制修改密码
-m //设置⽤户两次改变密码之间使⽤"最⼩天数"
-M //设置⽤户两次改变密码之间使⽤"最⼤天数"
-W //设置密码更改警告时间 将过期警告天数设为“警告天数”
-I //设置密码过期天数后, 密码为失效状态
-E //设置⽤户过期时间, 账户失效后⽆法登陆
-l //显示⽤户信息
//修改时间为2014年08⽉31⽇,和图中时间匹配,⽅便后续验证
[root@wing ~]# date -s '20140831'
Sun Aug 31 00:00:00 CST 2014
[root@wing ~]# date
Sun Aug 31 00:00:01 CST 2014
[root@wing ~]# useradd bgx1
[root@wing ~]# echo "123" |passwd --stdin bgx1
[root@wing ~]# tail -1 /etc/shadow
bgx1:!!:16312:0:99999:7:::

//设置最近⼀次修改密码时间
[root@wing ~]# chage -d "2014-09-01" bgx1
[root@wing ~]# tail -n1 /etc/shadow
bgx1:!!:16314:0:99999:7:::
//设置最短使⽤密码时间
[root@wing ~]# chage -m 2 bgx1
[root@wing ~]# tail -n1 /etc/shadow
bgx1:!!:16314:2:99999:7:::
//设置密码最⻓使⽤时间
[root@wing ~]# chage -M 15 bgx1
[root@wing ~]# tail -n1 /etc/shadow
bgx1:!!:16314:2:15:7:::
//设置密码警告时间
[root@wing ~]# chage -W 6 bgx1
[root@wing ~]# tail -n1 /etc/shadow
bgx1:!!:16314:2:15:6:::
[root@wing ~]# chage -W 7 bgx1
[root@wing ~]# tail -n1 /etc/shadow
bgx1:!!:16314:2:15:7:::
//设置密码过期时间
[root@wing ~]# chage -I 5 bgx1
[root@wing ~]# tail -n1 /etc/shadow
bgx1:!!:16314:2:15:6:5::
//设置⽤户过期时间
[root@wing ~]# chage -E "20115-08-31" bgx1
[root@wing ~]# tail -n1 /etc/shadow
bgx1:!!:16314:2:15:6:5:6627567:
[root@wing ~]# 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.普通⽤户登陆系统后, 会提示警告密码还剩多少天过期

 

1.1 ⽤户相关的命令
添加⽤户前需要确定
确定⽤户的默认组是否有特殊要求
确定⽤户是否允许登陆
确定⽤户的密码策略
确定⽤户的有效期
确定⽤户的uid是否有特殊要求
1.使⽤ useradd 命令新增⽤户, 注意: adduser 命令软链接指向 useradd 命令
2.使⽤ usermod 命令修改⽤户组
[root@wing ~]# date -s "2014-09-12"
3.普通⽤户登陆系统后, 强制要求修改密码
[root@wing ~]# date -s "2014-09-18"
4.普通⽤户登陆系统后, 提示账户已过期
[root@wing ~]# date -s "2014-09-23"
'-u' 指定⽤户的UID,不能和现有ID冲突
'-g' 指定⽤户⽤户默认基本组
'-G' 指定⽤户附加组,⽤逗号隔开添加多个附加组
'-d' 指定⽤户家⽬录
'-c' 指定⽤户注释信息
'-M' 不建⽴家⽬录
'-s' 指定⽤户默认shell
'-r' 创建系统账户, 没有家⽬录
//创建bgx⽤户,指定UID 5001,基本组students 附加组sa,dba 注释信息:2018 new student, 登陆的
shell:/bin/bash
[root@wing ~]# groupadd sa
[root@wing ~]# groupadd dba
[root@wing ~]# groupadd students
[root@wing ~]# useradd -u 5001 -g students -G sa,dba -c "2018new student" -d /home/bgx
-s /bin/bash bgx
[root@wing ~]# 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
'-u'  修改⽤户的UID
'-g'  修改⽤户所属的基本组GID
'-G'  修改⽤户附加组, 使⽤逗号隔开多个附加组, 覆盖原有的附加组

'-a'  追加更多的附加组, 必须和-G使⽤: -aG 追加附加组
'-m'  家⽬录迁移, 必须和-d⼀起使⽤, 移动⽤户的家⽬录到新的位置
'-d'  指定⽤户的家⽬录新位置
'-c'  修改⽤户的注释信息
'-s'  更改⽤户使⽤的shell
'-l'  更改⽤户登录名
'-L'  锁定⽤户
'-U'  解锁⽤户
[root@wing ~]# grep "bgx" /etc/passwd
bgx:x:5001:505:2018 new student:/home/bgx:/bin/bash
//修改⽤户uid,gid, 附加组, 注释信息, ⽤户家⽬录, 登录shell, 登录名
//建⽴组,指定组gid
[root@wing ~]# groupadd -g 5008 network_sa
[root@wing ~]# groupadd -g 5009 devops
//修改⽤户属性
[root@wing ~]# usermod -u 6001 -g5008 -a -G 5009 -c "2019 new student" -md /bgx -s
/bin/sh -l bgx_wing bgx
//检查是否修改成功
[root@wing ~]# grep "bgx" /etc/passwd
bgx_wing:x:6001:5008:2019 new student:/bgx:/bin/sh
[root@wing ~]# id bgx_wing
uid=6001(bgx_wing) gid=5008(network_sa)
groups=5008(network_sa),503(sa),504(dba),5009(devops)
//验证家⽬录
[root@wing ~]# ll -d /bgx
drwx------. 2 bgx_wing network_sa 4096 2014-09-23 00:13 /bgx
锁定⽤户
[root@wing ~]# echo "123" |passwd --stdin bgx_wing
[root@wing ~]# usermod -L bgx_wing
//⽆法正常登录系统
➜ ~ ssh bgx_wing@192.168.56.11
bgx_wing@192.168.56.11's password:
Permission denied, please try again.
解锁⽤户
[root@wing ~]# usermod -U bgx_wing
//正常登录系统
➜ ~ ssh bgx_wing@192.168.56.11
bgx_wing@192.168.56.11's password:

Welcome to Aliyun Esc Linux
-sh-4.1$

 

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

 

//安装finger命令
[root@wing ~]# yum install finger -y
[root@wing ~]# finger wing
Login: bgx_wing      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@wing ~]# chfn bgx_wing
Changing finger information for bgx_wing.
Name [2019 new student]: 2020 new student
Office []: 110
Office Phone []: 89270000
Home Phone []: 15210xxxxxx
//使⽤finger再次检查
[root@wing ~]# finger bgx_wing
Login: bgx_wing    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@wing ~]# chsh bgx_wing
Changing shell for bgx_wing.
New shell [/bin/sh]: /bin/bash
Shell changed.
[root@wing ~]# grep "bgx_wing" /etc/passwd
bgx_wing:x:6001:5008:2020 new student,110,89270000,15210xxxxxx:/bgx:/bin/bash

 

6.检查⽤户登陆情况

[root@wing ~]# who
wing pts/0    2017-10-30 09:30 (192.168.56.2)
bgx_wing pts/1  2014-09-23 01:33 (192.168.56.2)
root   pts/2     2017-10-30 07:13 (192.168.56.2)
[root@wing ~]# 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@wing ~]# userdel user1
[root@wing ~]# ll /home/user1/ -d
drwx------. 3 501 501 4096 2017-11-15 12:40 /home/user1/
//连同家⽬录⼀起删除
[root@wing ~]# userdel -r user1

 

1.2 ⽤户创建的原理
Linux创建⽤户默认会读取 /etc/default/useradd 的配置⽂件,如果当我指定参数时,使⽤指定参数,如果不指
定参数,默认使⽤ /etc/default/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

2. ⽤户密码管理
创建完账户后,默认是没有设置密码的,所以该账户是没有办法登陆操作系统。只有使⽤ passwd 设置好密码后⽅
可登录系统。
使⽤ passwd 为⽤户创建密码时,为了安全起⻅,请尽量设置复杂⼀些。可以按照如下规则设置密码:
1.密码的⻓度最好⼤于10位字符
2.密码中包含⼤⼩写字⺟数字以及特殊字符 ! @ # $
3.不规则性(不要出现⾃⼰名字、公司名字、⾃⼰电话、等等简单的密码)
需要注意:
1.普通⽤户只能更改⾃⼰的密码(密码必须满⾜8位字符)
2.管理员⽤户能更改任何⼈的密码(密码⻓度⽆限制)
1.使⽤ passwd 命令修改⽤户密码
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 - wing
[wing@student ~]$
语法: passwd [username]
//'passwd'后⾯不加[username]则是修改当前登陆终端⽤户的密码。
//如果你登陆的是root管理员⽤户,后⾯可以指定要修改的⽤户。
//只有root管理员才可以修该其他⽤户的密码,普通账户只能修改⾃⼰的密码,并且普通⽤户没有修改其他⽤户密码的
权限
//root管理员⽤户登陆,修改root⽤户密码
[root@localhost ~]# passwd
更改⽤户 root 的密码。
新的 密码:
重新输⼊新的 密码:
vx: WingspanGo
vx: WingspanGo
2.随机复杂密码⽣成的⽅式
3.推荐密码保存⼯具客户端,⽀持 windows、MacOS、Iphone 以及浏览器插件
Lastpass官⽅⽹站
3.组的基本管理
组账户信息保存在 /etc/group 和 /etc/gshadow 两个⽂件中。
/etc/group 组账户信息
passwd:所有的身份验证令牌已经成功更新。
//root⽤户登陆,修改其他⽤户的密码
[root@localhost ~]# passwd wing
更改⽤户 wing 的密码
新的 密码:
重新输⼊新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
//普通⽤户修改root管理员密码
[bgx_wing@wing ~]$ passwd root
passwd: Only root can specify a user name.
//⽆需⽤户交互修改密码, 将前者的输出结果, 成为后者的输⼊
[root@wing ~]# echo "123456" | passwd --stdin wing
Changing password for user wing.
passwd: all authentication tokens updated successfully.
//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
wing
//2.mkpasswd密码⽣成⼯具, -l设定密码⻓度,-d数⼦,-c⼩写字⺟,-C⼤写字⺟,-s特殊字符
[root@wing ~]# yum install -y expect  //需要安装扩展包
[root@wing ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4
|K&13bR)i/

/etc/gshadow 组密码信息
1.使⽤ groupadd 命令新增组 groupadd [-g GID] groupname
2.使⽤ groupmod 命令新增组
[root@node1 ~]# head -2 /etc/group
root:x:0:
bin:x:1:bin,daemon
// /etc/group由':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组的名称
2.组的密码(存在/etc/gshadow)
3.组GID信息
4.仅显示附加成员,基本成员不显示
[root@node1 ~]# head -2 /etc/gshadow
root:::
bin:::bin,daemon
// /etc/gshadow由 ':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组名称
2.组密码
3.组管理员
4.仅显示附加成员,基本成员不显示
//创建基本组, 不指定gid
[root@node1 ~]# groupadd no_gid
[root@node1 ~]# tail -n1 /etc/group
no_gid:x:1000:
//创建基本组, 指定gid为5555
[root@node1 ~]# groupadd -g 5555 yes_gid
[root@node1 ~]# tail -n1 /etc/group
yes_gid:x:5555:
//创建系统组,gid从201-999
[root@wing ~]# groupadd -r sys_group
[root@wing ~]# tail -n1 /etc/group
sys_group:x:990:

3.使⽤ groupdel 删除组
该命令没有特殊选项,如果⼀个⽤户有基本组和附加组,只能删除附加组,不能删除基本组
4.使⽤ gpasswd 设置组密码
5.使⽤ newgrp 命令切换基本组身份
//-g 修改组gid
[root@wing ~]# groupmod -g 1111 no_gid
[root@wing ~]# tail -1 /etc/group
no_gid:x:1111:
//-n 修改组名称
[root@wing ~]# groupmod -n active_group yes_gid
[root@wing ~]# tail -1 /etc/group
active_group:x:5555:
#删除组
[root@wing ~]# groupdel active_group
#删除⽤户附加组
[root@docker ~]# id wing
uid=1069(wing) gid=5005(wing) groups=5005(wing),5004(devops)
[root@docker ~]# groupdel devops
[root@docker ~]# id wing
uid=1069(wing) gid=5005(wing) groups=5005(wing)
#⽆法删除⽤户基本组
[root@wing ~]# tail -n1 /etc/group
network_sa:x:5008:
[root@wing ~]# groupdel network_sa
groupdel: cannot remove the primary group of user 'bgx_wing'
#只有删除⽤户或者⽤户变更基本后,⽅可删除该组
[root@wing ~]# groupadd devops
[root@wing ~]# gpasswd devops
Changing the password for group devops
New Password:
Re-enter new password:
//检查账户信息
[root@docker ~]# useradd wing
[root@docker ~]# id wing
uid=1069(wing) gid=5005(wing) groups=5005(wing)
//切换普通⽤户
[root@docker ~]# su - wing

4.⽤户身份切换
Linux 系统中,有时候普通⽤户有些事情是没办法操作,除⾮是 root 管理员⽤户才能做到。这时就需要临时切换
到 root 管理员身份来做事了。那么在学习如何切换⽤户之前,我们先来了解下⽤户⼯作环境。
1. Shell 分类
2. bash shell 配置⽂件
//创建新⽂件,并验证权限
[wing@docker ~]$ touch file_roots
[wing@docker ~]$ ll
-rw-rw-r-- 1 wing wing 0 Jun 13 10:06 file_roots
//切换组信息
[wing@docker ~]$ newgrp devops
Password:
//建⽴⽂件,检查权限
[wing@docker ~]$ touch file_test
[wing@docker ~]$ ll
total 0
-rw-rw-r-- 1 wing wing 0 Jun 13 10:06 file_roots
-rw-r--r-- 1 wing devops   0 Jun 13 10:08 file_test
交互式shell  //等待⽤户输⼊执⾏的命令(终端操作,需要不断提示)
⾮交互式shell  //执⾏shell脚本, 脚本执⾏结束后shell⾃动退出
登陆shell   //需要输⼊⽤户名和密码才能进⼊shell su - wing
⾮登陆shell  //不需要输⼊⽤户和密码就能进⼊,⽐如执⾏sh, bash, su username
//查看登陆shell
[root@wing ~]# pstree
//临时设置,永久设置需要写配置⽂件
[root@wing ~]# export PS1='[\h@\u \t]#'
[wing@root 02:06:28]#
Bash的配置⽂件保存⽤户的⼯作环境
个⼈配置⽂件: ~/.bash_profile ~/.bashrc
全局配置⽂件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
profile类⽂件, 设定环境变量, 登陆前运⾏的脚本和命令
bashrc 类⽂件, 设定本地变量, 定义命令别名
全局配置和个⼈配置设置冲突, 优先使⽤个⼈配置准
vx: WingspanGo
vx: WingspanGo
3. shell 配置⽂件应⽤顺序
4.如果全局配置和个⼈配置出现冲突, 那么如何验证呢?
5.创建⽤户,并登录系统
6.切换⽤户,使⽤命令 su [-] username
su命令后⾯跟 - 代表进⼊登陆式 shell 如果su命令后不加 - 代表进⼊⾮登陆式 shell ,他们之间的区别在于加载
的环境变量不⼀样。
普通⽤户 su - 代表直接切换⾄ root ⽤户身份, 但需要输⼊ root ⽤户密码。
超级管理员 root ⽤户使⽤ su - username 切换普通⽤户不需要输⼊任何密码。
//登录式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, 即可验证执⾏顺序。
编辑全局配置 /etc/profile   新增⼀⾏: PS1='[\h@\u \t]#'
[wing@root 02:16:57]#   //当前终端shell环境
编辑个⼈配置 ~/.bash_profile   新增⼀⾏: PS1='[\u@\H]#'
[wing@root 02:18:27]#su bgx_wing
[bgx_wing@wing root]$
[wing@root 02:18:34]# su - bgx_wing
[bgx_wing@wing.com]#
[root@node1 ~]# useradd wing
[root@node1 ~]# echo "123"|passwd --stdin wing
//使⽤wing⽤户登录当前Linux系统
➜ ~ ssh wing@192.168.56.111
wing@192.168.56.111's password:
[wing@node1 ~]$
//可以使⽤whoami查看当前登录⽤户
[wing@node1 ~]$ whoami
wing
[wing@node1 ~]$ pwd
vx: WingspanGo
vx: WingspanGo
3.以某个⽤户的身份执⾏某个服务,使⽤命令 su -c username
5.⽤户身份提权
Centos7 ⽇志审计
CentOS7 提权
/home/wing
//不加 '-' 切换到root账户下时,当前⽬录没有变化
[wing@node1 ~]$ su
密码:
[root@node1 wing]# pwd
/home/wing
[root@node1 wing]# exit
exit
//加 '-'切换到root账户,当前⽬录为root账户的家⽬录。
[wing@node1 ~]$ su -
密码:
[root@node1 ~]# pwd
/root
[root@wing ~]# su - wing -c 'ifconfig'
[root@wing ~]# su - wing -c 'ls ~'
`su`命令在切换⽤户身份时,如果每个普通⽤户都能拿到`root`⽤户的密码,当其中某个⽤户不⼩⼼泄漏了`root`的
密码,那系统会变得⾮常不安全。
为了改进这个问题,从⽽产⽣了`sudo`这个命令。
`sudo`执⾏⼀个仅有`root`身份才能执⾏的命令是可以办到的,但是需要输⼊密码,这个密码并不是`root`的密码
⽽是⽤户⾃⼰的密码。
默认只有`root`⽤户能使⽤`sudo`命令,普通⽤户想要使⽤`sudo`需要`root`预先设定,即使⽤ `visudo`命令
去编辑相关的配置⽂件`/etc/sudoers
[root@node1 ~]# usermod bgx -G wheel
//⽇志审计
[root@node1 ~]$ sudo tail -f /var/log/secure
#1.系统安装后就有sudo命令,如果没有sudo命令,可通过如下⽅式安装
[root@wing ~]# yum install -y sudo
#2.使⽤`visudo`命令编辑sudo配置⽂件, 相当于 vim /etc/sudoers`配置⽂件
[root@wing ~]# visudo #会对配置进⾏验证
wing ALL=(ALL) /bin/rm, /bin/cp #新增
#3.配置选项详解

4.普通⽤户验证 sudo 权限
5.sudo免密码配置选项
6. sudo 配置组
1.⽤户名   2.主机名  3.⻆⾊名    4.命令名
root      ALL=  (ALL)      ALL
wing   ALL   使⽤最⾼⻆⾊执⾏  /bin/rm, /bin/cp #允许使⽤sudo执⾏命令
wing  ALL=(ALL) NOPASSWD:ALL //不需要密码使⽤rm、cp命令
#4.使⽤visudo -c检查配置⽂件
[root@wing ~]# visudo -c
/etc/sudoers: parsed OK
#1.切换普通⽤户
[root@wing ~]# su - wing
#2.检查普通⽤户sudo权限明细
[wing@wing ~]$ sudo -l
...
User wing may run the following commands on this host:
 (ALL) /bin/rm, (ALL) /bin/cp
#3.普通⽤户删除opt⽬录,删除失败
[wing@wing ~]$ rm -rf /opt/
rm: cannot remove `/opt': Permission denied
#4.使⽤sudo提权,验证⽤户权限是否可⽤,需要输⼊普通⽤户的密码
[wing@wing ~]$ sudo rm -rf /opt
#1.普通⽤户执⾏sudo不需要输⼊密码配置
[root@wing ~]# visudo
wing ALL=(ALL) /bin/rm, /bin/cp #默认
wing  ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #修改后
#2.默认普通⽤户⽆权删除
[wing@wing ~]$ rm -f /root/002
rm: cannot remove `/root/002': Permission denied
#3.验证sudo免密码执⾏权限
[wing@wing ~]$ sudo rm -f /root/002
//如果每增加⼀个⽤户需配置⼀⾏sudo,这样设置⾮常麻烦。所以可以进⾏如下设置
%bgx ALL=(ALL)   NOPASSWD:/bin/rm, /bin/cp #新增组
//group1这个组的所有⽤户都拥有sudo的权⼒。接下来只需要将⽤户加⼊该组即可。

当然配置⽂件 /etc/sudoers 包含了诸多配置项,可以使⽤命令 man sudoers 来获得帮助信息。
下⾯介绍⼀个很实⽤的案例,我们的需求是将 Linux 服务器设置成如下:
1.仅允许使⽤普通账户登陆 Linux 服务器,禁⽌root直接登录
2.可以让普通⽤户不输⼊密码就能 sudo su - 切换到 root 账户
7. sudo 执⾏流程:
//创建⽤户加⼊该组
[root@wing ~]# groupadd bgx
[root@wing ~]# useradd bgx1 -g bgx
[root@wing ~]# useradd bgx2 -g bgx
//root⽤户建⽴⽬录
[root@wing ~]# mkdir /root/bgx_sudo
//切换⽤户并删除测试
[root@node1 ~]# su - bgx1
[bgx1@wing ~]$ rm -rf /root/bgx_sudo
rm: cannot remove `/root/bgx_sudo': Permission denied
//使⽤sudo
[bgx1@wing ~]$ sudo rm -rf /root/bgx_sudo
//禁⽌root⽤户登陆
[root@wing ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g'
/etc/ssh/sshd_config
[root@wing ~]# systemctl restart sshd
//配置sudo权限
[root@wing ~]# visudo
User_Alias USER_SU = bgx1,bgx2,wing
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 wing@192.168.56.11
wing@192.168.56.11's password:
Last login: Mon Oct 30 09:28:21 2017 from 192.168.56.2
//使⽤sudo提权⾄root⽤户
[wing@wing ~]$ sudo su -
[root@wing ~]#

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

 

6.⽇志相关审计

通过 sudo 和 syslog 配合实现对所有⽤户进⾏权限的⽇志审计并将记录⽇志集中管理,实施后让所有运维和开发
执⾏的sudo命令都有记录可查,杜绝了内部⼈员的操作安全隐患。
sudo⽇志审计,专⻔针对sudo命令的系统⽤户记录其执⾏的命令相关信息,所谓sudo命令⽇志审计,并不记录普
通⽤户的操作,⽽是记录执⾏sudo命令的⽤户操作。
1.安装sudo、rysylog
2.配置 /etc/sudoers 记录⽇志路径
3.配置 rsyslog ⽇志服务
4.普通⽤户使⽤sudo权限验证⽇志记录
[root@node1 ~]# yum install -y sudo rsyslog
//检测是否安装成功
[root@node1 ~]# rpm -qa rsyslog
rsyslog-5.8.10-10.el6_6.x86_64
sudo-1.8.6p3-19.el6.x86_64
[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
[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 ]
//使⽤普通执⾏sudo命令
[wing@node1 ~]$ rm -rf /root/test/
rm: ⽆法删除"/root/test": 权限不够
[wing@node1 ~]$ sudo rm -rf /root/test/
//检查⽤户在什么时间执⾏过什么操作
[wing@node1 ~]$ cat /var/log/sudo.log
Nov 7 07:56:58 : wing : TTY=pts/1 ; PWD=/home/wing ; USER=root ;
 COMMAND=/bin/rm -rf /root/test/