Linux服务器知识

1、系统选择CentOS 系统,大部分的服务器都是使用CentOS系统。CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。
2、安装好系统如何配置Web服务器
2.1 升级服务器yum update 平时也要经常更新,及时补上一些已公开的服务器漏洞。
2.2防火墙:CentOS5/6防火墙iptables, CentOS7 防火墙firewalld。防止漏洞攻击
服务器默认都已经安iptables软件
iptables配置和Firewalld配置
只开放需要的端口,白名单的形式开放端口。
2.3 SSH配置、配置端口或者key方式登录。安全入口
ssh配置文件一般是/etc/ssh/sshd_config
2.4 时间同步配置ntpdate 定时同步日期
安装:yum install ntpdate

2.5 磁盘分区及挂载 ext4文件系统,
fdisk dev 命令分区
mkfs.ext4 格式化磁盘分区
mount –t ext4 dev dir 挂载分区
编辑/etc/fstab 文件,防止重启后需要重新挂载
2.6 安装及配置VIM,默认的是vi编辑器。VIM更加强大,可以提高不少效率,还有语法高亮功能。
3、NMP配置
3.1 安装NMP需要的一些基础类库以及编译软件gcc等
yum -y install gcc gcc-c++ glibc automake autoconf libtool make pcre-devel libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel ncurses ncurses-devel
3.2 Nginx
Nginx 编译安装Nginx,官网下载最新稳定版本的Nginx,编译安装。
编译安装命令:
将Nginx加入到Service列表
chkconfig 如何使用
Nginx配置参数【对照实际系统讲解】
3.3 MySQL 编译安装 MySQL5.5.47
1、安装CMAKE (MySQL需要CMAKE方式安装)
2、安装MySQL
3、MySQL主从配置
4、MySQL用户级权限配置[最小权限原则]
4.4 PHP 安装
yum方式安装,安装php-fpm进程池方式管理软件;
php.ini配置
php-fpm.conf配置
4、PHP如何编译安装扩展【如何安装Yaf扩展】
1、安装 php-devel
2、下载Yaf并加压
3、进入加压目录执行
phpize;
./configure -–with-php-config=/php-config-pahth
make
make test
make install
4、修改php.ini

Linux日志文件及常用命令

<h4>日志文件说明</h4>
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
<h4>系统</h4>

uname -a # 查看内核/操作系统/CPU信息

cat /etc/issue

cat /etc/redhat-release # 查看操作系统版本

cat /proc/cpuinfo # 查看CPU信息

hostname # 查看计算机名

lspci -tv # 列出所有PCI设备

lsusb -tv # 列出所有USB设备

lsmod # 列出加载的内核模块

env # 查看环境变量

<h4>资源</h4>

free -m # 查看内存使用量和交换区使用量

df -h # 查看各分区使用情况

du -sh <目录名> # 查看指定目录的大小

grep MemTotal /proc/meminfo # 查看内存总量

grep MemFree /proc/meminfo # 查看空闲内存量

uptime # 查看系统运行时间、用户数、负载

cat /proc/loadavg # 查看系统负载

<h4>磁盘和分区</h4>

mount | column -t # 查看挂接的分区状态

fdisk -l # 查看所有分区

swapon -s # 查看所有交换分区

hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)

dmesg | grep IDE # 查看启动时IDE设备检测状况

<h4>网络</h4>

ifconfig # 查看所有网络接口的属性

iptables -L # 查看防火墙设置

route -n # 查看路由表

netstat -lntp # 查看所有监听端口

netstat -antp # 查看所有已经建立的连接

netstat -s # 查看网络统计信息

<h4>进程</h4>

ps -ef # 查看所有进程

top # 实时显示进程状态(另一篇文章里面有详细的介绍)

<h4>用户</h4>

w # 查看活动用户

id <用户名> # 查看指定用户信息

last # 查看用户登录日志

cut -d: -f1 /etc/passwd # 查看系统所有用户

cut -d: -f1 /etc/group # 查看系统所有组

crontab -l # 查看当前用户的计划任务

<h4>服务</h4>

chkconfig –list # 列出所有系统服务

chkconfig –list | grep on # 列出所有启动的系统服务

<h4>程序</h4>

rpm -qa # 查看所有安装的软件包

[科普] alpha版、beta版、rc版、trial版的意思

很多软件在正式发布前都会发布一些预览版或者测试版,一般都叫“beta版”或者 “rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思。

        alpha版:内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和 测试人员测试和找BUG用的。

        beta版:公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存 在很多BUG,但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友,可以下载这个版本。

         rc版:全写:Release Candidate(候选版本),该版本又较beta版更进一步了,该版本功能不再增加,和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似 预览版,这个的发布就标明离最终发行版不远了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。

         stable版:稳定版。在开源软件中,都有stable版,这个就是开源软件的最终发行版,用户可以放心大胆的用了。

         trial版:试用版,通常都有时间限制,有些试用版软件还在功能上做了一定的限制。可注册或购买成为正式版。

         unregistered版:未注册版,通常没有时间限制,在功能上相对于正式版做了一定的限制。可注册或购买成为正式版。

