首页 > 系统相关 >禁用Linux特定命令,提升生产环境安全性

禁用Linux特定命令,提升生产环境安全性

时间:2023-08-18 10:38:00浏览次数:43  
标签:bin etc 禁用 su 命令 usr Linux root 安全性

在生产实际中,常常会因为某些安全要求,需要对linux系统限制用户执行权限过大的命令或较敏感的,因此,如何限制系统的某些功能,限制linux系统下用户可执行的命令,将是一件安全日常不断需要深入研究的事,本文主要从几个方面,整理相关限制命令执行的方法,以供日常安全运维参考;

通用方案

首先,为了禁用某一命令,只需要在系统中编辑文件“/etc/profile”,在其中增加以下代码部分即可:

`# Disallow executable files
alias rm=’echo “Executable files are not allowed!” && exit 1’`

这段代码表明,只要用户试图运行“rm”命令,系统就会输出一条错误提示,告知用户不允许使用可执行文件。

此外,还可以通过Linux系统服务来实现禁用一些命令。假设我们希望禁用“su”命令,那么只需要通过修改文件“/etc/pam.d/su”,在其中增加以下代码即可:

`auth requisite pam_deny.so`

这段代码表明,只有root用户才可以使用该命令,其他普通用户则无法使用,从而避免了一些风险。

当然,除了上述方法外,如果我们想更进一步保障Linux系统的安全性,还可以通过防火墙(例如iptables)来禁止一些命令。假设我们想禁止对某台服务器的远程ssh访问,那么只需要在系统中输入以下命令即可:

`sudo iptables -A INPUT -p tcp — dst xxx.xxx.xxx.xxx –dport 22 -j DROP`

这段命令表明,当有任何远程访问到该服务器的尝试时,系统都会把其请求拒绝,以此来保护服务器的安全性。

当然了,我们还可以通过以下方案来进行禁用。

1、禁用普通用户su到root

禁止非WHEEL用户使用SU命令

编辑su配置文件:vi /etc/pam.d/su,开启:

auth required /lib/security/$ISA/pam_wheel.so use_uid   //即要求wheel组的用户才可执行su,只有usermod -G wheel 用户,才可su;
auth required pam_wheel.so use_uid

修改/etc/login.defs文件:

echo “SU_WHEEL_ONLY yes” >> /etc/login.defs   //普通用户登录,shell限制

修改默认的su的wheel组:vi /etc/pam.d/su文件

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel   //可将wheel替换为其他组

2、禁用普通用户执行某些命令

vim /etc/sudoers #此文件权限默认440,修改的时候需要先改成777,修改后再改回440,否则报错,建议使用visudo编辑

