写点什么

用户权限 -Linux 系统用户管理

作者:Albert Edison
  • 2022 年 8 月 19 日
    四川
  • 本文字数:11129 字

    阅读完需:约 37 分钟

用户权限-Linux系统用户管理
  • 用户基本概述

  • 用户相关的命令

  • 用户创建的原理

  • 用户密码管理

  • 组的基本管理

  • 用户身份切换

  • 用户身份提权

  • 日志相关审计


用户基本概述

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


用户和组存在的意义
  • 1.系统上的每一个进程(运行的程序)都需要特定的用户运行

  • 2.每一个文件都有特定的用户拥有

  • 3.访问一个文件或目录受到用户的限制

  • 4.进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关

查看当前登录的用户信息
[root@liza ~]# iduid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
复制代码
用户分类
0 超级管理员(拥有最高权限)1-200 系统用户,由系统分配给系统进程使用201-999 系统用户,用来运行服务账户,不需要登陆系统(动态分配)1000+ 常规普通用户注意: 在CentOS7系统之前, UID1-499用于系统用户, 而UID 500+则用于普通用户。
复制代码
组的类别

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


用户相关配置文件

用户的信息存放在/etc/passwd


用户的密码都保存在/etc/shadow


这两个文件是 linux 系统中最重要的文件之一,如果没有这两个文件或者这两个文件出问题,会导致无法正常登录 linux 系统


/etc/passwd 账户文件


[root@liza ~]# head -1 /etc/passwdroot:x:0:0:root:/root:/bin/bash
复制代码


/etc/passwd由 ‘:’ 为分割符, 分为7个字段,每个字段的具体含义如下:字段名称 注释说明1.用户名称 //用户的账号名称2.密码占位符 //存放账户的口令,暂用x表示,密码保存在/etc/shadow3.用户的UID //用户标识号4.用户基本组GID //组标识号5.用户注释 //用户详细信息6.用户家目录 //root家目录是/root普通用户家目录存在/home/username(可自定义)7.用户登录Shell //用户登录Linux使用的shell #cat /etc/shells
复制代码


/etc/shadow 用户密码文件


[root@liza ~]# tail -1 /etc/shadowedc:$6$9H0TfHHa6P1uljAo$ZRZnq9hcIFTY/vTv6A3pdD4/13U6J25XDvSJz8JmOXkI5Dk.HAGaQ3EfRAo6HFpYCm7mImtn6zFAJE54f4KX61::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 //显示用户信息修改时间为2014年08月31日,和图中时间匹配,方便后续验证[root@liza ~]# date -s '20140831'Sun Aug 31 00:00:00 CST 2014[root@liza ~]# dateSun Aug 31 00:00:01 CST 2014[root@liza ~]# useradd xxx[root@liza ~]# echo "123" | passwd --stdin xxx [root@liza ~]# tail -1 /etc/shadowxxx:!!:16312:0:99999:7:::
---设置最近一次修改密码时间[root@liza ~]# chage -d "2014-09-01" xxx[root@liza ~]# tail -n1 /etc/shadowxxx:!!:16314:0:99999:7:::
---设置最短使用密码时间[root@liza ~]# chage -m 2 xxx[root@liza ~]# tail -n1 /etc/shadowxxx:!!:16314:2:99999:7:::

---设置密码最长使用时间[root@liza ~]# chage -M 15 xxx[root@liza ~]# tail -n1 /etc/shadowxxx:!!:16314:2:15:7:::
---设置密码警告时间[root@liza ~]# chage -W 6 xxx[root@liza ~]# tail -n1 /etc/shadowxxx:!!:16314:2:15:6:::[root@liza ~]# chage -W 7 xxx[root@liza ~]# tail -n1 /etc/shadowxxx:!!:16314:2:15:7:::
---设置密码过期时间[root@liza ~]# chage -I 5 xxx[root@liza ~]# tail -n1 /etc/shadowxxx:!!:16314:2:15:7:5::
---设置用户过期时间[root@liza ~]# chage -E "2015-08-31" xxx[root@liza ~]# tail -n1 /etc/shadowxxx:!!:16314:2:15:7:5:16678:
[root@liza ~]# chage -l xxxLast 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@liza ~]# date -s "2014-09-12"3.普通用户登陆系统后, 强制要求修改密码[root@liza ~]# date -s "2014-09-18"4.普通用户登陆系统后, 提示账户已过期[root@liza ~]# date -s "2014-09-23"
复制代码