另外,对于商业软件,还有一下版本:
RTM版:全称为Release to Manufacture。工厂版。改版程序已经固定,就差工厂包装、光盘印图案等工作了。
OEM版:厂商定制版。
EVAL版:评估版。就是有30或者60天等使用期限的版本。
RTL版:Retail.(零售版),这个版本就是真正发售的版本,有漂亮的包装、光盘、说明书等东西和高昂的价格。

Mac或者Linux下批量转换文件编码及修改文件扩展名

转换文本编码是因为 Mac 下只支持Unicode(UTF-8),GBK文件打开乱码

  • 单个文件转换代码:
iconv -f GBK -t UTF-8 a.php > a.php.utf8
  • 批量转换文本编码代码:
find *.php -exec sh -c "iconv -f GBK -t UTF8 {} > {}.utf8" \;

批量修改文件扩展名是因为 批量修改文件编码以后扩展名变了

  • 批量修改文件扩展名代码
for i in *;do mv $i $(echo $i|sed 's/\.php\.utf8/\.php/');done

LNMP服务器安全指南

平时工作中需要维护一些Linux服务器, 有时候也需要自己配置下服务器, 一般主要是配置LNMP服务。整理了一些服务器安装配置方面的知识,现在就总结下。

  • Linux最低权限安全配置
    Nginx、MySQL、PHP-FPM三者都应该是以最低权限用户组运行。
    网站目录的文件用户组和PHP运行用户属主应该区分开, 设置PHP对网站文件只有可执行权限, 对于静态文件都交给Nginx处理。比如PHP-FPM的用户组为php-fpm:php-fpm, 网站目录www.lezhizhe.net其用户组为www:www, 文件属性为644,也就是说php合nginx在网站根目录只有读权限。对于文件上传目录和缓存目录, 可以设置777权限, 生成的文件要设置为644属性, 禁止上传的文件具有可执行权限。
    对于PHP使用open_basedir限制虚拟主机跨目录访问(网上有说在php.ini文件中修改open_basedir, 经测试不生效)。不过可以在nginx的每个站点的con.f文件中设置PHP的open_basedir属性(注意如果在某个站点设置了该属性其它站点未设置, 会造成其它站点打不开的情况):
fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/";
  • Linux防火墙及端口配置
    1、禁止SSH密码登陆方式, 采用公钥方式登陆。
    2、开启iptables。只开放必要的端口出来。iptable配置如下:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [46:7024]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 53 -j ACCEPT //DNS端口
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT //HTTP端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4000 -j ACCEPT //FTP端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4355 -j ACCEPT //SSh端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 30000:60000 -j ACCEPT //FTP被动模式端口
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
  • PHP安装配置
    1.禁用不安全PHP函数
    disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo
    2.关闭错误日志防止输出错误信息, 记录log方便程序调试
    display_errors = Off
    log_errors=On
    error_log=/var/log/php-fpm/sie-error.log

    3.关闭远程代码执行。如果启用,PHP可以通过allow_url_fopen,在file_get_contents()、include、require中获取诸如FTP或网页内容这些远程数据。如果忘记了对输入数据进行过滤,而这些函数调用了这些数据,则形成了注入漏洞。
    allow_url_fopen=Off

    4.防止PHP信息泄露, 不轻易透露自己php版本信息,防止黑客针对这个版本的php发动攻击.
    expose_php = Off

    5.禁止动态加载链接库:
    enable_dl = Off

    6.将文件上传到远程服务器, 例如nfs等。当然也可以调用你们写好的php接口。 即使有上传漏洞,那么文件也被传到了静态服务器上。木马等文件根本无法执行。

  • Nginx限制访问
    有些目录存放的是一些类库文件或者模板文件, 不需要用户访问的,可以在该目录访问限制返回404。如lib类文件目录和template模板目录:
    location ~ ^/(lib|template)/ {
    return 404;
    }

    对于静态文件(如js、css、图片等)限制通过PHP执行:
    location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
    if (-f $request_filename) {
    expires 0d;
    break;
    }
    }

    对于PHP程序文件,一般都是很少的几个入口文件, 可以直接限制这几个PHP文件的执行。例如现在只有index.php、user.php、admin.php三个入口文件,那我们只把这三个PHP文件交给fast-cgi文件去执行。
    location ~ ^/(index|user|admin)\.php {
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(/?.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/";
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    }