Linux系统如何进行提权操作

简介:

用户提权:
往往公司的服务器对外都是禁止root用户直接登录,所以我们通常使用的是普通用户,那么问题来了,当我们使用普通用户执行/sbin目录下的命令时,会发现没有权限运行,这种情况下我们无法正常的管理服务器,那如何才能不使用root用户直接登录系统,同时又保证普通用户能正常工作?

两种方法:
1.su切换用户,使用普通用户登录,然后使用su命令切换到root;优点:简单,缺点:需要让用户知道root密码;
2.sudo提取,当需要使用root权限时进行提权,而无需切换至root用户;优点:安全、方便;缺点:配置复杂;

1.su身份切换
在使用su切换前,说一下shell分类、环境变量配置文件有哪些
1)linux shell主要分为如下几类

- 交互式shell,等待用户输入执行的命令(终端操作,需要不断提示)
- 非交互式shell,执行shell脚本,脚本执行结束后shell自动退出
- 登录shell,需要输入用户名和密码才能进入shell
- 非登录shell,不需要输入用户和密码就能进入shell,比如运行bash会开启一个新的会话窗口

# 使用登录shell登录服务器,然后输入命令bash非登录式shell
区别于加载的环境变量不同;
AI 代码解读

2.bash shell配置文件介绍(文件主要保存用户的工作环境)

个人配置文件: ~/.bash_profile; ~/.bashrc
全局配置文件:/etc/profile; /etc/profile.d/*.sh; /etc/bashrc
profile类文件,设定环境变量,登录前运行的脚本和命令;
bashrc类文件,设定本地变量,定义命令别名
注意: 如果全局配置和个人配置产生冲突,以个人配置为准

3.登录系统后,环境变量配置文件的应用顺序

(1)登录式shell:

/etc/profile --> /etc/profile.d/*.sh --> ~/.barh_profile  -->~/.bashrc --> /etc/bashrc
AI 代码解读

(2)非登陆式shell:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
AI 代码解读

验证:
在每个shell配置文件中添加echo命令,使用两种登录方式验证:

Last login: Fri Nov  6 18:09:54 2020 from 100.0.0.100
/etc/profile.d/1.sh
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
[root@proxy1 ~]# 
[root@proxy1 ~]# bash
/etc/profile.d/1.sh
/etc/bashrc
~/.bashrc
AI 代码解读
su - username    #属于登陆式shell
su username        #属于非登陆式shell
# 区别在于加载的环境变量不一样
AI 代码解读

以某个用户的身份执行某个服务,使用su - username -c "command"

# 不会登录到用户
[root@proxy1 ~]# su - aaa -c "pwd"
/home/aaa
AI 代码解读

sudo提权

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

其实sudo就相当于给某个普通用户埋下了浩克的种子,当需要执行一些高级操作时,进行发怒,但正常情况下还是普通人,还是会受到限制;

1)快速配置sudo方式

[root@proxy1 ~]# usermod aaa -G wheel
# 将aaa加入到wheel附加组中
# 而wheel组在sudo的配置文件中定义为可以执行任何命令
[root@proxy1 ~]# grep "wheel" /etc/sudoers
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
# %wheel        ALL=(ALL)       NOPASSWD: ALL
# 验证
[aaa@proxy1 root]$ rm anaconda-ks.cfg
rm: cannot remove ‘anaconda-ks.cfg’: Permission denied
[aaa@proxy1 root]$ sudo rm anaconda-ks.cfg

# sudo的审计日志
/var/log/secure
AI 代码解读

2)正常配置
visudo命令(有语法验证)
方式一:

# 1.使用sudo定义分组,和系统的组无关
User_Alias OPS = aaa,bbb
User_Alias DBA = ccc,ddd

# 2.定义可执行的命令组,便于后续的调用
Cmnd_Alias NETWORKING = /sbin/ifconfig,/bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm,/usr/bin/yum
Cmnd_Alias SERVICES = /sbin/server,/usr/bin/systemctl start

# 3.使用sudo开始分配权限
OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES
DBA ALL=(ALL) SOFTWARE SERVICES

# 4.检测配置
[root@proxy1 ~]# visudo -c
/etc/sudoers: parsed OK

# 用户可以使用sudo -l命令查看自己的权限
AI 代码解读

方式二:

# 针对系统中真实存在的组进行操作
# 1.创建两个组:OPS、DBA
[root@proxy1 ~]# groupadd OPS
[root@proxy1 ~]# groupadd DBA
# 2.将用户的附加组修改为OPS或DBA
[root@proxy1 ~]# usermod aaa -G OPS
[root@proxy1 ~]# usermod bbb -G OPS   
[root@proxy1 ~]# usermod ccc -G DBA
[root@proxy1 ~]# usermod ddd -G DBA 
# 3.在sudo中配置规则
Cmnd_Alias NETWORKING = /sbin/ifconfig,/bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm,/usr/bin/yum
Cmnd_Alias SERVICES = /sbin/server,/usr/bin/systemctl start

# 4.使用sudo开始分配权限
%OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES
%DBA ALL=(ALL) SOFTWARE SERVICES

# 5.检查配置并验证权限
visudo -c
[ccc@proxy1 root]$ sudo -l
User ccc may run the following commands on proxy1:
    (ALL) /bin/rpm, /usr/bin/yum

# 区别在于真实的组定义时前边需要添加%号
AI 代码解读
相关文章
|
14天前
|
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
87 27
|
18天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
80 10
|
2月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
113 24
Linux系统之whereis命令的基本使用
|
30天前
|
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
96 8
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
19天前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
50 0
|
4月前
|
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
350 78
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
225 23
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
172 13
|
4月前
|
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
156 0