安装好Linux后,为了系统的安全性,我们需要为系统调优和安全设置,下面是在企业实际生产环境中常用的调优及安全设置。
SELinux是美国国家安全局对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里就把他关了吧。至于安全访问,可通过防火墙来实现,这也是大多数生产环境的做法。
vim /etc/selinux/config
SELINUX=disabled
必须重启系统才能生效
getenforce #查看SELInux当前状态
setenforce 0 #数字0表示Permissive,即给出警告但不会阻止操作,相当于disabled,数字1表示Enforcing,即开启SELinux
生产环境中可以先临时禁用SELinux,即设置setenforce 0,再去修改selinux的配置文件永久禁用。
这样就不用立即重启系统也能禁用SELinux了,等下次系统重启时就能实现永久禁用了。之所以这样做,是因为线上的系统不能随便立即重启的。
精简开机启动服务是为了节省系统资源,也为了减少安全漏洞。最好只开启必须的服务。
以下是几个必要的开机启动服务:
sshd(远程连接服务)
rsyslog(系统的日志服务)
network(网络网卡服务)
crond(计划任务服务,使用crontab命令创建计划任务)
sysstat(一个软件包,包含检测系统性能和吞吐率的一组工具)
centos5.x和centos 6.x版本使用chkconfig 命令来设置开机自启动服务
chkconfig --list #查看所有的开机自启动服务
chkconfig --del service_name #删除开机自启动的服务
chkconfig --add service_name #添加服务开机自启动
chkconfig --level 35 service_name on|off #表示35级别下默认启动|关闭
chkconfig --level 5 service_name off #表示5级别下开机不启动
centos7.x版本后不再使用chkconfig命令来管理,改用systemctl 命令来管理
systemctl list-unit-files #查看所有的服务,其中enable就表示开机自启动,disable表示禁止开机自启动
systemctl enable service_name #开机自启动
systemctl disable service_name #禁止开机自启动
在 Linux 系统安全优化中,遵循最小化原则是至关重要的。
以下是一些关键的最小化原则:
最小化安装: 安装的 Linux 系统应该是最小化的,只安装必需的软件包。使用 Yum 或者其他包管理工具时,也应该尽可能地减少安装不必要的软件包。
最小化开机自启动服务: 系统启动时自动启动的服务应该是最小化的,即只启动必需的服务。禁止启动不必要的服务,以减少系统的攻击面。
最小化命令使用: 在使用命令时,应该尽可能使用最小化的选项和参数。例如,应该优先使用 rm -f 命令而不是 rm -rf,以减少意外删除文件的风险。
最小化登录权限: 禁止 root 用户远程登录,使用普通用户登录系统。并且,对普通用户的授权应该是最小化的,只授予必要的管理系统命令的权限,以降低潜在的安全风险。
最小化文件及目录权限: 对文件和目录的权限应该是最小化的,禁止普通用户随意创建、更改或删除文件。合理设置文件和目录的权限,以保护系统的安全性和完整性。
遵循这些最小化原则可以帮助提高 Linux 系统的安全性,减少系统面临的安全风险。
为了提高系统的安全性和管理的灵活性,可以利用sudo来精确控制用户对系统命令的使用权限。
执行 visudo 命令,即可快速打开编辑 /etc/sudoers
文件。
在文件中找到 root ALL=(ALL) ALL
这行,表示允许root用户在任意主机执行任何命令。
在该行下面添加需要提升为root权限的普通用户名及其权限,其格式为:
username_or_group hostname=(runas) command
其中:
username_or_group 是要赋予权限的普通用户名或用户组。
hostname 表示允许登录的主机,使用 ALL 表示任意主机。
(runas) 表示以谁的身份执行命令,使用 ALL 表示root身份。
command 表示用户被允许执行的命令。
示例:
zhangsan ALL=(ALL) /usr/sbin/reboot,/usr/sbin/useradd
服务器的时间准确性对于数据记录和业务流程至关重要。如果服务器的时间不准确,可能会导致数据错误,特别是在订单等时间敏感的业务中。因此,确保服务器时间的准确性是至关重要的。
在 Linux 系统中,我们可以通过同步服务器时间来保证准确性。同步的目标可以是网络上的时间服务器,也可以是本地内网的时间服务器。
通常,我们可以使用诸如 ntpdate 等命令来执行时间同步操作。结合定时任务,可以定期执行时间同步操作,以确保服务器时间的持续准确。
每个用户能打开的文件数量是有限的,使用命令ulimit -n
查看,默认是1024。使用ulimit -SHn 102400
命令来修改限制,但这是临时的,在退出登录会话后就会失效了。
如果想永久变更就修改/etc/security/limits.conf
文件,如下:
vi /etc/security/limits.conf
* hard nofile 102400
* soft nofile 102400
这只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
系统级的限制是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:
sysctl -w fs.file-max=102400
使用sysctl命令更改也是临时的,如果想永久更改需要在/etc/sysctl.conf
添加
fs.file-max=102400
保存退出后使用sysctl -p 命令使其生效。
要锁定关键系统文件,必须对账号密码及启动文件加锁,防止被篡改。
上锁命令如下:
chattr +i /etc/passwd /etc/shadow /etc/group /etc/inittab
上锁后所有用户都不能对文件修改删除
解锁命令:
chattr -i /etc/passwd /etc/shadow /etc/group /etc/inittab
此项不是必须的,因为有时候我们需要ping服务器查看网络是否正常。当然设置禁止ping也可以,从安全的角度来看,禁止ping还会增加系统的安全性。
永久设置禁止ping :
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf #0表示允许,1表示禁止
sysctl -p #重新加载内核参数
这样在客户端ping服务器就会出现请求超时。
以上这样禁止ping并不是最优的方案,实际生产环境中最常用的做法是通过防火墙来设置让指定的IP可以ping,如下:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #0表示允许,1表示禁止
iptables是Linux命令行防火墙,也可以配置规则禁用ping流量。在Linux服务器上通过iptables来禁用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
修改之前,需要将/etc/ssh/sshd_config
备份一个,比如/etc/ssh/sshd_config.old
。
主要优化如下参数:
Port 12011
PermitRootLogin no
UseDNS no #防止ssh客户端超时# ClientAliveInterval 30 ClientAliveCountMax 99 GSSAuthentication no
优化目的在于更改ssh远程端口、禁用root远程登录(本地还是可以root登录的)、禁用dns可以防止ssh超时,解决ssh慢的问题。
另外,你还可以启用密钥登录,这个根据公司需求来操作。
“注意:修改以后需重启ssh生效。
禁用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 命令,不能使用其他任何命令
禁用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
ssh登录以后,势必会看到主机名,这个主机名建议根据业务需要进行命名。这个命名同时也方便于我们后续的监控自动添加以及对批量化管理有帮助。
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路径
设置过滤目录:
编辑 /etc/safe-rm.conf
文件,添加需要过滤的目录即可,一行一个,而且应满足递归原则;
格式:
/
代表过滤 目录/
./*
代表过滤 目录/
下面的所有文件
递归过滤示例(这样/root/blue/students
各级目录都会受到保护):
/
/root
/root/blue
/root/blue/students
来源|DevOps实战派
后端专属技术群构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!
文明发言,以
交流技术
、职位内推
、行业探讨
为主广告人士勿入,切勿轻信私聊,防止被骗
加我好友,拉你进群