#文末追加
Cmnd_Alias USERADMINCMNDS =!/usr/bin/passwd, !/usr/bin/passwd root, !/usr/bin/passwd root --stdin  #
monitor ALL=(ALL:ALL) ALL,USERADMINCMNDS,!/bin/su,!/bin/bash ##第一个monitor是用户账号 第二列的ALL是登陆者的来源主机名,第三列=(ALL)是代表可以切换身份,第四列ALL是可执行的命令.
#禁用su
Cmnd_Alias DISABLE_SU=/bin/su
普通用户 ALL=(ALL:ALL) NOPASSWD:ALL,!DISABLE_SU  #验证,系统应返回如下错误消息: “Sorry. user xxx is not allowed to execute "/bin/su’ as root on hostname.”.
%admin ALL=(ALL) ALL, !DISABLE SU  #admin组用户禁用su
#允许执行指定命令,用root的身份免密来运行/usr/bin/passwd,/bin/su,/usr/bin/rz
monitor ALL=(root) NOPASSWD:/usr/bin/passwd,NOPASSWD:/bin/su,NOPASSWD:/usr/bin/rz #!/bin/su
#比对
admin ALL=(root) NOPASSWD:/usr/bin/*,NOPASSWD:!/bin/su,NOPASSWD:/sbin/*,NOPASSWD:/bin/* #不影响
#下面会显示sudo su报错:xx is not allowed to execute '/bin/su' as root on
admin ALL=(root) NOPASSWD:/usr/bin/*,NOPASSWD:/sbin/*,NOPASSWD:/bin/*,NOPASSWD:!/bin/su

#允许sudo su
monitor ALL=(ALL) /usr/bin/sudo,/bin/su,/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

注意:

sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。

su:没有时间限制。

sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。

当s权限在文件所有者 x 权限位上时,例如:-rwsr-xr-x,此时称为Set UID,简称为SUID的特殊权限,即当执行该文件时将具有该文件所有者的权限。使一个目录既能够让任何用户写入文档,又不让用户删除这个目录下他人的文档,sticky就是能起到这个作用。stciky一般只用在目录上,用在文档上起不到什么作用(如/home,权限为1777)任何的用户都能够在这个目录下创建文档,但只能删除自己创建的文档)。

3、禁用root执行某些命令和授权sudo

1)禁止授权普通用户sudo:

chmod u+w /etc/sudoers

2)vi /etc/sudoers 或visudo,编辑sudoers文件,找到以下行: xxx ALL = (ALL) ALL ## 将xxx替换为允许sudo的普通用户名,后面ALL替换为限制sudo执行的命令;

还可以为每个用户建立特定sudo策略文件,在/etc/sudoers.d/目录下建立与用户同名的策略文件

visudo -f /etc/sudoers.d/blue,写入:
blue ALL=/usr/bin/, !/usr/bin/passwd, /bin/,  !/bin/kill  ##不可杀进程和修改密码

3)限制root执行某些命令

4)禁用内部命令 root下执行help可查看内部命令,然后执行:enable -n 要禁止的命令,可以禁止;如果再启用,只需执行enable 要启用的命令;

5)禁用history

history命令配置时间戳:# export HISTTIMEFORMAT=‘%F %T ’

查看:# export HISTTIMEFORMAT=’%F %T ’ # history | more

控制历史命令记录的总行数:vi ~/.bash_profile,
修改:HISTSIZE=450 HISTFILESIZE=450

强制 history 不记住特定的命令:# export HISTCONTROL=ignorespace //在不想被记住的命令前面输入一个空格

禁用 history: # export HISTSIZE=0

4、禁用ssh登录执行某些命令

#编辑~/.ssh/authorized_keys,在前面加上语句:
command="bash --restricted --noprofile --rcfile$HOME/.stricted_profile" ssh-rsa……  #使用restricted模式,并且不加载系统默认的profile文件,而加载我们定义的profile文件$HOME/.stricted_profile。上面添加command参数一定是在一个主机行的前面,每添加一台主机,需要添加一行。
vim $HOME/.stricted_profile文件  #内容如下
PATH=${HOME}/bin
export PATH
#配置允许ssh登录可执行的命令
mkdir $HOME/bin
ln -s /usr/bin/ssh $HOME/bin/  #当登陆这台机器的时候,除了ssh 命令,不能使用其他任何命令

5、禁用scp和sftp

rpm -qa|grep openssh-*
yum remove openssh-clients -y
#禁止sftp
vi /etc/ssh/sshd.config
Subsystem sftp /usr/libexec/openssh/sftp-server #注释掉
mv /usr/lib/sftp-server /usr/lib/

6、禁止执行  rm -rf /*   

利用工具afe-rm,  安装后替换系统命令rm;

下载地址:https://launchpad.net/safe-rm/+download;

下载:wget https://launchpad.net/safe-rm/trunk/1.1.0/+download/safe-rm-1.1.0.tar.gz

tar -zxvf safe-rm-1.1.0.tar.gz   # 将safe-rm命令复制到系统的/usr/local/bin目录
cp safe-rm-1.1.0/safe-rm /usr/local/bin/
ln -s /usr/local/bin/safe-rm /usr/local/bin/rm   # 创建软链接,用safe-rm替换rm,如果有问题,请检查环境变量PATH,是否包含/usr/local/bin路径

设置过滤目录:
编辑:vi /etc/safe-rm.conf 文件,添加需要过滤的目录即可,一行一个,而且应满足递归原则;

格式:
/ 代表过滤 目录/
./* 代表过滤 目录/ 下面的所有文件

递归过滤示例(这样/root/blue/students各级目录都会受到保护):

/
/root
/root/blue
/root/blue/students

7.如何禁用linux+系统中user,smartmon?

1、方法1:Linux系统使用/etc/passwd文件存储用户账户信息,包括用户名、密码和主目录位置等信息。通过修改此文件来禁用用户。只要要在用户前加入#即可。

2、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。其次,在linux命令行中输入:

usermod -L sam

键盘按“回车键”运行shell指令,此时会看到用户sam成功被禁用了。

3、禁止所有的用户登录 个一个地去禁止用户登录,这将是很……无聊的事。而且还容易出错。

4、所以经常有一种破解系统的办法:修改 grub 启动项里面的 kernel 行,加参数 init=/bin/bash ,这样 Linux 启动后会直接运行 bash 而跳过全部的启动过程。

5、限制控制台访问 在Linux操作系统中所有的命令在系统中都是以文件的形式体现出来的。如果需要限制或者禁用控制台下的访问,只需要把某些文件的连接注释掉即可。

8.LINUX下如何禁止ping

1,通过修改配置参数

执行以下命令来关闭ping请求的应答。

[root@localhost etc]# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

禁用Linux特定命令,提升生产环境安全性_linux禁用命令

通过上图可以看出执行完命令之后,确实不能够ping通了,接着改为0之后又可以ping通了。但是上图配置的这种方式只是临时的,只对当前会话有用,当重启之后,就恢复了,所以有没有啥办法是重启之后对任何会话都适用的呢?还确实有这种能够使修改的配置长期生效,在以后的重启后都能够使服务器的ping不能够应答。配置方式如下,在/etc/sysctl.conf文件中增加以下命令行:

net.ipv4.icmp_echo_ignore_all = 1

禁用Linux特定命令,提升生产环境安全性_普通用户_02

保存文件,接着执行以下命令使其生效。

sysctl -p

禁用Linux特定命令,提升生产环境安全性_普通用户_03

接着重启电脑,执行ping命令,ping本机地址,检测是否能够ping通。

2,通过iptables

iptables是Linux命令行防火墙,也可以配置规则禁用ping流量。在Linux服务器上通过iptables来禁用ping请求,请运行以下命令。首先来检测一下iptables的版本。

[root@localhost ~]# iptables -V

禁用Linux特定命令,提升生产环境安全性_普通用户_04

iptables是Linux命令行防火墙,它允许我们根据一组规则管理传入和传出流量。新增了两条规则丢掉ping请求和ping应答。以下规则用于正常禁用与服务器之间的 ping 操作。

[root@localhost ~]# sudo iptables -A INPUT -p icmp –icmp-type echo-request -j DROP
[root@localhost ~]## sudo iptables -A OUTPUT -p icmp –icmp-type echo-reply -j DROP

禁用Linux特定命令,提升生产环境安全性_linux 安全_05

上面是关闭ping请求和应答的iptables。那么如何恢复ping请求和ping应答呢?其实很简单,把刚才那两条规则删除掉即可,删除通过-D来删除,新增是通过-A来新增。

[root@localhost ~]# iptables -D OUTPUT -p icmp --icmp-type echo-reply -j DROP
[root@localhost ~]# iptables -D INPUT -p icmp --icmp-type echo-request -j DROP

禁用Linux特定命令,提升生产环境安全性_普通用户_06

从上图中可以看出,删除iptables规则之后,又恢复成可以ping通的了。

3,通过csf防火墙

如果Linux中已经安装了CSF防火墙。可以使用CSF禁用传入ping很容易。请按以下步骤操作。

注:如果未安装CSF防火墙,需要先安装才能执行以下命令。

(1),修改csf配置文件(/etc/csf/csf,conf)。增加以下命令

ICMP_IN = "0"

禁用Linux特定命令,提升生产环境安全性_linux禁用命令_07

(2),修改完之后,保存。接着重新启动 CSF 和 LFD 以更新更改。

[root@localhost ~]#/etc/init.d/csf restart
[root@localhost ~]#/etc/init.d/lfd restart
[root@localhost ~]#csf -r

通常情况下前两种方式不用安装任何软件包,Linux系统默认可以进行配置的,最后一种方式csf防火墙是需要安装csf软件包才能进行配置服务器禁用ping命令应答的。

标签:bin,etc,禁用,su,命令,usr,Linux,root,安全性
From: https://blog.51cto.com/u_14249042/7132186

相关文章

  • iptables:Linux网络安全的神器 iptables的使用方法 使用案例
    iptables是Linux系统中的防火墙管理工具,它的功能强大并且使用灵活,可用于网络防护、路由转发等功能应用。由于防火墙功能是基于Linux内核实现的,具有稳定和高效率的特点,因此常被广泛地使用到多个场景中。解锁iptables的技能,将会成为我们Linux网络安全的神器。本文将介绍iptables的......
  • 红帽计划改善RHEL的Linux引导加载程序
         据了解,红帽方面表示他们正在招收全职开发者来增强Fedora和RHEL的Linux引导加载程序体验。而GRUB和Linux引导加载程序通常不会受到太多人关注,从而大致不少用户倾向于“能用就行”,因而大多数Linux发行版更愿意隐藏GRUB菜单obghtysuew。有消息称,红帽有计划采取......
  • Linuxy应用程序加载动态链接库的默认路径
    在Linux系统中,当应用程序执行时,系统会按照一定的规则去寻找动态链接库(也称为共享库或.so文件)。系统使用一组默认的搜索路径来查找这些库,以便在运行时正确加载所需的库。以下是Linux系统寻找动态链接库的一般规则:系统默认路径:Linux系统会在一组默认的路径中查找动态链接......
  • linux 文件压缩常用命令
    一、常见文件压缩格式Windows和Linux下的压缩文件格式有一些共同的,也有一些不同的。以下是一些常见的压缩文件格式:.zip:这是Windows中最常用的压缩格式,也是Linux中可以识别的一种压缩格式,可以方便地和Windows系统通用压缩文件。在Linux中,可以使用zip和unzip命令来压缩和解压.zip文......
  • 笔记整理--C语言--linux下错误的捕获:errno和strerror的使用——转载
    linux下错误的捕获:errno和strerror的使用经常在调用linux系统api的时候会出现一些错误,比方说使用open()、write()、creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。在程序代码中包含#include<e......
  • linux查看系统挂载磁盘
    linux查看系统挂载磁盘 解决AWS挂载、解决挂载完重启就消失等问题linux上的盘和window的有区别,磁盘空间必须挂载在目录上,要不然没用对与新增的硬盘、SSD固态硬盘、挂载到linux上的操作如下: df-h   #显示目前在Linux系统上的文件系统的磁盘使用情况统计。......
  • linux 防火墙命令
    #查看防火墙状态systemctlstatusfirewalld#开启防火墙systemctlstartfirewalld.service#重启防火墙systemctlrestartfirewalld.service#查看firewall防火墙的状态firewall-cmd--state#查看防火墙开放端口规则firewall-cmd--list-port#查看80端口是否开启firewall-cmd--q......
  • Linux实用运维脚本分享
     编辑Linux实用运维脚本分享......
  • 聊一下操作系统 macOS 与 Linux
    对于Windows操作系统大家都比较熟悉,也常拿它与Linux操作系统进行比较,两者之间的差异也很明显。但对于macOS和Linux的比较不太多,很多人认为它们很相似,因为这两种操作系统都可以运行Unix命令。其实详细比较下,两者还是有很多不同点的,每种操作系统都是独一无二的存在,下面就让我们......
  • Linux Shell下awk,sed,cut的常用方法并在自动化运维脚本中联合运用
    AWK处理工具,它可以用于提取、处理和格式化文本数据。它的主要功能是逐行扫描文件,并根据匹配模式执行操作。AWK具有以下主要特点:读取和处理文本文件中的数据根据匹配模式执行操作逐行扫描文件打印指定的列在自动化运维脚本中,AWK可以用于处理日志文件,例如提取特定行的数据、从日志文......