Linux系统安全与应用(Centos7)(sudo)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
运维安全中心(堡垒机),免费版 6个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Linux系统安全与应用(Centos7)(sudo)

一、账号安全基本措施


-系统账户清理


(1)将非登录用户的Shell设为/sbin/nologin


/sbin/nologin——禁止终端登录,确保不被人为改动 (经常检查,防止恶意篡改)


[root@centos7-012 ~]# usermod -s /sbin/nologin tom  (修改用户tom的登录shell)
[root@centos7-012 ~]# cat /etc/passwd | grep "tom"  (查看用户tom的基本信息)
tom:x:1000:1000::/home/tom:/sbin/nologin

(2)锁定长期不使用的账号


例如一些用户长期不使用,但不确定是否删除,这时候就可以使用锁定账户

[root@centos7-012 ~]# usermod -L tom               (锁定用户tom)
[root@centos7-012 ~]# passwd -S tom                (查看用户状态)
tom LK 2020-12-30 0 99999 7 -1 (密码已被锁定。)
[root@centos7-012 ~]# usermod -U tom               (解锁用户tom)
[root@centos7-012 ~]# passwd -S tom                (再次查看用户状态)
tom PS 2020-12-30 0 99999 7 -1 (密码已设置,使用 SHA512 算法。) 

(3)删除无用的账号


例如mysql程序删除后,就可以删除mysql用户


[root@centos7-012 ~]# userdel mysql  (删除mysql账户)

(4)锁定账号文件passwd、shadow


例如服务器账户已经确认创建完成,不再进行更改,这时候就可以锁定账号文件

[root@centos7-012 ~]# chattr +i /etc/passwd /etc/shadow (锁定账号文件)
[root@centos7-012 ~]# lsattr /etc/passwd /etc/shadow    (查看账号文件属性)
---------------- /etc/passwd
---------------- /etc/shadow
[root@centos7-012 ~]# useradd lisi                      (这时候创建新用户,发现无法创建)
useradd:无法打开 /etc/passwd
[root@centos7-012 ~]# chattr -i /etc/passwd /etc/shadow (解锁账号文件)
[root@centos7-012 ~]# useradd lisi                      (再次创建新用户,发现创建成功)

-密码安全控制


(1)设置密码有效期

******适用于新建用户的
[root@centos7-012 ~]# echo "PASS_MAX_DAYS 30" >> /etc/login.defs   (设置有效期为30天)
[root@centos7-012 ~]# tail -5 /etc/login.defs 
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512
PASS_MAX_DAYS 30
******适用于已有用户的
[root@centos7-012 ~]# chage -M 30 tom  (设置用户tom的密码有效期为30天)

(2)要求用户下次登陆时修改密码


[root@centos7-012 ~]# chage -d 0 tom   (强制用户tom在下次登陆时更改密码)


-命令历史限制


(1)减少记录的命令条数

[root@centos7-012 ~]# vim /etc/profile (编写系统脚本)
。。。。。。
44 
 45 HOSTNAME=`/usr/bin/hostname 2>/dev/null`
 46 HISTSIZE=20                           (修改为历史限制为20条)
 47 if [ "$HISTCONTROL" = "ignorespace" ] ; then
 48     export HISTCONTROL=ignoreboth
。。。。。。
保存退出
[root@centos7-012 ~]# source /etc/profile (运行脚本)
[root@centos7-012 ~]# history   (查看历史命令,发现只显示最后20条)
   39  cat nologin.txt 
   40  passwd -S tom
   41  passwd -L tom
   42  usermod -L tom
   43  passwd -S tom
   44  usermod -U tom
   45  passwd -S tom
   46  usermod -s /sbin/nologin tom
   47  cat /etc/passwd | grep "tom"
   48  vim /etc/login.defs 
   49  mount /dev/cdrom /media/cdrom/
   50  yum -y install vim net-tools
   51  vim /etc/login.defs 
   52  echo "PASS_MAX_DAYS 30" >> /etc/login.defs 
   53  tail -5 /etc/login.defs 
   54  chage -M 30 tom
   55  chage -d 0 tom
   56  vim /etc/profile
   57  source /etc/profile
   58  history

