/ linux

CentOS

CentOS 7

firewall 防火墙问题

CentOS 与 Ubuntu 最大的区别在于默认启用防火墙。尤其在阿里云上开放 Redis 等服务的端口时要格外注意,建议参考 centos的防火墙firewall操作手册 来操作。

系统调整

如果使用的是阿里云:阿里云系统初始化

设置软件源

更换源镜像

cd /etc/yum.repos.d/
sudo mv CentOS-Base.repo CentOS-Base.repo.bak
sudo curl -o CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

设置 EPEL 源

CentOS 用户可以直接通过 yum install epel-release 安装

sudo yum install epel-release -y

默认安装的 epel 源为国外服务器,这里需要我们手动更换到 EPEL阿里源

生成缓存:

yum clean all
yum makecache

更新系统软件:

sudo yum update

相关文档:

检查下源列表:

yum  repolist

实际使用时,会自动使用最快的源:

➜  ~ sudo yum update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.aliyun.com
 * webtatic: us-east.repo.webtatic.com
Resolving Dependencies
Upgrade  1 Package

Total download size: 14 k

安装常用工具命令

sudo yum install -y bind-utils

安装完成后可使用的命令有:dig nslookup 等。

例如,查询 dns 使用:

nslookup baidu.com

可以用 dig 命令来自我检测下DNS解析是否配置成功,七牛云配置免费ssl证书,需要配置和验证对应域名的 TEXT 对应的解析值:

dig cdn.haobing.wang text
dig cdn.haobing.wang cname

zsh 和 oh-my-zshell

zsh

查看系统当前的shell

echo $SHELL

/bin/bash

查看 bin 下是否有 zsh 包

cat /etc/shells

如果没有则安装:

sudo yum install zsh -y

切换 shell 至 zsh,根据提示输入当前用户的密码:

chsh -s /bin/zsh  # 注意,此处不需要root权限,不需要在前面加sudo

按提示所述,shell已经更改为zsh了,现在查看一下系统当前使用的shell:

echo $SHELL

/bin/bash

可以看到现在还没切换过来,需要重启一下服务器后再登录。

sudo reboot

重新登录后,zsh 会有个提示你需要创建 ~/.zshrc 的提示。可以让 zsh 自动创建。

现在看下

echo $SHELL

/bin/zsh

至此,zsh 就安装完毕。下面安装 oh-my-zsh。

oh-my-zsh

oh-my-zsh 源码是放在github上的,所以先要安装git

sudo yum install git -y

验证 git 已安装:

git --version

git version 1.8.3.1

oh-my-zsh文档

oh-my-zsh 安装完成后,我们安装下 autojump 插件

sudo yum install autojump autojump-zsh -y

如果提示没有包,则需要 Set up EPEL on CentOS 7:

sudo yum install epel-release

查看下当前仓库列表:

sudo yum repolist

插件

oh my zsh 项目提供了完善的插件体系,相关的文件在~/.oh-my-zsh/plugins目录下,默认提供了100多种,大家可以根据自己的实际学习和工作环境采用,想了解每个插件的功能,只要打开相关目录下的 zsh 文件看一下就知道了。插件也是在 ~/.zshrc 里配置,找到plugins关键字,你就可以加载自己的插件了,系统默认加载 git ,你可以在后面追加内容。

~/.zshrc

接下来修改 ~/.zshrc 让插件生效。如果没有,则手动创建 touch ~/.zshrc:

vi ~/.zshrc
  • 开启常用插件:plugins=(git) => plugins=(git autojump)
  • 设置编码格式:# export LANG=en_US.UTF-8 => export LANG=en_US.UTF-8

引用更改并立刻生效:

source ~/.zshrc

相关文档:

nginx

确保 eple-release 已安装,否则 nginx 的版本在 1.10 左右。

确认 nginx 是否正常工作:

curl 127.0.0.1

阿里云 ECS 还需要但在设置策略组开启 80 和 443 端口。外网才能访问。

常用命令:

sudo systemctl start nginx
systemctl status nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

配置防火墙:

sudo firewall-cmd --permanent --zone=public --add-service=http 
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

sudo systemctl start firewalld
systemctl status firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld.service

创建网站目录:

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example2.com/html

sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html

sudo chmod -R 755 /var/www

参考 Debian 下的 Nginx 配置目录,来对当前配置进行改造:

sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

