Linux系统优化


添加普通用户账号


linux/unix是一个多用户、多任务的操作系统。
超级管理员(root): root默认在unix/linux操作系统中拥有最高的管理权限。比喻:皇帝。
普通用户:管理员或者具备管理权限的用户创建的。权限:系统管理仅可以读、看,不能增、删、改。
权限越大,责任越大。
可使用如下命令添加一个普通用户账号,并为其设置口令:
[root@oldboy ~]# useradd luffy
[root@ oldboy ~]# passwd luffy ###问你新的密码,然后你输入 交互设置密码
Changing password for user luffy.
New password:
BAD PASSWORD: it is too simplistic/systematic #ç提示密码太简单了,但可以不理会。
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
提示:
一般情况下,在企业生产环境中应尽量避免直接到root用户下操作,除非有超越普通用户权限的系统维护需求,使用完后立刻退回到普通用户。
非交互式设置密码:还可通过下面的命令一步到位地设置密码(其中,luffy为用户名,密码为123456)。
echo "123456"|passwd --stdin luffy && history -c
尝试切换用户角色,命令如下:
[root@ oldboy ~]# su - luffy <==由root管理员,切换到普通用户luffy
[luffy@ oldboy ~]$ whoami <==查看当前用户是什么
luffy
[luffy@ oldboy ~]$ su - root <==切回到root用户
Password:
说明:
1)超级用户root切换到普通用户下面,无需输入对应用户密码,这相当于“皇帝”去“大臣”家里。
2)普通用户切换到root或其他普通用户下,需要输入切换的对应用户密码。
3)普通用户的权限比较小,只能进行基本的系统信息查看等操作,无法更改系统配置和管理服务。
4)$符号是普通用户的命令行提示符,#符号是超级管理员的提示符。示例如下:
[luffy@ oldboy ~]$ #普通用户luffy对应的提示符
[root@ oldboy ~]# #超级管理员root对应的提示符
5)提示符@前面的字符代表当前用户(可用whoami查询),后面的为主机名(可用hostname查询),~所在的位置是窗口当前用户所在的路径。示例如下:
[luffy@ oldboy ~]$ #luffy为当前用户,Oldboy为主机名,~表示当前目录,即家目录。
6)Linux命令提示符由PS1环境变量控制。示例如下:
[root@ oldboy ~]# echo $PS1
[\u@\h \W]\$
这里的PS1='[\u@\h \W]$ ',可以通过全局变量配置/etc/profile文件调整PS1='[\u@\h \W\t]$ '。
注意:PS1必须大写的。

参数 含义
\d 代表日期,格式为weekday month date。
\H 完整的主机名称。
\h 仅取主机的第一个名字。
\t 显示时间为24小时格式,如HHMMSS。
\T 显示时间为12小时格式。
\A 显示时间为24小时格式HHMM。
\u 当前用户的账号名称。
\v BASH的版本信息。
\w 完整的工作目录名称。家目录会以~显示
\W 利用basename取得工作目录名称,所以只会列出最后一个目录
\# 下达的第几个命令
\$ 提示字符,如果是root时,提示符为# ,普通用户则为$
变量(放东西 查看变量的内容 ) PS1---变量的名字------藏经阁里面的武功秘籍(葵花宝典) 秘籍名字(书名) $PS1---查看变量里面的内容---手端着书(葵花宝典) 看书的内容(读书) PS1=新的内容 ---向变量里面放入东西----修改书的内容(升级书) 欲练此功,必先自宫,若不自宫,也能成功。 linux变量名字(书名)大写的一般是自己用(linux环境变量),在哪里都可以用的变量

关闭SELinux


SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的。
关闭方式如下
永久关闭selinux
# 备份
cp /etc/selinux/config /etc/selinux/config.bak
# sed修改,看看结果,不加-i
sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 确认并使用 sed -i 修改文件内容
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 检查结果
grep "disabled" /etc/selinux/config
临时关闭selinux
setenforce 0
# 数字0表示Permissive,即给出警告提示,但不会阻止操作,相当于disabled。
# 数字1表示Enforcing,即表示SElinux为开启状态。
getenforce # 查看命令
命令说明:
setenforce:用于命令行管理SELinux的级别,后面的数字表示设置对应的级别。
getenforce:查看SELinux当前的级别状态。
提示:修改配置SElinux后,要想使其生效,必须要重启系统。因此,可配合使用setenforce 0这个临时使其关闭的命令,这样在重启前后都可以使得SElinux关闭生效了,也就是说无须立刻重启服务器了,在生产场景下Linux机器是不能随意重启的(不要给自己找任何理由重启)。


关闭iptables(C6)或Firewalld(C7)防火墙


关闭防火墙的目的是为了让初学者学习更方便,将来在学了iptables技术后可再统一开启。 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了。 关闭防火墙的具体操作过程如下:
CentOS 6.x
关闭防火墙
[root@oldboyedu ~]# /etc/init.d/iptables stop
[root@oldboyedu ~]# /etc/init.d/iptables stop #<==重复执行下确认已关闭。
查看是否关闭
[root@oldboyedu ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
关闭开机自启动命令,前面已经关闭这里就无需执行。
[root@oldboyedu ~]# chkconfig iptables off
[root@oldboyedu ~]# chkconfig --list|grep ipt
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
CentOS7.x
关闭防火墙
[root@oldboyedu ~]# systemctl stop firewalld
关闭开机自启动
[root@oldboyedu ~]# systemctl disable firewalld
查看防火墙状态
[root@oldboyedu ~]# systemctl is-active firewalld #是否正在运行
[root@oldboyedu ~]# systemctl is-enabled firewalld #是否开机自启动
关闭NetworkManager
[root@oldboyedu ~]# systemctl stop NetworkManager
[root@oldboyedu ~]# systemctl disable NetworkManager


如何防止显示中文乱码(该优化初期建议不优化,直接强制看英文)


此项优化为可选项,即调整Linux系统的字符集设置,那么,什么是字符集呢?
简单的说,字符集就是一套文字符号及其编码。目前Linux下常用的字符集有:
GBK:定长,双字节,不是国际标准,支持的系统不少,实际企业用的不多。
UTF-8:非定长,1~4字节,广泛支持,MYSQL也使用UTF-8,企业广泛使用。 可通过快捷的命令方式在/etc/sysconfig/i18n中添加如下内容,使其支持中文显示:
CentOS 6.x修过过程
[root@ oldboy ~]# echo $LANG ###查看系统当前的字符集
en_US.UTF-8
[root@ oldboy ~]# cat /etc/sysconfig/i18n #####系统字符集配置文件的位置
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@Oldboy ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori ####备份
[root@Oldboy ~]# echo 'LANG="zh_CN.UTF-8"' >/etc/sysconfig/i18n ####修改配置文件
#→相当于用vi /etc/sysconfig/i18n 添加LANG="zh_CN.UTF-8"内容
[root@Oldboy ~]# source /etc/sysconfig/i18n #→使上文修改生效 ###让配置文件生效
[root@Oldboy ~]# echo $LANG ###查看系统当前的字符集
zh_CN.UTF-8
CentOS 7.x修过过程
修改/etc/locale.conf这个文件
提示:
乱码的核心解决方法:
系统字符集(utf-8)
xshell软件的字符集保持一致(utf-8)
文件使用的字符集一致
zh_CN.GBK
注意“zh_CN.UTF-8”的大小写字母。
这个中文显示配置要跟你自己的SSH客户端的配置一致。


使用阿里云镜像做yum源


默认国外的yum源(软件仓库)比较慢,所以换成国内的。
备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
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
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
之后运行yum makecache生成缓存,此步骤可以不执行。


epel源的安装


备份(如有配置其他epel源)
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
下载新repo 到/etc/yum.repos.d/
epel(RHEL 7)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
epel(RHEL 6)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
epel(RHEL 5)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo
更换查看帮助的网站mirrors.aliyun.com


关于网络下载命令


curl
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
常用参数
-o --output,把输出写到该文件中
-O --remote-name,把输出写到该文件中,保留远程文件的文件名
-I --head,只显示传输文档,经常用于测试连接本身
-s --silent,静默模式,不输出任何东西
-T --upload-file,上传文件
-V --version,显示版本信息
-f --fail,只输出错误信息
-# --progress-bar,用进度条显示当前的传送状态
-H --header,自定义标题传递到服务器
-v --verbose,详细显示请求报文结构和响应报文结构信息
wget 主要用于下载文件
wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成
wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。
常用参数
-V --version,显示 Wget 的版本信息并退出。
-h --help,打印此帮助。
-b --background,启动后转入后台。
-O --output-document=FILE,将文档写入 FILE。
-q --quiet,安静模式(无信息输出)。
-v --verbose,详尽的输出(此为默认值)。


安装常用软件


为了使用方便,可以安装一些常用的软件。
yum -y install tree nmap sysstat lrzsz dos2unix telnet bash-completion bash-completion-extras vim nc lsof net-tools rsync

升级具有典型漏洞的软件版本


诸如openssl、openssh、bash爆出很多软件漏洞,在企业场景需要进行修复漏洞操作,步骤如下:
首先查看相关软件的版本号。
[root@Oldboy ~]# rpm -qa openssl openssh bash
openssl-1.0.1e-30.el6.x86_64
bash-4.1.2-29.el6.x86_64
openssh-5.3p1-104.el6.x86_64
执行升级已知漏洞的软件版本到最新,命令如下:
[root@Oldboy ~]# yum install openssl openssh bash -y
[root@Oldboy ~]# rpm -qa openssl openssh bash
openssh-5.3p1-104.el6_6.1.x86_64
bash-4.1.2-29.el6.x86_64
openssl-1.0.1e-30.el6_6.5.x86_64


时间同步


echo '#Timing synchronization time' >/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >/var/spool/cron/root
crontab -l


加大文件描述


echo '* - nofile 65535 ' >>/etc/security/limits.conf
tail -1 /etc/security/limits.conf


别名和环境变量优化


cat>>/etc/profile.d/color.sh<<EOF
alias ll='ls -l --color=auto --time-style=long-iso'
PS1='\[\e[32;1m\][\u@\h \W]\$ \[\e[0m\]'
export HISTTIMEFORMAT='%F-%T '
EOF


内核优化


cat >>/etc/sysctl.conf<<EOF
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
EOF

sysctl -p


配置ssh远程管理服务文件


sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
grep 'UseDNS no' /etc/ssh/sshd_config
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
grep 'GSSAPIAuthentication no' /etc/ssh/sshd_config
systemctl restart sshd


修改主机名和IP脚本


[root@oldboy ~]# cat /server/scripts/hostname_ip.sh
#!/usr/bin/sh
if [ $# -ne 2 ];then
echo "/bin/sh $0 hostname PartIP"
exit 1
fi
hostnamectl set-hostname $1

sed -i "s#100#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]
systemctl restart network
bash


Linux基础优化与安全重点小结


不用root登录管理系统,而以普通用户登录通过sudo授权管理。
更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至要更改SSH服务只监听内网IP。
定时自动更新服务器的时间,使其和互联网时间同步。
配置yum更新源,从国内更新源下载安装软件包。
关闭SELinux及iptables(在工作场景中,如果有外部IP一般要打开iptables,高并发高流量的服务器可能无法开启)。
调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量。
定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满(注意Centos6和Centos5要清除的目录不同)。
精简并保留必要的开机自启动服务(如crond、sshd、network、rsyslog、sysstat)。
Linux内核参数优化/etc/sysctl.conf,执行sysctl -p生效。
更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。
锁定关键系统文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab,处理以上内容后把chattr、lsattr改名为luffy,转移走,这样就安全多了。
清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。
清除多余的系统虚拟用户账号。
为grub引导菜单加密码。
禁止主机被ping。
打补丁并升级有已知漏洞的软件。 新系统 yum –y install 已经在线上用的服务器 web服务器能够停止。

posted @ 2019-04-15 18:39  逐梦~前行  阅读(5589)  评论(0编辑  收藏  举报