1、用户相关的命令

  • 添加用户前需要确定

  • 确定用户的默认组是否有特殊要求

  • 确定用户是否允许登陆

  • 确定用户的密码策略

  • 确定用户的有效期

  • 确定用户的 uid 是否有特殊要求

1.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@liza ~]# groupadd sa[root@liza ~]# groupadd dba[root@liza ~]# groupadd students[root@liza ~]# useradd -u 5001 -g students -G sa,dba -c "2018new student" -d /home/bgx -s /bin/bash bgx[root@liza ~]# tail -1 /etc/passwdbgx:x:5001:1005:2018new student:/home/bgx:/bin/bash
---创建系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统[root@liza ~]# useradd mysql -M -s /sbin/nologin [root@liza ~]# useradd -r abc -s /sbin/nologin
复制代码
1.2 使用 usermod 命令修改用户组
'-u'    修改用户的UID'-g'    修改用户所属的基本组GID'-G'    修改用户附加组, 使用逗号隔开多个附加组, 覆盖原有的附加组'-a'    追加更多的附加组, 必须和-G使用: -aG 追加附加组'-m'    家目录迁移, 必须和-d一起使用, 移动用户的家目录到新的位置'-d'    指定用户的家目录新位置  '-c'    修改用户的注释信息 '-s'    更改用户使用的shell'-l'    更改用户登录名'-L'    锁定用户'-U'    解锁用户
复制代码


[root@liza ~]# grep "bgx" /etc/passwdbgx:x:5001:1005:2018new student:/home/bgx:/bin/bash
---修改用户uid,gid, 附加组, 注释信息, 用户家目录, 登录shell, 登录名
---建立组,指定组gid[root@liza ~]# groupadd -g 5008 network_sa[root@liza ~]# groupadd -g 5009 devops
---修改用户属性[root@liza ~]# usermod -u 6001 -g5008 -a -G 5009 -c "2019 new student" -md /bgx -s /bin/sh -l bgx_liza bgx
---检查是否修改成功[root@liza ~]# grep "bgx" /etc/passwdbgx_liza:x:6001:5008:2019 new student:/bgx:/bin/sh[root@liza ~]# id bgx_lizauid=6001(bgx_liza) gid=5008(network_sa) groups=5008(network_sa),1003(sa),1004(dba),5009(devops)
---验证家目录[root@liza ~]# ll -d /bgxdrwx------. 3 bgx_liza network_sa 78 Sep 12 00:04 /bgx
---锁定用户[root@liza ~]# echo "123" | passwd --stdin bgx_liza [root@liza ~]# usermod -L bgx_liza
---无法正常登录系统ssh bgx_liyanzhao@192.168.56.11bgx_liyanzhao@192.168.56.11's password:Permission denied, please try again.
---解锁用户[root@liza ~]# usermod -U bgx_liza
复制代码
1.3 使用 finger 命名查询用户信息以及登录信息
---安装finger命令[root@liza ~]# yum install finger -y[root@liza ~]# finger bgx_lizaLogin: bgx_liza             Name: 2019 new studentDirectory: /bgx                       Shell: /bin/shLast login Fri Sep 12 00:20 (CST) on pts/0No mail.No Plan.
复制代码
1.4 使用 chfn 修改用户信息
[root@liza ~]# chfn bgx_liza Changing finger information for bgx_liza.Name [2019 new student]: 2020 new studentOffice []: 110Office Phone []: 89270000Home Phone []: 15528xxxxxx
复制代码
使用 finger 再次检查
[root@liza ~]# finger bgx_lizaLogin: bgx_liza             Name: 2020 new studentDirectory: /bgx                       Shell: /bin/shOffice: 110, 89270000      Home Phone: 15528xxxxxxLast login Fri Sep 12 00:20 (CST) on pts/0No mail.No Plan.
复制代码
1.5 使用 chsh 命令更改用户登录 shell
[root@liza ~]# chsh bgx_liza Changing shell for bgx_liza.New shell [/bin/sh]: /bin/bashShell changed.[root@liza ~]# grep "bgx_liza" /etc/passwdbgx_liza:x:6001:5008:2020 new student,110,89270000,15528xxxxxx:/bgx:/bin/bash
复制代码
1.6 检查用户登陆情况
[root@liza ~]# whoroot     :0           2021-01-01 22:17 (:0)root     pts/0        2021-01-01 22:17 (:0)[root@liza ~]# w 16:58:17 up  2:32,  2 users,  load average: 0.00, 0.01, 0.05USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATroot     :0       :0               22:17   ?xdm?   3:26   0.37s /usr/libexec/gnome-sesroot     pts/0    :0               22:17     ?     2.68s  0.06s w
复制代码
1.7 使用 userdel 删除账户
语法 : userdel [-r] username //-r 同时删除家目录[root@liza ~]# userdel aaa[root@liza ~]# ll /home/aaa -ddrwx------. 3 1001 1001 78 Jan  1  2021 /home/aaa
---连同家目录一起删除[root@liza ~]# userdel -r aaa
复制代码