(2)注销时自动清空命令历史

/.bash_logout 用途: 用户登出时执行的命令
[root@centos7-012 ~]# vim ~/.bash_logout   (修改)
# ~/.bash_logout
history -c      (登出时清除历史命令并且清屏)
clear

(3)终端自动注销

[root@centos7-012 ~]# vim ~/.bash_profile 
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export TMOUT = 20   (添加自动注销时间为20秒)
保存退出
[root@centos7-012 ~]# source ~/.bash_profile  (执行)
等待二十秒,会发现自动注销

二、用户切换以及提权


-使用su命令切换用户


(1)用途以及用法


用途: Substitute User,切换用户

格式: su - 用户名


(2)密码验证


使用root用户切换其他用户是不需要验证密码的

普通用户切换到其他用户需要验证用户密码


注意: 带 - 选项表示将使用目标用户的登录shell环境


[root@centos7-012 ~]# su - tom  (root账户进行切换用户无需密码)
上一次登录:三 12月 30 18:27:47 CST 2020pts/0 上
[tom@centos7-012 ~]$ su - root  (普通账户切换需要输入密码)
密码:       (输入密码)
上一次登录:三 12月 30 18:27:44 CST 2020pts/0 上
[root@centos7-012 ~]# 
只需要查看 @ 号之前的名称是谁,那么就是登录的谁的用户,也可以使用whoami来查看

(3)限制使用su命令的用户


在CentOS7系统中默认所有用户都可以使用su命令,防止密码穷举也就是暴力破解的危险,可以只允许指定用户使用su命令

******启用pam_wheel认证模块,将允许使用su命令的用户加入wheel组中
[root@centos7-012 ~]# vim /etc/pam.d/su
  1 #%PAM-1.0
  2 auth            sufficient      pam_rootok.so
  3 auth        required    pam_wheel.so use_uid   (添加)
  4 # Uncomment the following line to implicitly trust users in     the "wheel" group.
。。。。。。
保存退出
[root@centos7-012 ~]# grep wheel /etc/group  (筛选wheel发现多了一个wheel组)
wheel:x:10:
[root@centos7-012 ~]# su - tom   (切换到tom账户)
上一次登录:三 12月 30 18:28:13 CST 2020pts/0 上
[tom@centos7-012 ~]$ su - root   (使用tom账户切换到root,发现输入密码也无法切换)
密码:
su: 拒绝权限
******注销tom,使用root登录
[root@centos7-012 ~]# gpasswd -a tom wheel  (把tom账户加到wheel组中)
正在将用户“tom”加入到“wheel”组中
[root@centos7-012 ~]# su - tom              (再次切换到tom账户)
上一次登录:三 12月 30 18:43:10 CST 2020pts/0 上
[tom@centos7-012 ~]$ su - root              (使用tom账户切换root)
密码:
上一次登录:三 12月 30 18:45:14 CST 2020从 192.168.100.111pts/1 上
[root@centos7-012 ~]#                       (发现可以成功切换)

(4)查看su操作记录

******安全日志文件:/var/log/secure
[root@centos7-012 ~]# tail /var/log/secure 
Dec 30 18:28:11 centos7-012 usermod[16119]: change user 'tom' shell from '/sbin/nologin' to '/bin/bash'
Dec 30 18:28:13 centos7-012 su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
Dec 30 18:28:52 centos7-012 su: pam_unix(su-l:session): session opened for user root by root(uid=1000)
Dec 30 18:43:10 centos7-012 su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
Dec 30 18:43:18 centos7-012 su: pam_succeed_if(su-l:auth): requirement "uid >= 1000" not met by user "root"
Dec 30 18:45:14 centos7-012 sshd[16199]: Accepted password for root from 192.168.100.111 port 51545 ssh2
Dec 30 18:45:14 centos7-012 sshd[16199]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 30 18:45:25 centos7-012 gpasswd[16218]: user tom added by root to group wheel
Dec 30 18:46:01 centos7-012 su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
Dec 30 18:46:06 centos7-012 su: pam_unix(su-l:session): session opened for user root by root(uid=1000)

