Linux 杂项
Linux 杂项
Linux 杂项
0. 快捷键操作
ctrl +k 剪切光标以后的所有字符
ctrl +u 剪切光标以前的所有字符
ctri +y 粘贴剪切板上的内容
1. 网卡文件
1.1 网卡文件详解
[root@upload-server network-scripts]# cat ifcfg-eth0
DEVICE=eth0 网卡的逻辑设备号
HWADDR=00:1C:42:22:C6:80 网卡的mac地址
TYPE=Ethernet 上网类型属于以太网
UUID=0bbcaa1c-9288-4fd0-a45c-5d17549ede03 通用的唯一识别码
ONBOOT=yes 是否开机启动该网卡
NM_CONTROLLED=no 是否通过NetworkManager管理网卡设备
BOOTPROTO=dhcp 启动类型属于dhcp或者static
IPADDR=10.0.0.7 ip 地址
NETMASK=255.255.255.0 掩码地址
GATEWAY=10.0.0.254 网关
DNS=8.8.8.8 DNS地址
1.2 网卡重启
尽量不要使用/etc/init.d/network restart或者service network restart,因为这样的话所有网卡都会重启,应该使用ifdown eth0 && ifup eth0
1.3 DNS问题
DNS的配置文件为cat /etc/resolve.conf,但是因为系统可能有多块网卡,该项为全局的,仅当网卡配置文件中没有配置DNS时才生效,不然是以网卡配置文件的为准。
1.4 添加静态路由
route add -net 10.211.55.0/24 gw 10.211.55.1或者
ip route add 10.211.55.0/24 via 10.211.55.1
其中
-net设置到某个网段的路由,
gw 出口网关的ip地址
via 出口网关的ip地址
增加默认路由
ip route add default via 192.168.0.1 dev eth0
via 192.168.0.1 默认路由器
2.0 系统初始安装选择包
2.1 minimal最小安装
然后增加base system中的base,compatibilty libraies,debuggings tools和development中的development tools。
2.2 后续安装包组
如果之前忘记安装特定的包组的话,我们可以后期yum安装,如:
yum grouplist 列出所有的包组
补充安装包组
yum groupinstall "Compatibility libraries" "Base" "Development toolsDebugging Tools" "Dial-up Networking Support" -y
注意,包组安装,包组必须加引号。
2.3 初次安装系统时应该将系统升级到最新
[root@upload-server ~]# ll /etc/pki/rpm-gpg/
total 16
-rw-r--r--. 1 root root 1706 Jun 26 22:52 RPM-GPG-KEY-CentOS-6
-rw-r--r--. 1 root root 1730 Jun 26 22:52 RPM-GPG-KEY-CentOS-Debug-6
-rw-r--r--. 1 root root 1730 Jun 26 22:52 RPM-GPG-KEY-CentOS-Security-6
-rw-r--r--. 1 root root 1734 Jun 26 22:52 RPM-GPG-KEY-CentOS-Testing-6
[root@upload-server ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS*
[root@upload-server ~]# yum update -y
如果设备已经开始生产了就不要执行这个命令,以免影响业务,如果初使安装则必须升级,yum uptate和yum upgrade命令是一样的,两者的差别很小。
2.4 额外安装一些有用的软件包
yum install tree telnet dos2unix sysstat lrzsz ncc nmap -y
2.5 ssh配置文件优化
[root@upload-server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@upload-server ~]# egrep "Port|Permit*|UseDNS|GSSAPIA*" /etc/ssh/sshd_config
Port 52113 ssh 端口号
PermitRootLogin no 不允许root ssh登陆
PermitEmptyPasswords no 不允许空密码登陆
GSSAPIAuthentication no 解决Linux之间ssh慢的问题
ListenAddress 10.0.0.0 ssh监听本机的10.0.0.0网段
UseDNS no 指定sshd是否对远程主机名进行反向解析,建议设为no,不然ssh可能会很慢
命令替换更改
sed -i 's%#Port 22%Port 52113%' /etc/ssh/sshd_config
sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
sed -i 's%GSSAPIAuthentication yes%GSSAPIAuthentication no%' /etc/ssh/sshd_config
sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config
[root@upload-server ~]# egrep "Port|Permit*|UseDNS|GSSAPIA.*on" /etc/ssh/sshd_config |grep -v "#"
Port 52113
PermitRootLogin no
PermitEmptyPasswords no
GSSAPIAuthentication no
UseDNS no
命令在末尾添加方法如下
sed -ir '13 iPort 52113 \nPermitRootLogin no\nPermitEmptyPasswords no\nGSSAPIAuthentication no\nUseDNS no\n' /etc/ssh/sshd_config
[root@upload-server ssh]# sed -n "13,17p" sshd_config
Port 52113
PermitRootLogin no
PermitEmptyPasswords no
GSSAPIAuthentication no
UseDNS no
###############################################################
sed -i 's%GSSAPIAuthentication yes%#GSSAPIAuthentication yes%' /etc/ssh/sshd_config
[root@upload-server ssh]# egrep "Port|Permit*|UseDNS|GSSAPIA.*on" /etc/ssh/sshd_config |grep -v "#"
Port 52113
PermitRootLogin no
PermitEmptyPasswords no
GSSAPIAuthentication no
UseDNS no
重启ssh服务,重新登陆ssh,配置文件生效
/etc/init.d/sshd restart
exit
2.6 sudosers
把服务器内部比喻成一个房子的话,安全问题则只能这样,前门只开放80端口和443端口作为web服务,只留一个窗(端口号52113),而且内部通道ssh隐蔽起来,必须拨号VPN才能ssh连接。root用户不能直接ssh登陆,只能普通用户登陆,普通用户用sudo来进行授权管理,让运维既能够干活,又不威胁系统安全,实现用户权限最小化原则。
例如:
[root@backup ~]# echo "test ALL=(ALL) /usr/sbin/useradd, /user/sbin/userdel" >>/etc/sudoers
%test 代表test组
[root@backup ~]# echo "%test ALL=(ALL) /usr/sbin/useradd, /user/sbin/userdel" >>/etc/sudoers
[zjwh@backup ~]$ echo "zjwh ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
[zjwh@backup ~]$ sudo visudo -c
/etc/sudoers: parsed OK
2.7 字符集
[root@backup ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
其中中文字符集为:zh_CN.UTF-8
2.8 设置系统控制变量
设置连接超时时间
echo "export TMOUT=300" >>/etc/profile
历史记录文件的命令数量变量(~/.bash_history)
echo "export HISTFILESIZE=5" >>/etc/profile
命令行的历史记录数量变量
echo "export HISTSIZE=5" >>/etc/profile
source /etc/profile
2.9 设置文件描述符
文件描述符,进程需要使用它来标识打开的文件,与包括相关信息(文件打开模式,文件的位置类型,文件的初始类型等)的文件对象关联,即文件的上下文。对内核而言,所有打开的文件都是通过文件描述符引用的,当打开一个现有的文件或创建一个新的文件,内核向进程返回一个文件描述符,当读或写一个文件时,使用open或create返回的文件描述符标识别改文件,并将其作为参数传递给read或write。
更改配置文件
echo '* - nofile 65535 ' >>/etc/security/limits.conf
[root@upload-server ~]# tail -1 /etc/security/limits.conf
* - nofile 65535
[root@upload-server ~]# ulimit -n
65535
命令行更改
[root@upload-server ~]# ulimit -SHn 65535
[root@upload-server ~]# ulimit -n
65535
[root@upload-server ~]# echo "ulimit -SHn 65535" >>/etc/rc.local
3.0 内核优化设置
vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#以下参数是针对iptables的优化,防火墙没打开会有报错,请忽略
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
更改完成后执行,sysctl -p命令使上述设置生效。
其中解析如下
1. 套接字由本端要求关闭,该参数决定了它保持在FIN-WAIT-2状态时间,默认值为60秒
net.ipv4.tcp_fin_timeout = 2
2. 表示开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接,默认值为0
net.ipv4.tcp_tw_reuse = 1
3. 表示开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_tw_recycle = 1
4. 表示开启SYN Cookies功能,当出现SYN队列溢出时,启用cookies来处理,可防止少量SYN攻击
net.ipv4.tcp_syncookies = 1
5. 表示当keepalive启用时,TCP发送keepalive消息的频度,默认2小时,改为10分钟
net.ipv4.tcp_keepalive_time = 600
6. 用于来设定允许系统打开的端口范围,即用于向外连接的端口范围
net.ipv4.ip_local_port_range = 4000 65000
7. 表示SYN队列的长度,默认为1024,建议加大队列长度为8192或更多,这样可以容纳更多的等待连接的网络连接数。该参数为服务器端用于记录那些尚未收到客户端确认信息的连接请求最大值
net.ipv4.tcp_max_syn_backlog = 16384
8. 表示同时保持TIME-WAIT套接字的最大数量,如果超过这个值TIME-WAIT套接字将立刻被清除并打印警告信息,默认为180000,apache和nginx建议调低一点,5000-30000,不同业务的服务器也可以给大一点,比如LVS,Squid,此参数可以控制TIME-WAIT套接字的最大数量,避免Squid服务被大量的TIME-WAIT套接字拖死
net.ipv4.tcp_max_tw_buckets = 36000
9. 表示在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1
10. 该参数决定了内核在放弃连接之前发送SYN-ACK包的数量
net.ipv4.tcp_synack_retries = 1
11. 该选项默认值为128,用于调节系统同时发起的TCP连接数,在高并发的请求中,默认值可能会导致链接超时或重传,因此需要结合并发请求数来调节此值
net.core.somaxconn = 16384
12. 表示当每个网络口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数,默认值为1000
net.core.netdev_max_backlog = 16384
用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数值,孤立连接将立即被复位并打印警告信息,这个限制只为了(减少这个值)防止简单的Dos攻击,不能过分依靠这个限制甚至认为减少这个值,更多的情况时增加这个值,
net.ipv4.tcp_max_orphans = 16384
3.1 定时清理邮件服务临时目录的垃圾文件
centos 5 系列系统默认安装了sendmail服务,临时存放目录为/var/spool/clientqueue/
centos 6 默认情况下时没有安装sendmail服务,而是改装了postfix服务,因此默认的临时存放目录为:
[root@upload-server ~]# ls -ld /var/spool/postfix/maildrop/
drwx-wx---. 2 postfix postdrop 4096 Mar 24 2017 /var/spool/postfix/maildrop/
手动清理方法如下:
find /var/spool/clientqueue/ -type f |xargs rm -f
find /var/spool/postfix/maildrop/ -type f |xargs rm -f
可以将上述命令写为脚本,每天晚上凌晨执行一次,如:
[root@upload-server ~]# mkdir -p /server/scripts/
[root@upload-server ~]# echo "find /var/spool/postfix/maildrop/ -type f |xargs rm -f" > /server/scripts/del_mail_file.sh
[root@upload-server maildrop]# sh /server/scripts/del_mail_file.sh
[root@upload-server maildrop]# echo "00 00 * * * /bin/sh /server/scripts/del_mail_file.sh" >>/var/spool/cron/root
[root@upload-server maildrop]# crontab -l
00 00 * * * /bin/sh /server/scripts/del_mail_file.sh
3.2 隐藏linux的版本信息
清除登陆时显示在终端的信息
> /etc/issue
> /etc/issue.net
> /etc/motd
3.3 锁定关键系统文件,防止被提权更改
重要文件加锁,加锁后不能创建用户
[root@upload-server maildrop]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
防止黑客用chattr解锁,因此隐藏chattr命令,应该在文档中重要标注,防止忘记
[root@upload-server maildrop]# mv /usr/bin/chattr /usr/bin/chattr.bak
查看文件是否加锁
[root@upload-server maildrop]# lsattr /etc/passwd
----i--------e- /etc/passwd
解锁文件
[root@upload-server ~]# chattr.bak -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
3.4 清除多余的虚拟用户
操作前确认系统服务有哪些,哪些虚拟账号不需要使用,如不确定就不要操作,系统中一般绝大多数的虚拟账号都可以清除,如bin,adm,lp,halt,mail,uucp,operator,games,gopher,ftp,dbus,vcsa,abrt,ntp,saslauth,postfix,tcpdump等。
3.5 为grub菜单加密码
为grub菜单加密码是为了防止他人修改grub进行内核启动设置,以及用单用户启动修改root密码等操作
1. 先利用/sbin/grub-md5-crypt产生md5密码串,如
[root@upload-server ~]# /sbin/grub-md5-crypt
Password:
Retype password:
$1$dOha30$2uxZjJHc/0cgA8D/T27oQ.
2. 修改grub.conf文件,在splashimage和title之间插入密码
password --md5 $1$dOha30$2uxZjJHc/0cgA8D/T27oQ.
如:
[root@upload-server ~]# sed -i '14 i password --md5 $1$dOha30$2uxZjJHc/0cgA8D/T27oQ.' /etc/grub.conf
设置完成后,下次开机需要管理grub时就会提示需要输入密码
3.6 Linux 禁止ping
此操作用得比较少,因为ping命令可以排查网络故障,一般使用防火墙来设置,让内网用户可以ping,外网用户不能ping
如:
iptables -t filter -I INPUT -p icmp --icmp-type8 -i eth0 -s 10.0.0.0/24 -j ACCEPT
系统禁止ping,则使用
echo "net.ipv4.icmp_echo_ignore_all=1" >>/etc/sysctl.conf
sysctl -p
如果要恢复ping命令,则在/etc/sysctl中删除net.ipv4.icmp_echo_ignore_all=1
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
3.7 升级具有典型漏洞版本的软件
openssl,openssh,bash存在很多软件漏洞,一般会要求修复
[root@upload-server ~]# rpm -qa openssl openssh bash
openssl-1.0.1e-57.el6.x86_64
bash-4.1.2-48.el6.x86_64
openssh-5.3p1-123.el6_9.x86_64
[root@upload-server ~]# yum install openssl openssh bash -y
3.8 更新yum源
使用阿里源
备份
[root@upload-server ~]# ls -ld /etc/yum.repos.d/
drwxr-xr-x. 2 root root 4096 Oct 7 09:20 /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
或
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
下载完后执行,yum makecache
使用163源
1. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo
3. yum clean all
4. yum makecache
3.9 清理自启动服务
yum install tree telnet dos2unix sysstat lrzsz vim man
以下5项服务建议开机启动:sysstat,rsyslog,sshd,crond,network,其余服务一并关闭,待需要的时候在打开,如:
[root@server tmp]# for n in `chkconfig --list |grep 3:on|awk -F " " '{print $1}'`; do chkconfig $n off;done && for n in sysstat rsyslog sshd crond network;do chkconfig $n on;done
或者
[root@server tmp]# for n in `chkconfig --list |grep 3:on|egrep -v "sysstat|rsyslog|sshd|crond|network"|awk -F " " '{print $1}'`;do chkconfig $n off;done
4.0 VMware克隆后网络出现问题
- 编辑对应的网卡文件,清除HWADDR和UUID所在的行
- 清空/etc/udev//rules.d/70-persistent-net.rules文件
- 重启系统