2、用户创建的原理

Linux 创建用户默认会读取/etc/defaults/useradd 的配置文件,如果当我指定参数时,使用指定参数,如果不指定参数,默认使用/etc/defaults/useradd 中的配置。


当我们使用 useradd 命令新建用户时,用户家目录下会产生相应的.bash_*文件,这些文件默认是从/etc/skel 目录中复制。


如需变更环境拷贝目录站点可修改:/etc/defaults/useradd 的配置文件。


注意:如果执行 useradd 命令新建用户时,指定了参数,就会覆盖/etc/default/useradd 默认的配置。


[root@liza ~]# egrep -v "^#|^$" /etc/login.defs MAIL_DIR  /var/spool/mailPASS_MAX_DAYS  99999PASS_MIN_DAYS  0PASS_MIN_LEN  5PASS_WARN_AGE  7UID_MIN                  1000UID_MAX                 60000SYS_UID_MIN               201SYS_UID_MAX               999GID_MIN                  1000GID_MAX                 60000SYS_GID_MIN               201SYS_GID_MAX               999CREATE_HOME  yesUMASK           077USERGROUPS_ENAB yesENCRYPT_METHOD SHA512 [root@liza ~]# cat /etc/default/useradd # useradd defaults fileGROUP=100HOME=/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 - liza[liza@student ~]$
复制代码



用户密码管理

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


  1. 密码的长度最好大于 10 位字符

  2. 密码中包含大小写字母数字以及特殊字符 ! @ # $

  3. 不规则性(不要出现自己名字、公司名字、自己电话、等等简单的密码)


需要注意:


  1. 普通用户只能更改自己的密码(密码必须满足 8 位字符)

  2. 管理员用户能更改任何人的密码(密码长度无限制)

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


语法: passwd [username]


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

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

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

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


[root@liza ~]# passwd更改用户 root 的密码。新的 密码:重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
---root用户登陆,修改其他用户的密码[root@liza ~]# passwd edc更改用户 edc 的密码新的 密码:重新输入新的 密码:passwd: 所有的身份验证令牌已经成功更新。
---普通用户修改root管理员密码[edc@liza ~]$ passwd rootpasswd: Only root can specify a user name.
---无需用户交互修改密码, 将前者的输出结果, 成为后者的输入[root@liza ~]# echo "123" | passwd --stdin edcChanging password for user edc.passwd: all authentication tokens updated successfully.
复制代码
1、随机复杂密码生成的方式

1.1 系统内置变量生成随机密码


[root@liza ~]# echo $RANDON|md5sum|cut -c 1-1068b329da98[root@liza ~]# echo $(echo $RANDOM|md5sum |cut -c 5-14) |tee pass.txt| passwd --stdin edcChanging password for user edc.passwd: all authentication tokens updated successfully.
复制代码


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


[root@liza ~]# yum install expect -y        ---需要安装扩展包[root@liza ~]# mkpasswd -l 10 -d 2 -c 2 -c 2 -s 44,&4nZ>yE'
复制代码


3.1 推荐密码保存工具客户端,支持 windows、MacOS、Iphone 以及浏览器插件


