Linux运维部落 |国内最专业的Linux万达登录,万达娱乐登录 Sun, 18 Feb 2018 09:12:15 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.9.3 keepalived+varnish+haproxy+LNAMP /91596 /91596#respond Sun, 18 Feb 2018 06:48:05 +0000 /91596 Third test

 

nfs: 192.168.1.40

rp1: 192.168.1.41

rp2: 192.168.1.42

mariadb: 192.168.1.43

web1: 192.168.1.110

web2: 192.168.1.111

app1: 192.168.1.112

app2: 192.168.1.113

实验效果:用keepalived高可用反向代理服务器haproxy,将静态页面反代到varnish缓存服务器,动态页面反代到后端的app服务器,访问内容如果在缓存服务器上有缓存,就直接返回,如果没有就到后端web服务器取

NFS:192.168.1.40
  1. yum install nfs-utils rpcbind
  2. vim /etc/exports
    
    
    1
    /mnt/share      <span class="hljs-number">192.168</span><span class="hljs-number">.1</span><span class="hljs-number">.0</span>/<span class="hljs-number">24</span>(rw,async,all_squash)

    mkdir /mnt/share

    systemctl start nfs rpcbind

    showmount -e 192.168.1.40

  3. chmod o+w /mnt/share

//给目录一个写权限,因为之后要将此目录挂载到web和app服务上,以备上传图片

app1:192.168.1.41
  1. yum install -y epel-release

    yum install -y haproxy varnish keepalived

    ntpdate 192.168.1.64

haproxy配置
  1. cd /etc/haproxy
  2. vim haproxy.cfg

global

log 127.0.0.1 local2

chroot /var/lib/haproxy

pidfile /var/run/haproxy.pid

maxconn 4000

user haproxy

group haproxy

daemon

stats socket /var/lib/haproxy/stats

defaults

mode http

log global

option httplog

option dontlognull

option http-server-close

option forwardfor except 127.0.0.0/8

option redispatch

retries 3

timeout http-request 10s

timeout queue 1m

timeout connect 10s

timeout client 1m

timeout server 1m

timeout http-keep-alive 10s

timeout check 10s

