公钥批量发送
#!/bin/bash
#免交互分发公钥
for ip in 7 8 31 41 51
do
sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no "root@172.16.1.$ip"
done
rsync服务端
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = yes
auth users = rsync_backup
secrets file = /etc/rsyncd.passwd
log file = /var/log/rsyncd.log
######################################
[data]
path = /data
跳板机
配置在环境变量 /etc/bashrc
#!/bin/bash
#jumpserver
lb01=10.0.0.5
lb02=10.0.0.6
web01=10.0.0.7
web02=10.0.0.8
web03=10.0.0.9
nfs=10.0.0.31
backup=10.0.0.41
db01=10.0.0.51
m01=10.0.0.61
zabbix=10.0.0.71
menu(){
cat <<-EOF
+-------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs |
| 7) backup |
| 8) db01 |
| 9) m01 |
| 10) zabbix |
| h) help |
+-------------------------+
EOF
}
#菜单函数
menu
#连接函数
connect(){
ping -c 1 -w 1 $1 &>/dev/null
if [ $? -eq 0 ];then
ssh root@$1
else
echo -e "\033[5;4;40;31m 别连了,我的哥,$2:$1机器都没开!!!\033[0m"
fi
}
#控制不让输入ctrl+c,z
trap "" HUP INT TSTP
while true
do
read -p "请输入要连接的主机编号:" num
case $num in
1|lb01)
connect $lb01 lb01
;;
2|lb02)
connect $lb02 lb02
;;
3|web01)
connect $web01 web01
;;
4|web02)
connect $web02 web02
;;
5|web03)
connect $web03 web03
;;
6|nfs)
connect $nfs nfs
;;
7|backup)
connect $backup backup
;;
8|db01)
connect $db01 db01
;;
9|m01)
connect $m01 m01
;;
10|zabbix)
connect $zabbix zabbix
;;
h|help)
clear
menu
;;
close)
break
;;
esac
done
数据库远程授权
grant all on wordpress.* to wp@'172.16.1.%' identified by '123456';##设置远程链接用户和权限
关联php
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
全栈https
upstream upstream {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 443 ssl;
server_name blog.linux.com zh.linux.com;
ssl_certificate /etc/nginx/ssl_key/server.crt;
ssl_certificate_key /etc/nginx/ssl_key/server.key;
location / {
proxy_pass http://upstream;
include proxy_params;
}
}
server {
listen 80;
server_name blog.linux.com;
return 302 https://$server_name$request_uri;
}
server {
listen 80;
server_name zh.linux.com;
return 302 https://$server_name$request_uri;
}
nginx官方源
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
防火墙富规则例子
允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问10050端口
[root@web01 services]# firewall-cmd --add-rich-rule="rule family=ipv4 source address=10.0.0.1 service name=http accept"
默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
[root@m01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop'
nginx 通用优化
[root@nginx ~]# cat nginx.conf
user www; #nginx进程启动用户
worker_processes auto; #启动的worker数量与cpu核心数一致即可
worker_cpu_affinity auto; #cpu亲和
error_log /var/log/nginx/error.log warn; #错误日志
pid /run/nginx.pid;
worker_rlimit_nofile 35535; #每个work能打开的文件描述符,调整至1w以上,负荷较高建议2-3w
events {
use epoll; #使用epoll高效网络模型
worker_connections 10240; #限制每个进程能处理多少个连接,10240x[cpu核心]
}
http {
include mime.types; #nginx文件类型
default_type application/octet-stream; #文件类型里面没有的,默认下载
charset utf-8; #统一使用utf-8字符集
#定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#定义json日志格式
log_format json_access '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"status":"$status"}';
access_log /var/log/nginx/access.log json_access; #访问日志
server_tokens off; #禁止浏览器显示nginx版本号
client_max_body_size 200m; #文件上传大小限制调整
#文件高效传输,静态资源服务器建议打开
sendfile on;
tcp_nopush on;
#文件实时传输,动态资源服务建议打开,需要打开keepalive
tcp_nodelay on;
keepalive_timeout 65;
#Gzip 压缩
gzip on;
gzip_disable "MSIE [1-6]\."; #针对IE浏览器不进行压缩
gzip_http_version 1.1;
gzip_comp_level 5; #压缩级别
gzip_buffers 16 8k; #压缩的缓冲区
gzip_min_length 1024; #文件大于1024字节才进行压缩,默认值20
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg;
#虚拟主机
include /etc/nginx/conf.d/*.conf;
}
php.ini优化
expose_php = Off
display_error = Off
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_error.log
date.timezone = Asia/Shanghai
file_uploads = On
upload_max_filesize = 300M
post_max_size = 300M
max_file_uploads = 20
memory_limit = 128M
[Session]
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379"
;php禁止危险函数执行(取决于实际情况,需要和开发沟通)
disable_functions = chown,chmod,pfsockopen,phpinfo
php-pm进程管理配置文件/etc/php-fpm.d/www.conf
;第一部分,fpm配置
include=/etc/php-fpm.d/*.conf
;第二部分,全局配置(php-fpm.conf)
[global]
pid = /var/log/php-fpm/php-fpm.pid #pid文件存放的位置
error_log = /var/log/php-fpm/php-fpm.log #错误日志存放的位置
log_level = error #日志级别, alert, error, warning, notice, debug
rlimit_files = 65535 #php-fpm进程能打开的文件数
events.mechanism = epoll #使用epoll事件模型处理请求
;第三部分,进程池定义
[www] #池名称
user = www #进程运行的用户
group = www #进程运行的组
;listen = /dev/shm/php-fpm.sock #监听在本地socket文件
listen = 127.0.0.1:9000 #监听在本地tcp的9000端口
;listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP,any不限制
pm = dynamic #动态调节php-fpm的进程数
pm.max_children = 512 #最大启动的php-fpm进程数
pm.start_servers = 32 #初始启动的php-fpm进程数
pm.min_spare_servers = 32 #最少的空闲php-fpm进程数
pm.max_spare_servers = 64 #最大的空闲php-fpm进程数
pm.max_requests = 1500 #每一个进程能响应的请求数
pm.process_idle_timeout = 15s; #超时没有请求就释放进程
pm.status_path = /phpfpm_status #开启php的状态页面
;第四部分,日志相关
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/phpfpm_error.log
php_admin_flag[log_errors] = on
;慢日志
request_slowlog_timeout = 5s #php脚本执行超过5s的文件
slowlog = /var/log/php_slow.log #记录至该文件中
;慢日志示例
[21-Nov-2013 14:30:38] [pool www] pid 11877
script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
配置keepalived
[root@lb01 ~]
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 3
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 3
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
常用ansible内置变量
#查看所有详细信息
[root@m01 ~]# ansible web01 -m setup
#获取IP地址
[root@m01 ~]# ansible web01 -m setup -a "filter=ansible_default_ipv4"
#获取主机名
[root@m01 ~]# ansible web01 -m setup -a "filter=ansible_fqdn"
#获取内存信息
[root@m01 ~]# ansible web01 -m setup -a "filter=ansible_memory_mb"
#获取磁盘信息
[root@m01 ~]# ansible web01 -m setup -a "filter=ansible_devices"
#其他参数
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。
禁止root用户登陆
[root@zls ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config
[root@zls ~]# systemctl restart sshd
rwx对目录的影响
目录只有r权限: 具有浏览目录及子目录权限
不能进入目录
1.能使用ls命令浏览目录及子目录, 同时会提示权限拒绝
2.能使用ls -l命令浏览目录及子目录, 会带问号,同时只能看到文件名
总结: 目录只有r权限,仅仅只能浏览内的文件名,无其他操作权限
写入权限(w)
单纯的w权限没有任何意义。
如果目录只有w权限: 具有增加、删除或修改目录内文件名权限(需要x配合)
//注意: 如果目录有w权限, 可以在目录内创建文件, 删除文件(跟文件本身权限无关)
不能进入目录、不能复制目录、不能删除目录、不能移动目录
执行权限(x)
目录只有x权限
1.只能进入目录
2.其他什么都做不了