Lastpass 官方网站



组的基本管理

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


/etc/group 组账户信息


[root@liza ~]# head -2 /etc/grouproot:x:0:bin:x:1:
复制代码


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


字段名称


  1. 组的名称

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

  3. 组 GID 信息

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


/etc/gshadow 组密码信息


[root@liza ~]# head -2 /etc/gshadowroot:::bin:::
复制代码


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


字段名称


  1. 组名称

  2. 组密码

  3. 组管理员

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

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

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


[root@liza ~]# groupadd no_gid[root@liza ~]# tail -n1 /etc/groupno_gid:x:5010:
复制代码


---创建基本组, 指定 gid 为 5555


[root@liza ~]# groupadd -g 5555 yes_gid[root@liza ~]# tail -n1 /etc/groupyes_gid:x:5555:
复制代码


---创建系统组,gid 从 201-999


[root@liza ~]# groupadd -r sys_group[root@liza ~]# tail -n1 /etc/groupsys_group:x:986:
复制代码

2、使用 groupmod 命令新增组

//-g 修改组gid[root@liza ~]# groupmod -g 1111 no_gid [root@liza ~]# tail -1 /etc/groupno_gid:x:1111:
//-n 修改组名称[root@liza ~]# groupmod -n active_group yes_gid[root@liza ~]# tail -1 /etc/groupactive_group:x:5555:
复制代码

3、使用 groupdel 删除组

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


---删除组[root@liza ~]# groupdel active_group 
---删除用户附加组[root@liza ~]# id edcuid=1069(edc) gid=5005(edc) groups=5005(edc),5004(devops)[root@liza ~]# groupdel devops[root@liza ~]# id liyanzhaouid=1069(edc) gid=5005(edc) groups=5005(edc)
---无法删除用户基本组[root@liza ~]# tail -n1 /etc/groupnetwork_sa:x:5008:[root@liza ~]# groupdel network_sagroupdel: cannot remove the primary group of user 'bgx_liza'#只有删除用户或者用户变更基本后,方可删除该组
复制代码

4、使用 gpasswd 设置组密码

[root@liza ~]# groupadd devops[root@liza ~]# gpasswd devopsChanging the password for group devopsNew Password: Re-enter new password: 
复制代码

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

---检查账户信息[root@liza ~]# useradd liza[root@liza ~]# id lizauid=6002(liza) gid=6002(liza) groups=6002(liza)
---切换普通用户[root@liza ~]# su - liza
---创建新文件,并验证权限[liza@liza ~]$ touch file_roots[liza@liza ~]$ lltotal 0-rw-rw-r--. 1 liza liza 0 Jan 1 17:35 file_roots
---切换组信息[liza@liza ~]$ newgrp devopsPassword:
---建立文件,检查权限[liza@liza ~]$ touch file_test[liza@liza ~]$ lltotal 0-rw-rw-r--. 1 liza liza 0 Jan 1 17:35 file_roots-rw-r--r--. 1 liza devops 0 Jan 1 17:36 file_test[liza@liza ~]$
复制代码



用户身份切换

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

1、Shell 分类

交互式shell     //等待用户输入执行的命令(终端操作,需要不断提示)非交互式shell   //执行shell脚本, 脚本执行结束后shell自动退出登陆shell       //需要输入用户名和密码才能进入shell su - liyanzhao非登陆shell     //不需要输入用户和密码就能进入,比如执行sh, bash, su username
复制代码


---查看登陆shell[root@liza ~]# pstree
---临时设置,永久设置需要写配置文件[root@liza ~]# export PS1='[\h@\u \t]#'[liza@root 17:40:25]#
复制代码

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]#'[liza@root 02:16:57]#     //当前终端shell环境
编辑个人配置 ~/.bash_profile 新增一行: PS1='[\u@\H]#'[liza@root 02:18:27]#su bgx_liza[bgx_liza@liza root]$[liza@root 02:18:34]# su - bgx_liza[bgx_liza@liza.com]#
复制代码

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

[root@liza ~]# useradd liza[root@liza ~]# echo "123" | passwd --stdin liza
---使用liyanzhao用户登录当前Linux系统[root@liza ~]# su - liza[liza@liza 18:03:15]#whoami liza
复制代码