-使用sudo机制提升权限


(1)su命令的缺点


知道root密码的用户越少越安全


sudo——普通用户拥有一部分管理权限,又不需要知道root密码


(2)sudo命令的用途以及用法


用途: 想要以其他用户身份(如root)执行授权的命令

用法: sudo 授权命令


(3)配置sudo授权/etc/sudoers

******配置sudo授权(往这个文件里写入要给指定用户的权限)
第一种方法:
[root@centos7-012 ~]# cd /etc
[root@centos7-012 etc]# ll
,,,,,,
-r--r-----.  1 root root     4328 11月 28 2019 sudoers  (默认是440也就是两个可读的权限)
。。。。。。
[root@centos7-012 etc]# vim /etc/sudoers (编写sudo的配置文件)
第二种方法:
[root@centos7-012 etc]# visudo (进入sudo的配置文件)(这个进入方法保存退出时会提示给我们错误信息)
两种方法进入的文件是相同的

(4)记录格式

******格式:用户 主机名列表=命令程序列表
写完之后先用 : 进入末行模式后输入 w! 强制保存,再保存退(上面两种方法都得这么做)
*用户:用户名 或 “%组名”(也就是组内所有用户)
*主机名:一般为 localhost(本机) 或 实际主机名(得先看自己的主机名是什么就得写什么)
*命令列表: 命令的绝对路径,多命令使用“,”分割
例如:
[root@centos7-012 etc]# vim /etc/sudoers (进入sudo配置文件)
。。。。。。
 100 root    ALL=(ALL)       ALL         (这个就表示root在所有主机都有所有的权限)
。。。。。。
 107 %wheel  ALL=(ALL)       ALL         (这个表示wheel组内的所有成员在所有主机有着所有权限)