maxconn 3000`

frontend myweb *:80

compression algo gzip

compression type text/html text/plain application/xml application/javascript

reqadd X-Proxy-By:\ HAProxy

default_backend websrvs

acl websrvs path_end -i .jpg .jpeg .htm .gif .png .css .js .ico

//请求报文中以此类结尾的都定义为websrvs

acl appsrvs path_end .php

use_backend appsrvs if appsrvs

//调用下面定义的dynsrvs的服务器,如果附合acl定义的

appsrvs规则

use_backend websrvs if websrvs

backend websrvs

balance roundrobin

server srv1 192.168.1.41:6081 check inter 3000ms rise 2 fall 2

server srv2 192.168.1.42:6081 check inter 3000ms rise 2 fall 2

backend appsrvs

balance source

server dynsrv1 192.168.1.112:80 check inter 3000ms rise 2 fall 2

server dynsrv2 192.168.1.113:80 check inter 3000ms rise 2 fall 2

listen stats

bind *:9099

stats enable

stats uri /myproxy?admin

stats realm “HAProxy Stats Page”

stats auth admin:admin

stats admin if TRUE

varnish配置
  1. cd /etc/varnish
  2. vim varnish.params

VARNISH_STORAGE=”file,/data/varnish/cache,1g”

//注释掉用内存缓存访问,改为用磁盘缓存

  1. vim default.vcl

vcl 4.0;

import directors;

backend websrv1 {

.host = “192.168.1.110”;

.port = “80”;

}

backend websrv2 {

.host = “192.168.1.111”;

.port = “80”;

}

backend appsrv1 {

.host = “192.168.1.112”;

.port = “80”;

}

backend appsrv2 {

.host = “192.168.1.113”;

.port = “80”;

}

sub vcl_init {

new staticsrvs = directors.round_robin();

staticsrvs.add_backend(websrv1);

staticsrvs.add_backend(websrv2);

new appsrvs = directors.hash();

appsrvs.add_backend(appsrv1,1);

appsrvs.add_backend(appsrv2,1);

}

sub vcl_recv {

if (req.url ~ “(?i).(css|js)$”) {

set req.backend_hint =appsrvs.backend(req.http.cookie);

}

if (req.url ~ “(?i).(jpg|jpeg|png|gif)$”) {

set req.backend_hint = staticsrvs.backend();

} else {

set req.backend_hint = appsrvs.backend(req.http.cookie);

}

}

sub vcl_backend_response {

if (beresp.http.cache-control !~ “s-maxage”) {

if (bereq.url ~ “(?i).(jpg|jpeg|png|gif|css|js|html|htm)$”) {

unset beresp.http.Set-Cookie;

set beresp.ttl = 3600s;

}

}

}

//定义符合条件的文件由varnish缓存3600秒

sub vcl_deliver {

if (obj.hits>0) {

set resp.http.X-Cache=”Hit via ” + server.ip;

} else {

set resp.http.X-Cache=”Miss from ” + server.ip;

}

}

keepalived配置
  1. vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id node1

vrrp_skip_check_adv_addr

vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

vrrp_mcast_group4 224.1.101.30

}

vrrp_instance VI_1 {

state MASTER

interface eno16777736

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1234

}

virtual_ipaddress {

192.168.1.50/24 dev eno16777736 label eno16777736:0

}

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

}

vrrp_instance VI_2 {

state BACKUP

priority 96

interface eno16777736

virtual_router_id 52

advert_int 1

authentication {

auth_type PASS

auth_pass 1234

}

virtual_ipaddress {

192.168.1.51/24 dev eno16777736 label eno16777736:0

}

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

}

keepalived 报警脚本

vim /etc/keepalived/notify.sh

#!/bin/bash

contact=’root@localhost’

//定义谁可以接收邮件

notify() {

local mailsubject=”$(hostname) to be $1, vip floating”

//声明本地局部变量,mailsubject是声明标题的,$(hostname)是当前主机名,意思是当前主机发生了变化,VIP流动了,$1是状态,给什么状态就显示什么状态

local mailbody=”$(date +’%F %T’): vrrp transition, $(hostname) changed to be $1″

//这是定义邮件正文的,$(date +’%F %T’)是时间,意思是在这个时刻vrrp发生了状态转移,$(hostname)当前主机变成了$1状态

echo “$mailbody” | mail -s “$mailsubject” $contact

//调用本地邮件服务器向本地用户发邮件,如果要使用互联网上的邮件服务器发邮件要用python写脚本

}

case $1 in

//$1是脚本的位置变量,看传输的是下面的哪一个什么

master)

notify master

;;

backup)

notify backup

;;

fault)

notify fault

;;

*)

echo “Usage: $(basename $0) {master|backup|fault}”

exit 1

;;

esac

chmod +x notify.sh

bash -n notify.sh

//检查语法

bash -x notify.sh master

systemctl start haproxy varnish keepalived

//启动所有服务

app2:192.168.1.42

app2服务器上所安装的软件与配置与app1上是一致的,只是将keepalived的配置做一下调整,如下

! Configuration File for keepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id node1

vrrp_skip_check_adv_addr

vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

vrrp_mcast_group4 224.1.101.30

}

vrrp_instance VI_1 {

state BACKUP

interface eno16777736

virtual_router_id 51

priority 96

advert_int 1

authentication {

auth_type PASS

auth_pass 1234

}

virtual_ipaddress {

192.168.1.50/24 dev eno16777736 label eno16777736:0

}

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

}

vrrp_instance VI_2 {

state MASTER

priority 100

interface eno16777736

virtual_router_id 52

advert_int 1

authentication {

auth_type PASS

auth_pass 1234

}

virtual_ipaddress {

192.168.1.51/24 dev eno16777736 label eno16777736:0

}

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

}

mariadb:192.168.1.43

1.yum install -y mariadb-server

2.vim /etc/my.cnf

skip_name_resolve=ON

innodb_file_per_table=ON

mysql_secure_installation

Set root password? [Y/n] y #是否设置密码

New password: #输入要设置的密码

Re-enter new password:

Remove anonymous users? [Y/n] y #是否删除匿名用户

Disallow root login remotely? [Y/n]n

#是否禁止管理员远程登录(为了试验方便,设置成不要,生成中禁止远程登录)

Remove test database and access to it? [Y/n]n

#删除测试数据库

Reload privilege tables now? [Y/n]y #重载

mysql -uroot -pcentos

create database wordpress;

grant all on wordpress.* to ‘wps’@’%’ identified by ‘centos’;

flush privileges;

mysql -uwps -pcentos

systemctl start mariadb

web1:192.168.1.110
  1. yum install -y epel-release

    yum install -y nginx nfs-utils

  2. vim /etc/nginx/conf.d/web.conf

server {

server_name 192.168.1.110;

index index.html;

root /data/apps;

}

  1. systemctl start nginx
  2. mkdir -p /data/apps
  3. 上传wordpress软件包到服务器
  4. unzip wordpress-4.3.1-zh_CN.zip
  5. cp -r wordpress /data/apps
  6. cd /data/apps
  7. ln -sv wordpress wps
  8. mkdir /data/apps/wps/wp-content/uploads
  9. mount -t nfs 192.168.1.40:/mnt/share /data/apps/wps/wp-content/uploads
  10. mkdir /data/apps/wps/html
  11. mount -t nfs 192.168.1.40:/mnt/html /data/apps/wps/html
web2:192.168.1.111
  1. yum install -y epel-release

    yum install -y nginx nfs-utils

  2. vim /etc/nginx/conf.d/web.conf

server {

server_name 192.168.1.111;

index index.html;

root /data/apps;

}

  1. systemctl start nginx
  2. mkdir -p /data/apps
  3. 上传wordpress软件包到服务器
  4. unzip wordpress-4.3.1-zh_CN.zip
  5. cp -r wordpress /data/apps
  6. cd /data/apps
  7. ln -sv wordpress wps
  8. mkdir /data/apps/wps/wp-content/uploads
  9. mount -t nfs 192.168.1.40:/mnt/share /data/apps/wps/wp-content/uploads
  10. mkdir /data/apps/wps/html
  11. mount -t nfs 192.168.1.40:/mnt/html /data/apps/wps/html
app1:192.168.1.112
  1. yum install httpd php-mysql php-mbstring nfs-utils
  2. vim /etc/httpd/conf.d/app.conf

<VirtualHost 192.168.1.112:80>

DocumentRoot “/data/apps”

DirectoryIndex index.php index.html

<Directory “/data/apps”>

Options FollowSymLinks

AllowOverride All

Require all granted

</Directory>

CustomLog “logs/wp_access.log” combined

ErrorLog “logs/wp_error.log”

</VirtualHost>

  1. mkdir -p /data/apps
  2. 上传wordpress软件包到服务器
  3. unzip wordpress-4.3.1-zh_CN.zip
  4. cp -r wordpress /data/apps
  5. cd /data/apps
  6. ln -sv wordpress wps
  7. cd wps
  8. cp wp-config-sample.php wp-config.php
  9. vim wp-config.php

/** WordPress数据库的名称 */

define(‘DB_NAME’, ‘wordpress’);

/** MySQL数据库用户名 */

define(‘DB_USER’, ‘wps’);

/** MySQL数据库密码 */

define(‘DB_PASSWORD’, ‘centos’);

/** MySQL主机 */

define(‘DB_HOST’, ‘192.168.1.43’);

  1. systemctl start httpd
  2. mkdir /data/apps/wps/wp-content/uploads
  3. mount -t nfs 192.168.1.40:/mnt/share /data/apps/wps/wp-content/uploads
  4. mkdir /data/apps/wps/html
  5. mount -t nfs 192.168.1.40:/mnt/html /data/apps/wps/html
app2:192.168.1.113
  1. yum install httpd php-mysql php-mbstring nfs-utils
  2. vim /etc/httpd/conf.d/app.conf

<VirtualHost 192.168.1.113:80>

DocumentRoot “/data/apps”

DirectoryIndex index.php index.html

<Directory “/data/apps”>

Options FollowSymLinks

AllowOverride All

Require all granted

</Directory>

CustomLog “logs/wp_access.log” combined

ErrorLog “logs/wp_error.log”

</VirtualHost>

  1. mkdir -p /data/apps
  2. 上传wordpress软件包到服务器
  3. unzip wordpress-4.3.1-zh_CN.zip
  4. cp -r wordpress /data/apps
  5. cd /data/apps
  6. ln -sv wordpress wps
  7. cd wps
  8. cp wp-config-sample.php wp-config.php
  9. vim wp-config.php

/** WordPress数据库的名称 */

define(‘DB_NAME’, ‘wordpress’);

/** MySQL数据库用户名 */

define(‘DB_USER’, ‘wps’);

/** MySQL数据库密码 */

define(‘DB_PASSWORD’, ‘centos’);

/** MySQL主机 */

define(‘DB_HOST’, ‘192.168.1.43’);

  1. systemctl start httpd
  2. mkdir /data/apps/wps/wp-content/uploads
  3. mount -t nfs 192.168.1.40:/mnt/share /data/apps/wps/wp-content/uploads
  4. mkdir /data/apps/wps/html
  5. mount -t nfs 192.168.1.40:/mnt/html /data/apps/wps/html
修改本机hosts文件

加入 www.test.com 192.168.1.50 www.test.com 192.168.1.51

测试:

访问www.test.com/wps

clipboard

将固定链接改为html形式

clipboard1

 

]]>
/91596/feed 0
vsftpd, samba, nfs, mariadb基础入门 /91556 /91556#respond Tue, 13 Feb 2018 04:33:00 +0000 /91556

1、搭建php-fpm工作方式的LAMP环境,实现wordpress正常访问

S1

一、配置mariadb-server

S2

二、配置httpd

1)配置web server

S4

2)配置将php资源反代至php-fpm

S5

三、配置php-fpm

S6

四、布署php开发的开源动态应用程序

S7

五、面临的问题整理

测试V1

S8

测试V2

S9

测试V3

S10

测试V4

S11

附上脚本:生成测试页面

https://github.com/slcnx/tools/blob/master/gen_index_phpinfo_php-mysql.sh

2、什么是DML?常用SQL举例,每个命令至少1个例子,最多不超过3个例子

T1

T2

INSERT

  • 添加YangGuo, 单行插入, 所有字段插件
 MariaDB [hidb]> INSERT INTO students VALUES ('1','YangGuo','M','899-06-04',3);
  • 添加Guo Jing, Ding Dian, 多行插入, 给定字段插入
 MariaDB [hidb]> INSERT INTO students(name,gender) VALUES ('Guo Jing','M'),('Ding Dian','M');
  • 添加与主键冲突的Ding Dang
 MariaDB [hidb]> REPLACE INTO students VALUES ('3','Ding Dang','F','1001-09-10',5);

SELECT

T4

  • 显示同学班级编号为空或不空的同学;
MariaDB [hidb]> SELECT * FROM students WHERE classid IS NULL;
  • 用户的名字以d开头的同学?
 MariaDB [hidb]> SELECT * FROM students WHERE name LIKE 'd%';

注意: VARCHAR类型不区分大小写

  • 属于1、2、3班的同学且性别不是女性?
 MariaDB [hidb]> SELECT * FROM students WHERE classid IN (1,2,3) AND NOT gender='F';
  • 男同学人数?
 MariaDB [hidb]> SELECT gender,count(*) AS nos FROM students GROUP BY gender HAVING gender='M';

DELETE

T5

  • 删除id大于2的用户
 MariaDB [hidb]> DELETE FROM students WHERE stuid>=3;
  • 删除年龄从大到小排序的前100个用户
 MariaDB [hidb]> DELETE FROM students ORDER BY age DESC LIMIT 100;

UPDATE

T6

  • 将所有classid设定为2
 MariaDB [hidb]> UPDATE students SET classid=2;
  • 将Guo Jing班级设定为3
 MariaDB [hidb]> UPDATE students SET classid=3 WHERE name='Guo Jing';
  • 修改当前root@localhost用户的密码为magedu
 MariaDB [hidb]> UPDATE mysql.user SET Password=PASSWORD('magedu') WHERE user='root' AND host='localhost';
 MariaDB [hidb]> FLUSH PRIVILEGES;

3、简述ftp的主动和被动模式,并实现基于pam认证的vsftpd

1)ftp协议

T7

2)vsftpd Server

T8

T9

附上脚本

https://github.com/slcnx/tools/blob/master/vsftpd.sh

4、简述NFS服务原理及配置

NFS服务基础概念

H1

H8

NFS相关组件

H4

NFS工作逻辑

H2

NFS服务配置

一、nfs server

H6

二、nfs client

h7

三、如何拥有写权限

1)root用户:访问nfs服务器,会被映射为nfsnobody;

H9

2)普通用户:访问nfs服务器,以id号区别;

H10

四、export和showmount命令及配置文件相关选项

export

H11

showmount

H12

/etc/exports 或 /etc/exports.d/*

H14

 

5、简述samba服务,并实现samba配置

F1

示例:创建一个共享data,路径为/var/ftp/data;要求仅centos和gentoo用户能上传;此路径对其他用户不可见;

安装samba server

F2

配置samba server

F3

Linux客户端

F4

Window客户端

F5

]]>
/91556/feed 0
which who w 命令的介绍 /91533 /91533#respond Sat, 10 Feb 2018 08:55:52 +0000 /91533 which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

1.命令格式:

which可执行文件名称

2.命令功能:

which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

3.命令参数:

-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

-p 与-n参数相同,但此处的包括了文件的路径。

-w 指定输出时栏位的宽度。

-V 显示版本信息

4.使用实例:

实例1:查找文件、显示命令路径

命令:

whichlsmod

输出:

[root@localhost~]#whichpwd

/bin/pwd

[root@localhost~]#whichadduser

/usr/sbin/adduser

 

who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。

使用权限:所有使用者都可使用。

语法

who - [husfV] [user]

参数说明

  • -h : 不要显示标题列
  • -u : 不要显示使用者的动作/工作
  • -s : 使用简短的格式来显示
  • -f : 不要显示使用者的上线位置
  • -V : 显示程序版本

 

w 命令详解功能说明:显示目前登入系统的用户信息。

语法:w [-fhlsuV][用户名称]

linux w 命令补充说明:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行linux w 命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

linux w 命令参数:

-f  开启或关闭显示用户从何处登入系统。

-h  不显示各栏位的标题信息列。

-l  使用详细格式列表,此为预设值。

-s  使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。

-u  忽略执行程序的名称,以及该程序耗费CPU时间的信息。

-V  显示版本信息。

 

 

]]>
/91533/feed 0
第十周 Apache服务 /91523 /91523#comments Fri, 09 Feb 2018 13:23:48 +0000 /91523 1、Centos7系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式

10-1

2、简述request报文请求方法和状态响应码

10-2

3、详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例

10-3

 

]]>
/91523/feed 1
linux用户管理实战 /91507 /91507#respond Thu, 08 Feb 2018 08:57:18 +0000 /91507 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登陆多次,则只显示一次即可。

[root@localhost ~]# who |cut -d ‘ ‘ -f1 |sort -u

2、取出最后登陆到当前系统的用户的相关信息。

[root@localhost ~]# who |tail -1

3、取出当前系统上被用户当做其默认shell的最多得到那个shell。

[root@localhost ~]# cut -d : -f7 /etc/passwd |uniq -c |sort -n |tail -1
13 /sbin/nologin

4、将/etc/passwd中点的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。

[root@localhost ~]# cat /etc/passwd |sort -t : -k 3 -n |tail -10 |tr ‘a-z’ ‘A-Z’ > /tmp/maxusers.txt

5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。

[root@localhost tmp]# ifconfig|grep ‘inet’|grep -v ‘127.0.0.1’|grep -v ‘inet6’|cut -f10 -d ‘ ‘
10.1.12.210

6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。

[root@localhost tmp]# ls /etc/*.conf | tr ‘a-z’ ‘A-Z’ >> /tmp/etc.conf

7、显示/var目录下一级子目录或文件的总个数。

[root@localhost tmp]# tree -L 1 /var/ |wc -l
24

8、取出/etc/group文件中第三个字段数最小的10个组的名字。

[root@localhost tmp]# cat /etc/group |sort -t : -k 3 -n | head -10 |cut -d : -f1
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem

9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。

[root@localhost tmp]# cat /etc/fstab /etc/issue >> /tmp/etc.test

10、请总结描述用户和组类管理命令的使用方法并完成以下练习:

  • 创建组distro,其GID为2016;

[root@localhost tmp]# groupadd distro -g 2016

  • 创建用户mandriva,其ID号为1005;基本组为distro;

[root@localhost tmp]# useradd mandriva -u 1005 -g distro

  • 创建用户mageia,其ID号为1100;家目录为/home/linux;

[root@localhost tmp]# useradd mageia -u 1100 -d /home/linux

  • 给用户mageia添加密码,密码为mageedu;

[root@localhost tmp]# passwd mageia
Changing password for user mageia.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

  • 删除mandriva,但保留其家目录;

[root@localhost tmp]# userdel mandriva
[root@localhost tmp]# ls /home/
linux mandriva xingqitian

  • 创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

[root@localhost tmp]# groupadd peguin && useradd slackware -u 2002 -g distro -G peguin
[root@localhost tmp]# id slackware
uid=2002(slackware) gid=2016(distro) groups=2016(distro),2017(peguin)

  • 修改slackware的默认shell为/bin/tcsh;

[root@localhost tmp]# usermod -s /bin/tcsh slackware
[root@localhost tmp]# tail -1 /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/tcsh

  • 为用户slackware新增附加组admins;

[root@localhost tmp]# groupadd admins
[root@localhost tmp]# usermod -a -G admins slackware
[root@localhost tmp]# id slackware
uid=2002(slackware) gid=2016(distro) groups=2016(distro),2017(peguin),2018(admins)

]]>
/91507/feed 0
linux进程管理 /91504 /91504#respond Thu, 08 Feb 2018 04:01:18 +0000 /91504 Linux内核:抢占式多任务

进程类型:

1、守护进程:在系统引导过程中启动的进程,与终端无关的进程;

2、前台进程:跟终端相关,通过终端启动的进程,注意:也可把前台启动的进程送往后台,以守护模式运行;

 

进程状态:

运行态:running

就绪态:ready

睡眠态:a、可中断:interruptable;b、不可终端:uninterruptable

停止态:暂停于内存中,但不会被调度,除非手动启动之:stopped

僵死态:zombie

 

进程分类:

1、CPU-Bound:CPU密集型

2、IO-Bound:IO密集型

 

Linux进程查看及管理工具:pstree、ps、pgrep、pidof、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup;

 

 

 

]]>
/91504/feed 0
日志管理 /91496 /91496#respond Thu, 08 Feb 2018 01:39:40 +0000 /91496 日志管理

日志:

历史事件:时间,地点,人物,事件

日志级别:事件的关键性程度,loglevel

系统日志服务:

Sysklogd:centos5之前版本

Klogd:linux kernel记录内核日志

时间记录格式:

日期时间 主机 进程[pid] 事件内容

C/S 架构:通过TCP或udp协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理

Rsyslog特性:centos6和7

多线程

Udp,tcp,ssl,tlc,relp

Mysql,pgsql,oracle实现日志存储

强大的过滤器,可实现过滤记录日志信息中任意部分

自定义输出格式

ELK:elasticsearch,logstash,kibana

非关系型分布式数据库

基于Apache软件基金会jakarta项目lucene

Elasticsearch是个开源分布式搜索引擎

Logstash对日志进行收集、分析,并将其存储供以后使用

Kibana 可以提供的日志分期友好的web界面

术语,参见man logger

Facility:设施,从功能或程序上对日志进行归类

Auth ,authpriv,cron,daemon,ftp,kern,lpr,mail,news,security,user,uucp,local0-7,syslog

Priority 优先级别,从低到高排序

Debug,info,notice,warn,err,crit,alert,emerg

程序包:rsyslog

主程序:/usr/sbin/rsyslogd

Centos6 :service rsyslog{start|stop|restart|status}

Centos7 :/usr/lib/systemd/system/rsyslog.service

配置文件:/etc/rsyslog.conf, /etc/rsyslog.d/*.conf

库文件:/lib/64/rsyslog/*.so

配置文件格式:由三部分组成

MODULES:相关模块配置

GLOBAL DIRECTIVES:全局配置

RULES:日志记录相关的规则配置

 

RULES配置格式:facility.priority; facility.priority… target

Facility:

*:所有的facility

Facility1,facility2,facility3,..指定的facility

Priority:

*:所有级别

None:没有级别,即不记录

PRIORITY:指定级别以上的所有级别

=PRIORITY:仅记录指定级别的日志信息

Target:

 

文件路径:通常在在/var/log/,文件路径前的-表示异步写入用户:将日志时间通知给指定的用户,*表示登录的所有用户

日志服务器:@host,把日志送往至指定的远程服务器记录

管道:|COMMAND,转发给其他命令处理

通常的日志格式:

事件产生的日期时间 主机 进程 :事件内容

如:/var/log/messages,cron,secure

配置rsyslog成为日志服务器

###MODULES####

#Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun 514

#Provides TCP syslog reception

$ModLoad imudp

$TCPServerRun 514

其它的日志文件

/var/log/secure:系统安装日志,文本格式,应周期性分析

/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看

/var/log/wrmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看

/var/log/dmesg:系统引导过程中的日志信息,文本格式

文本查看工具查看

专用命令dmesg查看

/var/log/messages:系统中大部分的信息

/var/log/anaconda:anaconda的日志

 

Systemd统一管理所有unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/erc/systemd/journald.conf

Journalctl用法

查看所有日志(默认情况下,只保存本次启动的日志)

Journalctl

查看内核日志(不显示应用日志)

Journalctl -k

查看系统本次启动的日志

Journalctl -b

Journalctl -b -0

查看上一次启动的日志(需要更改设置)

Journalctl -b -1

查看指定服务的日志

Journalctl /usr/lib/systemd/systemd

查看指定进程的日志

Journalctl _PID=1

查看某个指定用户的日志

Journalctl _UID=33 –since today

查看某个路径的脚本的日志

Journalctl /usr/bin/bash

查看某个unit的日志

Journalctl-u nginx.service

Journalctl -u nginx.service -since today

实时滚动某个unit的最新日志

Journalctl -u nginx.service -f

合并显示多个unit的日志

Journalctl -u nginx.service -u php-fpm.service –since today

查看指定优先级的日志,共有8级

0:emerg

1:alert

2:crit

3:err

4:warning

5:notice

6:info

7:debug

Journalctl -p err -b

日志默认分页输出,–no-pager改为正常的标准输出

Journalctl –no-pager

以JSON格式(单行)输出

Journalctl -b -u nginx.service -o json

以JSON格式(多行)输出,可读性更好

Journalctl -b -u nginx.serviceqq -o json -pretty

显示日志占据的硬盘空间

Journalctl –disk-usage

指定日志文件占据的最大空间

Journalctl –vacuum-size=1G

指定日志文件保存多久

Journalctl –vacuum-time=1yesrs

  • 准备MYSQL Server
  • 在mysql server上授权rsyslog能连接至当前服务器

Mysql > GRANT ALL ON Syslog.* TO ‘USER’@’HOST’

IDENTIFIED BY ‘PASSWLRD’;

  • 在rsyslog服务器上安装mysql模块相关的程序包

Yum install rsyslog-mysql

  • 为rsyslog创建数据库及表

Mysql -uUSERNAME -hHOST -pPASSWORD<

/usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql

  • 配置rsyslog将日志保存到mysql中

###MODULES####

$ModLoad ommysql

###RULES####

Facility.priority :ommysql:DBHOST,DBNAME,DBUSER,PASSWORD

 

 

 

示例:通过loganalyzer 展示数据库中的日志

  • 在rsyslog服务器上准备amp或nmp组合

Yum install httpd php php-mysql hph-gd

(2)安装loganalyer

Tar xf loganalyzer-4.1.5.tar.gz

Cp -a loganalyzer-4.1.5/src

/var/www/html/loganalyzer

Touch config.php

Chmod 666 config.php

  • 配置loganalyzer

Systemctl start httpd

http://HOST/loganalyzer

  • 安全加强

Cd /var/www/html/loganalyzer

Chmod 644 config.php

Logrotate日志存储

Logrotate程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这时过程一般通过cron程序来执行

配置文件时/etc/logrotate.conf

主要参数如下

Compress通过gzip压缩转储以后的日志

Nocompress不需要压缩时,用这个参数

Copytruncate用于还在打开中的日志文件,把当前日志备份并截断

Nocopytruncate备份日志文件但是不截断

Create mode ownergroup 转储文件,使用指定的文件模式创建新的日志文件

Nocreate 不建立新的日志文件

Delaycompress和compress一起使用时,转储的日志文件到下一次转储时才压缩

Nodelaycompress覆盖delaycompress选项,转储并压缩

Error addres 转储时的错误信息发送到指定的Email地址

Ifempty 即使是空文件也转储,是缺省项

Notifempty如果是空文件的话,不转储

Mail address 把转储的日志文件发送到指定的Email地址

Nomail转储时不发送日志文件

Olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

Noolddir 转储后的日志文件和当前日志文件放在同一个目录下

Prerotate/endscript在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行

Postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

Daily指定转储周期为每天

Weekly指定转储周期为每周

Monthly指定转储周期为每月

Size大小 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份

Missingok 如果日志不存在,提示错误

Nomissingo如果日志不存在,继续下一次日志,不提示错误

 

]]>
/91496/feed 0
计算机入门 /91490 /91490#respond Wed, 07 Feb 2018 08:29:36 +0000 /91490 Linux:是一个内核 而不是一个操作系统 它是由C语言编写而成

内核网站 www.kernel.org 内核版本号有0.99 2.2 等等

1991年最初由LinusTorvalds针对个人计算机开发

LinusTorvalds那时是芬兰的一名研究生

 

linux是由unix修改而来,所以linux内核和unix非常类似

linux版本有很多 比如 redhat Centos gentoo ubuntu debian linuxmint 等等 而最常见的unix系统 比如苹果的OS x

PC是由 CPU(运算器+控制器) 内存(内存是储存设备 与硬盘不同的是硬盘是IO设备)

还有 输入设备(比如键盘和鼠标) 输出设备(比如显示器)

能和CPU直接交互的是机器语言 就是101000101这种格式的代码

机器语言对人来说编写太困难了 所以人们做出了汇编语言 利于人们编写程序 通称为低级语言

为了更加方便编写程序 就出现了 C C++等 这两种语言虽然高级语言 但主要用于写驱动等

python 和 java是更加人性化的编程语言 很容易理解和编写

 

 

作业:

1 GPL,是General Public License的缩写,是一份GNU通用公共授权非正式的中文翻译。GPL(GNU通用公共许可证)

大多数软件许可证决意剥夺你的共享和修改软件的自由。对比之下,GNU通用公共许可证试图保证你的共享和修改自由软件的自由。–保证自由软件对所有用户是自由的。GPL适用于大多数自由软件基金会的软件,以及由使用这些软件而承担义务的作者所开发的软件。(自由软件基金会的其他一些软件受GNU库通用许可证的保护)。你也可以将它用到你的程序中。当我们谈到自由软件(free software)时,我们指的是自由而不是价格。

我们的GNU通用公共许可证决意保证你有发布自由软件的自由(如果你愿意,你可以对此项服务收取一定的费用);保证你能收到源程序或者在你需要时能得到它;保证你能修改软件或将它的一部分用于新的自由软件;而且还保证你知道你能做这些事情。

为了保护你的权利,我们需要作出规定:禁止任何人不承认你的权利,或者要求你放弃这些权利。如果你修改了自由软件或者发布了软件的副本,这些规定就转化为你的责任。

例如,如果你发布这样一个程序的副本,不管是收费的还是免费的,你必须将你具有的一切权利给予你的接受者;你必须保证他们能收到或得到源程序;并且将这些条款给他们看,使他们知道他们有这样的权利。

我们采取两项措施来保护你的权利。

(1)给软件以版权保护。

(2)给你提供许可证。它给你复制,发布和修改这些软件的法律许可。

2 BSD

BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

  • 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
  • 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
  • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销 售,因此是对商业集成很友好的协议。很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者 二次开发。

更多开源协议介绍

3Apache是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

需要给代码的用户一份Apache Licence如果你修改了代码,需要在被修改的文件中说明。在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

4 Android([‘ndrid])是一个以Linux为基础的半开源操作系统,主要用于移动设备,由Google和开放手持设备联盟开发与领导。Android系统最初由安迪·鲁宾(AndyRubin)制作,最初主要支持手机。2005年8月17日被Google收购。2007年11月5日,Google与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(OpenHandsetAlliance)来共同研发改良Android系统并生产搭载Android的智慧型手机,并逐渐拓展到平板电脑及其他领域上。随后,Google以Apache免费开源许可证的授权方式,发布了Android的源代码。

]]>
/91490/feed 0
第七周作业 /91485 /91485#respond Wed, 07 Feb 2018 03:53:18 +0000 /91485 1、简述linux操作系统启动流程

CentOS 启动流程图:

image

通电自检 power on system test(POST)–> BIOS –>

主机加电以后会将各个部件运转起来,然后通过COMS上的软件程序BIOS(Basic Input Output System)检测每个设备cpu、内存、硬盘进行故障检查并进行硬件设备初始化。

Boot Loader –>加载MBR –>

根据BIOS设定的启动顺序启动位于磁盘第一个扇区的程序Boot Laader。

加载内核 kernel –>rootfs –>switchroot –>

内核的加载是通过 Boot Loader 将读取到 kernel文件并将其解压至内存中,内存中的kernel通过在加载至内存的initrd文件模拟成的根目录来加载硬盘上所需要的核心模块、硬盘、驱动等。然后以只读的方式挂载到真实的跟文件系统。

sbin/init –>读取系统配置信息初始化系统

当根被挂在后将要会执行第一个程序init,CentOS 5采用的是SysVinit方式/etc/inittabCentOS 6采用的Upstart方式/etc/inittab,/etc/init/.confCentOS 7采用Systemd方式/usr/lib/systemd/*

2、简述grub启动引导程序配置及命令行接口详解

grub 的启动流程大体可以分为以下步骤:
  • stage1:实际在第一不执行的时候并没有真正执行程序,而只是运行grub的最小安装程序,将MDR之外的stage1_5阶段载入并执行。
  • stage1_5: 与stage2文件系统进行交互
  • stage2:通过Boot Loader加载位于配置文件来引导启动系统
grub的配置文件被存放在/boot/grub/grub.conf

image

  • default:表示默认启动菜单选项0表示选着第一个
  • timeout:启动菜单存在是时间
  • splashimage: 菜单的背景图片
  • hiddenmenu:隐藏菜单
  • title:菜单的标题
  • root (hd0,0): 选着要启动的磁盘,其中hd0代表第一个磁盘,后面的0为第一个分区。
  • kernel:需要启用的内核及内核的相关配置
  • initrd:内核所识别模拟的根目录的文件

开机在此界面上按下e键则进入选着模式,c键进入grub命令行模式

image

3、实现kickstart文件制作与光盘镜像制作

下载并安装工具:

yum install system-config-kickstart 安装并打开

图形界面打开:

system-config-kickstart

image

编辑好需要的配置信息保存为ks.cfg

创建一个新目录myiso

挂载磁盘将isolinux 的目录及子目录和ks.cfg配置文件一同拷贝至myiso内

返回父目录执行封装命令


1
 mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS" -c isolinux/boot.cat -b isolinux/isolinux.bin -o  /root/boot.iso   mybiso/

生成boot.iso 镜像

挂载磁盘 此处按ESC键 数据配置文件位置 如果需网络还可设置ip信息 或修改 myiso\isolinux\isolinux.cfg内添加到配置文件内

image

]]>
/91485/feed 0
自动化运维跟安全配置 /91481 /91481#respond Tue, 06 Feb 2018 13:21:32 +0000 /91481 安全相关工具
rpm -qf /usr/bin/ssh
openssh

semanage port -a -t ssh_port_t -p tcp #PORTNUMBER/端口9527
修改ssh的默认端口,ssh默认只能用22端口
多台主机互联免口令
1 ssh-keygen
三台主机各自生成私钥公钥
2 ssh-copy-id IP7
三台主机各自复制公钥到同一台主机
3 scp authorized_keys IP:/root/.ssh/
集合三台公钥的主机把公钥文件分别复制到各台主机

scp
-C:压缩数据流
-r:递归复制
-p:保持原文件属性信息
-q:静默模式
-p PORT: 指明remote host的监听的端口
不适合文件的部分更新

rsync
比scp更快,只复制不同/发生变化的文件
可以结合别的命令实现多台主机之间自动同步各自的文件
rsync -av /etc/sysconfig/ IP:/app
复制文件到对应IP
—————————————————————————————————
sftp
交互式文件传输工具
用法和传统的ftp工具相似
利用ssh服务实现安全的文件上传下载
使用ls cd mkdir rmdir pwd get put等命令,可用?或者help获取帮助信息
sftp [user@]host
sftp> help
!pwd 加!可执行本机命令,不加是执行tftp命令

前提实现基于key验证(ssh-genkey)(ssh-copy-id)
pssh (适用于小企业中批量管理)
pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制
pssh -H 172.18.101.19 -i getenforce 查看远程主机的selinux
setenforce 0 禁用selinux
pssh -h IP -i date
pssh -h IP -o /app/ip.log -i cat /var/log/secure
查看多台主机的日志存放在-o指定的目录下
pssh -h IP -i \rm -rf /app/*
pscp.pssh -h IP /etc/selinux/config /etc/selinux/config
复制文件
pslurp -h IP -L /app/ /var/log/secure remote_secure
抓取别的主机文件到本机
————————————————————————————————
ssh端口转发
本地转发

三个主机
在1主机 telnet服务
1主机利用ssh封装telnet连接2主机,然后连接3主机,3认为是2连接

1 3主机安装telnet服务
2 iptables -A INPUT -s 172.18.101.216 -j REJECT
3主机制定策略禁止1主机连接
iptables -vnL 查看策略
iptables -F 清除策略
3 ssh -L 9527:172.18.101.152:23 172.18.101.19 -Nf
1主机上执行ssh命令建立连接3主机的隧道,f是放到后台
4 telnet 127.0.0.1 9527
1主机通过telnet连接3主机,3主机可以看到是2主机连接
2主机充当的是ssh的服务器同时也是telnet的客户端 telnet会打开23端口
5 killall ssh
任务完成后可以杀掉建立隧道的9527端口服务 ps aux
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
远程转发
在2主机
1主机通过2主机连接3主机
/etc/postfx/mail.cf 邮件服务的配置文件
1 3主机/etc/postfx/mail.cf
init_interfaces=localhost / 修改为all
systemctl restart postfix.service 端口25
2 [root@station1 /]#telnet 127.0.0.1 9527
正文邮件
Trying 127.0.0.1…
Connected to station1.example.com (127.0.0.1).
Escape character is ‘^]’.
220 CentOS7.liu.com ESMTP Postfix
helo
501 Syntax: HELO hostname
mail from:mayun@alibaba.com
250 2.1.0 Ok
rcpt to:root
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject:hello
welcome to alibaba!
.
250 2.0.0 Ok: queued as F25862221E7
quit
221 2.0.0 Bye
Connection closed by foreign host.

2主机充当ssh的客户端1主机充当ssh的服务器
过程:数据传输到1主机sshsrv:9527服务器,在1主机打开sshsrv:22端口发送到2主机,对于sshsrv服务器
2主机是一个客户端打开的是随机端口,再次在2的主机上开一个随机端口作为telnet的客户端把数
据传输到3主机telnetsrv:23
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
动态端口转发

1 /var/www/html/index.html 可提供外部网站
在7中设置网站内容
iptables -A INPUT -s IP6 -j REJECT
设置策略拒绝6的访问
2 ssh -D 1080 IP5 -N
在6中设置5做为跳板机去连接7,实现翻墙
3 在6浏览器中设置preferences-network-connection设代理-SOCKS HOST 127.0.0.1 1080端口
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/etc/ssh/sshd_config
semanage port -a -t ssh_port_t -p tcp #PORTNUMBER/端口9527
修改ssh的默认端口,ssh默认只能用22端口

listenAddress IP
可禁止公网IP连接,只允许私网
systemctl reload sshd
重启服务reload不断网

PermitRootLogin yes 禁止root连接
ClientAliveInterval 30 企业中通常是启用的进过多长时间自动断开连接
UseDNS yes改为no可提高连接速度
GSSAPIAuthentication yes改为no可提高连接速度

banner ssh连接提示语
/etc/ssh/banner.txt
welcome to mage
在banner一行写入文件路径

Allowusers user ssh允许指定用户连接
Denyusers user ssh禁止指定用户连接
tail /var/log/secure -f 查看安全日志

grep -f file1 file2 比较两个文件的相同之处
diff file1 file2 比较两个文件的不同之处

测试当前安全日志中记录失败连接数大于5个,加入策略禁止连接
#!/bin/bash

> /app/ip.txt

while true;do
awk ‘/Failed password/{ ip[$(NF-3)]++ }END{ for( i in ip){if(ip[i]>5){print i}}}’ /var/log/secure > /app/secu
re.log
while read line ;do
grep -q $line /app/ip.txt || { iptables -A INPUT -s $line -j REJECT ; echo $line >> /app/ip.txt; }
done < /app/secure.log
sleep 1m
done
完!
__________________________________________________________
Dropbear SSH

—————————————————————————————
AIDE
高级的入侵检测工具

—————————————————————————————
sudo
更改身份
su :su -l username -c ‘command’
sudo
/etc/sudoers
通过sudo授权
不建议修改文件,有专门配置文件
/etc/sudoers.d
wang ALL=(root) /usr/bin/mount,…
sudo mount /dev/sr0 /mnt/cdrom

%(表示组)
sudo -u wang vim /etc/…
代表王执行命令
visudo -f wang
wang ALL/IP=(root) sudoedit
授权wang做任何事
wang ALL=(root) /usr/bin/cat /var/log/secure*
sudo cat /var/log/secure /etc/shadow
安全漏洞(*)
解决:wang ALL=(root) /usr/bin/cat /var/log/secure*,!/bin/cat /var//log/secure* *
sudo -V 查看详细信息

man hosts_access 查看帮助说明
/etc/hosts.allow ssh服务允许远程连接
sshd:IP
/etc/hosts.deny ssh服务禁止连接
sshd,telnetd@IP:ALL
sshd:IP. EXCEPT(除了) IP
IP:allow 允许
sshd:172.18.101. :spawn echo `date +”%%F %%T”` client\:%c login on server\:%s > /app/tcpwrapper.log
in.relnetd,sshd:192.168.27. :twist(替换)/bin/echo “deny access Server sshd 403”

/app/hosts.deny
sshd:IP
tcpdmatch -d sshd IP
测试连接IP成功失败
cp /app/hosts.deny /etc/hosts.deny

]]>
/91481/feed 0
友情链接:万达娱乐直属QQ  华宇招商  万达主管  万达娱乐招商  万达直属QQ  万达娱乐主管  万达开户  万达娱乐招商  万达注册  万达娱乐平台