6、切换用户,使用命令 su [-] username

su 命令后面跟-代表进入登陆式 shell


如果 su 命令后不加-代表进入非登陆式 shell,他们之间的区别在于加载的环境变量不一样。


普通用户 su -代表直接切换至 root 用户身份, 但需要输入 root 用户密码。


超级管理员 root 用户使用 su - username 切换普通用户不需要输入任何密码。


[liza@liza 18:03:20]#pwd/home/liza
---不加 '-' 切换到root账户下时,当前目录没有变化[liza@liza 18:04:53]#suPassword: [root@liza liza]# pwd/home/liza[root@liza liza]# exitexit
---加 '-'切换到root账户,当前目录为root账户的家目录。[liza@liza 18:05:26]#su -Password: [root@liza]#pwd/root
复制代码

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

[root@liza ~]# su - liza -c 'ifconfig'[root@liza ~]# su - liza -c 'ls ~'
复制代码



用户身份提权

  1. su 命令在切换用户身份时,如果每个普通用户都能拿到 root 用户的密码,当其中某个用户不小心泄漏了 root 的密码,那系统会变得非常不安全。

  2. 为了改进这个问题,从而产生了 sudo 这个命令。sudo 执行一个仅有 root 身份才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是 root 的密码而是用户自己的密码。

  3. 默认只有 root 用户能使用 sudo 命令,普通用户想要使用 sudo 需要 root 预先设定,即使用 visudo 命令去编辑相关的配置文件/etc/sudoers



Centos7 提权