Note: This directory layout was introduced by Debian contributors, but we are including it here for added flexibility with managing our server blocks (as it's easier to temporarily enable and disable server blocks this way).


sudo nano /etc/nginx/nginx.conf

Add these lines to the end of the http {} block:

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

这里需要调整 SELinux, 否则 默认目录 /usr/share/nginx/html 下的文件可以正常访问,但是 /var/www/Project 内的文件永远都只会得到 403。

vagrant 开发环境可以直接修改 /etc/selinux/config,生产环境不要关闭!

# 检查权限
namei -om /path/to/check

# To check if SELinux is running
getenforce

# 临时关闭
sudo setenforce Permissive

# 查看 selinux type 是否为 httpd_sys_content_t
ls -Z /path/to/check

# 将 selinux type 设置为 httpd_sys_content_t
sudo chcon -Rt httpd_sys_content_t /path/to/check

安装 epel-release,如果之前没有安装过

sudo yum install epel-release -y
sudo yum update
sudo yum install nginx -y

nginx 简单改造出 site-enable,参见 nginx

参考资料:

php7

安装 epel-release,如果之前没有安装过

Precompiled PHP 7.x binaries are available for CentOS 7 from the Webtatic, IUS, or Remi's RPM repositories.

安装PHP7的rpm源:

sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装 PHP7

yum install php70w
php -v

安装 PHP7 扩展

sudo yum install php70w-fpm php70w-opcache php70w-mysql php70w-mbstring php70w-mcrypt php70w-xml

sudo yum install php70w-intl php70w-gd php70w-pgsql php70w-pecl-imagick php70w-bcmath php70w-pecl-mongodb php70w-pecl-memcached

查找其他扩展:

yum search php70w-

关于 PHP 的启动、停止、重启:

sudo systemctl start php-fpm
systemctl status php-fpm
sudo systemctl restart php-fpm
sudo systemctl stop php-fpm

安装完成后,重启 fpm

sudo systemctl restart php-fpm

修改配置文件 /etc/php.ini

sudo vi /etc/php.ini
  • ;cgi.fix_pathinfo=1 改为 cgi.fix_pathinfo=0
  • ;expose_php = On 改为 expose_php = Off

配置 PHP-FPM

sudo vi /etc/php-fpm.d/www.conf
  • listen = /var/run/php-fpm/php-fpm.sock
  • user = nginx
  • group = nginx
  • listen.owner = nginx
  • listen.group = nginx

注意 /etc/nginx/nginx.conf 中的 user 值,要与 php-fpm 的 www.conf 中的 usergrouplisten.ownerlisten.group 要一致,这里统一为 nginx

修改完成后重启 php-fpm:

sudo systemctl restart php-fpm

访问 info.php 验证

connect() to unix:/var/run/php-fpm/php-fpm.sock failed (13: Permission denied)

ls -ahl /var/run/php-fpm/php-fpm.sock

PHP 7.1

https://www.server-world.info/en/note?os=CentOS_7&p=php71

安装 mariaDB

查看当前系统是否安装了数据库

mysql -V

如果你之前安装了 5.5 的版本,需要先卸载:

mysqldump -u root -ppassword --all-databases > /tmp/all-database.sql
systemctl stop mysql
yum remove mariadb-server mariadb mariadb-libs

ow to Upgrade MariaDB 5.5 to MariaDB 10.1 on CentOS/RHEL 7 and Debian Systems

如果没有,则安装最新版 mariaDB,但是官方源下载太慢,我们可以使用MariaDB 镜像源,执行以下命令替换源地址:

sudo sed -i 's#yum.mariadb.org#mirrors.ustc.edu.cn/mariadb/yum#' /etc/yum.repos.d/mariadb
# 建议使用 HTTPS
sudo sed -i 's#http://mirrors.ustc.edu.cn#https://mirrors.ustc.edu.cn#g' /etc/yum.repos.d/mariadb

常用命令:

sudo systemctl start mariadb
sudo systemctl enable mariadb
systemctl status mariadb
sudo systemctl stop mariadb
sudo systemctl restart mariadb

Securing the MariaDB Server

MariaDB includes a security script to change some of the less secure default options for things like remote root logins and sample users. Use this command to run the security script:

sudo mysql_secure_installation

The script provides a detailed explanation for every step. The first prompts asks for the root password, which hasn't been set so we'll press ENTER as it recommends. Next, we'll be prompted to set that root password, which we'll do.

SELinux

获取当前 SELinux 运行状态

getenforce

可能返回结果有三种:Enforcing、Permissive 和 Disabled。Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止可疑行为,Enforcing 代表记录警告且阻止可疑行为。

目前常见发行版中,RHEL 和 Fedora 默认设置为 Enforcing,其余的如 openSUSE 等为 Permissive。

改变 SELinux 运行状态

setenforce [ Enforcing | Permissive | 1 | 0 ]

该命令可以立刻改变 SELinux 运行状态,在 EnforcingPermissive 之间切换,结果保持至关机。一个典型的用途是看看到底是不是 SELinux 导致某个服务或者程序无法运行。若是在 setenforce 0 之后服务或者程序依然无法运行,那么就可以肯定不是 SELinux 导致的。

若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件 /etc/sysconfig/selinux 实现。注意当从 Disabled 切换到 Permissive 或者 Enforcing 模式后需要重启计算机并为整个文件系统重新创建安全标签(touch /.autorelabel && reboot)。

备注

file_get_contents(): SSL operation failed with code 1. And more

sudo vim /etc/php.ini

openssl.cafile=/path/to/cert.pem

sudo systemctl restart php-fpm

error

报错提示

/usr/lib/python2.7/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.21.1) or chardet (2.2.1) doesn't match a supported version!

原因:python库中 urllib3 (1.21.1) or chardet (2.2.1) 的版本不兼容

解决方法:

sudo pip uninstall urllib3
sudo pip uninstall  chardet
sudo pip install requests