在生产实际中,常常会因为某些安全要求,需要对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
通过上图可以看出执行完命令之后,确实不能够ping通了,接着改为0之后又可以ping通了。但是上图配置的这种方式只是临时的,只对当前会话有用,当重启之后,就恢复了,所以有没有啥办法是重启之后对任何会话都适用的呢?还确实有这种能够使修改的配置长期生效,在以后的重启后都能够使服务器的ping不能够应答。配置方式如下,在/etc/sysctl.conf文件中增加以下命令行:
net.ipv4.icmp_echo_ignore_all = 1
保存文件,接着执行以下命令使其生效。
sysctl -p
接着重启电脑,执行ping命令,ping本机地址,检测是否能够ping通。
2,通过iptables
iptables是Linux命令行防火墙,也可以配置规则禁用ping流量。在Linux服务器上通过iptables来禁用ping请求,请运行以下命令。首先来检测一下iptables的版本。
[root@localhost ~]# iptables -V
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
上面是关闭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
从上图中可以看出,删除iptables规则之后,又恢复成可以ping通的了。
3,通过csf防火墙
如果Linux中已经安装了CSF防火墙。可以使用CSF禁用传入ping很容易。请按以下步骤操作。
注:如果未安装CSF防火墙,需要先安装才能执行以下命令。
(1),修改csf配置文件(/etc/csf/csf,conf)。增加以下命令
ICMP_IN = "0"
(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