[root@liza ~]# usermod bgx -G wheel
---日志审计[root@liza ~]# sudo tail -f /var/log/secure
复制代码
1.系统安装后就有 sudo 命令,如果没有 sudo 命令,可通过如下方式安装
[root@liza ~]# yum install sudo -y
复制代码
2.使用visudo命令编辑 sudo 配置文件, 相当于 vim /etc/sudoers`配置文件
[root@liza ~]# visudo liza ALL=(ALL) /bin/rm, /bin/cp  #新增
复制代码
3.配置选项详解
1.用户名      2.主机名   3.角色名       4.命令名root            ALL=    (ALL)           ALLliza      ALL     使用最高角色执行    /bin/rm, /bin/cp #允许使用sudo执行命令liza   ALL=(ALL)  NOPASSWD:/bin/cp, /bin/rm   //不需要密码使用rm、cp命令
复制代码
4.使用 visudo -c 检查配置文件
[root@liza ~]# visudo -c/etc/sudoers: parsed OK
复制代码
5.普通用户验证 sudo 权限

切换普通用户


[root@liza ~]# su - liza
复制代码


检查普通用户 sudo 权限明细


[liza@liza ~]$ sudo -l...User liza may run the following commands on liza:    (ALL) /bin/rm, /bin/cp
复制代码


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


[liza@liza ~]$ rm -rf /opt/rm: cannot remove ‘/opt/rh’: Permission denied
复制代码


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


[liza@liza ~]$ sudo rm -rf /opt/
复制代码
6.sudo 免密码配置选项

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


[root@liza ~]# visudo lizaALL=(ALL) /bin/rm, /bin/cp  #默认liza   ALL=(ALL)  NOPASSWD:/bin/rm, /bin/cp  #修改后
复制代码


默认普通用户无权删除


[liza@liza ~]$ rm -f /root/filerm: cannot remove ‘/root/file’: Permission denied
复制代码


验证 sudo 免密码执行权限


[liza@liza ~]$ sudo rm -f /root/file
复制代码
7、sudo 配置组

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


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


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


创建用户加入该组


[root@liza ~]# groupadd bgx[root@liza ~]# useradd bgx1 -g bgx [root@liza ~]# useradd bgx2 -g bgx 
复制代码


root 用户建立目录


[root@liza ~]# mkdir /root/bgx_sudo
复制代码


切换用户并删除测试


[root@liza ~]# su - bgx1[bgx1@liza ~]$ rm -rf /root/bgx_sudorm: cannot remove ‘/root/bgx_sudo’: Permission denied
复制代码


使用 sudo


[bgx1@liza ~]$ sudo rm -rf /root/bgx_sudo
We trust you have received the usual lecture from the local SystemAdministrator. 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 bgx1:
复制代码


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


下面介绍一个很实用的案例,我们的需求是将 Linux 服务器设置成如下:


  1. 仅允许使用普通账户登陆 Linux 服务器,禁止 root 直接登录

  2. 可以让普通用户不输入密码就能 sudo su -切换到 root 账户


---禁止root用户登陆[root@liza ~]# sed -i  's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config[root@liza ~]# systemctl restart sshd
---配置sudo权限[root@liza ~]# visudoUser_Alias USER_SU = bgx1,bgx2,lizaCmnd_Alias SU = /bin/suUSER_SU ALL=(ALL) NOPASSWD:SU
---使用root登陆服务器失败➜ ~ ssh root@192.168.56.11root@192.168.56.11's password:Permission denied, please try again.
---使用普通用户登陆服务器➜ ~ ssh liza@192.168.56.11liza@192.168.56.11's password:Last login: Mon Oct 30 09:28:21 2017 from 192.168.56.2
---使用sudo提权至root用户[liza@liza ~]$ sudo su -[root@liza ~]#
复制代码
8、sudo 执行流程:
  1. 普通用户执行 sudo 命令, 会检查/var/db/sudo 是否存在时间戳缓存

  2. 如果存在则不需要输入密码, 否则需要输入用户与密码

  3. 输入密码会检测是否该用户是否拥有该权限

  4. 如果有则执行,否则报错退出



日志相关审计

  • 通过 sudo 和 syslog 配合实现对所有用户进行权限的日志审计并将记录日志集中管理,实施后让所有运维和开发执行的 sudo 命令都有记录可查,杜绝了内部人员的操作安全隐患

  • sudo 日志审计,专门针对 sudo 命令的系统用户记录其执行的命令相关信息,所谓 sudo 命令日志审计,并不记录普通用户的操作,而是记录执行 sudo 命令的用户操作。

1.安装 sudo、rysylog
[root@node1 ~]# yum install -y sudo rsyslog
复制代码


检测是否安装成功


[root@liza ~]# rpm -qa sudo rsyslogrsyslog-8.24.0-12.el7.x86_64sudo-1.8.19p2-10.el7.x86_64
复制代码
2.配置/etc/sudoers 记录日志路径
[root@liza ~]# echo "Defaults  logfile=/var/log/sudo.log" >>/etc/sudoers
复制代码


查看追加的日志配置


[root@liza ~]# tail -1 /etc/sudoers  Defaults  logfile=/var/log/sudo.log
复制代码


检查语法


[root@liza ~]# visudo -c/etc/sudoers: parsed OK
复制代码
3.配置 rsyslog 日志服务
[root@liza ~]# echo "local2.debug /var/log/sudo.log" >>/etc/rsyslog.conf 
复制代码


重启 rsyslog 服务


[root@liza ~]# systemctl restart rsyslog.service Shutting down system logger:                               [  OK  ]Starting system logger:                                    [  OK  ]
复制代码
普通用户使用 sudo 权限验证日志记录

使用普通执行 sudo 命令


[liza@liza ~]$ rm -rf /root/testrm: cannot remove ‘/root/test’: Permission deniedrm: 无法删除"/root/test": 权限不够
[liyanzhao@node1 ~]$ sudo rm -rf /root/test/
复制代码


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


[root@liza ~]# cat /var/log/sudo.log Jan  1 19:03:36 : liza : TTY=pts/0 ; PWD=/home/liza ; USER=root ;    COMMAND=/bin/rm -rf /root/test
复制代码


发布于: 刚刚阅读数: 4
用户头像

Albert Edison

关注

目前在某大厂担任后端开发,欢迎交流🤝 2022.03.08 加入

🏅️平台:InfoQ 签约作者、阿里云 专家博主、CSDN 优质创作者 🛫领域:专注于C语言、数据结构与算法、C++、Linux、MySQL、云原生的研究 ✨成就:2021年CSDN博客新星Top9,算法领域优质创作者,全网累计粉丝4W+

评论

发布
暂无评论
用户权限-Linux系统用户管理_Linux_Albert Edison_InfoQ写作社区