。。。。。。
******按照这样写的话,如果想要boss用户可以使用sudo加权使用ifconfig命令:
[root@centos7-012 ~]# useradd boss  (创建boss账户)
[root@centos7-012 ~]# passwd boss   (设置boss账户的密码)
更改用户 boss 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos7-012 ~]# which ifconfig  (先查看ifconfig的完整路径)
/usr/sbin/ifconfig
[root@centos7-012 ~]# vim /etc/sudoers
。。。。。。
boss   ALL=/usr/sbin/ifconfig    (在末行加入一行boss可以在所有主机sudo加权使用ifconfig命令)
先输入“:”进入末行模式,然后输入“w!”强制保存之后再保存退出
******验证
[root@centos7-012 ~]# su - boss        (切换boss账户)
上一次登录:三 12月 30 18:46:01 CST 2020pts/1 上
[tom@centos7-012 ~]$ sudo /usr/sbin/ifconfig 
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。
[sudo] boss 的密码:    (输入boss的密码)
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.12  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::ea8f:4112:94bb:75f7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:46:da:b9  txqueuelen 1000  (Ethernet)
        RX packets 8064  bytes 702160 (685.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4766  bytes 671907 (656.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 476  bytes 38616 (37.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 476  bytes 38616 (37.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[boss@centos7-012 ~]$ sudo -l  (查看当前账户可以使用sudo哪些命令)
[sudo] boss 的密码: (输入boss密码)
匹配 %2$s 上 %1$s 的默认条目:
    !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
用户 boss 可以在 centos7-012 上运行以下命令:
    (root) /usr/sbin/ifconfig     (可以使用ifconfig命令)
******/etc/sudoers中可以用一些符号
******可以使用通配符*、取反符号!
例如:
boss             localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route (可以使用/sbin/下的所有命令但是不能使用/sbin/route命令)
******关键字、别名机制(必须大写)
别名格式:别名类型  指定别名=成员1,成员2,成员3。。。。。。
别名类型:(成员可以是用户也可以是命令)
Host_Alias 定义主机别名; 
User_Alias 用户别名,别名成员可以是用户,用户组(前面要加%号) 
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户
Cmnd_Alias 定义命令别名
例如:
User_Alias       AAA=tom,jack,rose  (别名是AAA,成员有tom,jack,rose)
Host_Alias       BBB=smtp,pop       (别名是BBB,成员有smtp,pop)
Cmnd_Alias       CCC=/bin/rpm,/usr/bin/yum (别名是CCC,成员有/bin/rpm,/usr/bin/yum)

(5)查看sudo操作记录

******需启用 Defaults logfile 配置
******默认日志文件:/var/log/sudo
[root@localhost ~]# visudo
。。。。。。
(启用日志配置以后,sudo操作过程才会被记录,在Defaults列前添加)
 55 Defaults logfile = "/var/log/sudo"
.。。。。。
进入末行模式先用w!强制保存,然后保存退出
******这时候在boss用户中使用sudo
[boss@centos7-012 ~]$ sudo /usr/sbin/ifconfig 
******返回root账户,查看日志
[root@centos7-012 ~]# tail /var/log/sudo  (查看日志,发现多了一条使用记录)
Dec 30 22:50:14 : boss : TTY=pts/2 ; PWD=/home/boss ; USER=root ;
    COMMAND=/usr/sbin/ifconfig
******查询授权的sudo操作 sudo -l
【初次使用sudo时需验证当前用户的密码】
[boss@centos7-012 ~]$ sudo -l  (在boss用户上查看)
[sudo] boss 的密码:
匹配 %2$s 上 %1$s 的默认条目:
    logfile=/var/log/sudo, !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
用户 boss 可以在 centos7-012 上运行以下命令:
    (root) /usr/sbin/ifconfig   
【默认超时为5分钟,在此期间不再重复验证】


目录
打赏
0
0
0
0
14
分享
相关文章
|
3月前
|
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
185 25
MyEMS开源系统安装之CentOS/RHEL/Rocky/AlmaLinux/Oracle Linux
本指南介绍如何在CentOS/RHEL/Rocky/AlmaLinux/Oracle Linux服务器上部署MyEMS开源能源管理系统。内容涵盖系统准备、数据库配置、多个MyEMS服务(如myems-api、myems-admin、myems-modbus-tcp等)的安装与配置,以及Nginx服务器设置和防火墙规则调整。通过完成所有步骤,您将能够访问MyEMS Admin UI和Web UI,默认端口分别为8001和80,初始登录凭据已提供。
69 0
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
136 28
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
107 18
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
124 10
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
本文详细介绍了在VMware虚拟机中安装CentOS 6.8的全过程。首先,需确保已安装VMware并开启V-CPU虚拟化功能,可通过BIOS设置或使用LeoMoon CPU-V工具检测。接着,下载CentOS镜像文件,并在VMware中新建虚拟机,配置CPU、内存、硬盘等参数。最后,加载ISO镜像启动虚拟机,按照提示完成CentOS的安装,包括语言、键盘、存储方式、地区、密码设置及硬盘分区等步骤。安装完成后,以root用户登录即可进入系统桌面,开始学习Linux命令和操作。
411 12
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
472 25
Linux权限揭秘“Root与Sudo”
Root用户是Linux系统中的超级用户,拥有对系统的完全控制权。Root用户几乎可以执行任何命令,修改任何文件,甚至删除系统上的所有内容。因此,Root用户的使用需要非常谨慎,以避免潜在的安全风险。
180 6
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
225 5
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
136 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问