Redhat Linux初体验(3)
这三周都被拐卖到成都培训RHCE,讲真,还是当学生好啊哈哈哈把学习笔记搬上来,关键时刻能做个速查~
献上第三周的笔记。
2018-07-30
防火墙
- 通常使用Firewall Configuration图形界面进行配置更方便;
- Ports、Sources等普通规则(单规则)添加时应注意,这些规则的生效是取并集;Rich Rules(富语言规则)用来配置复杂规则,常用语配置交集过滤;
- iptables等旧命令使用直接语言规则,在Redhat 7中已经不提倡使用,具体参考
man 1 firewall-cmd
和man 5 firewalld.direct
;
- Redhat 7推荐使用富语言规则,参考
man 5 firewalld.richlanguage
- 查看服务
firewall-cmd --get-services
- 查看区域已经添加或生效的策略
firewall-cmd --list-all
- 查看富语言规则
firewall-cmd --list-rich-rules
- 查看服务
- 实验:仅允许desktop4访问server4的web服务,要求日志具有前缀
NEW HTTP
,日志限速每秒3条:- 安装httpd服务:
yum -y install httpd
; - 添加内容:
echo '<h1>hello world</h1>' > index.html
; - 启动服务:
systemctl start httpd.service && systemctl enable httpd.service
;查看服务netstat -tnlp
- 图形化界面添加:
Family: ipv4
、Element: service: http
、Action
、Source: 172.25.4.10/32
、Log: Prifix: NEW HTTP; With limit: 3/second
- 查看日志在系统挑日志:
tail /var/log/message
; - 查看已生效策略:
firewall-cmd --list-all
- 使用命令行重新实验,重载配置:
firewall-cmd --reload
; - 参考
man 5 firewalld.direct
:1
2
3
4# 运行时生效
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="172.25.4.10/32" service name="http" log prefix="NEW HTTP" limit value="3/s" accept'
# 永久生效
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="172.25.4.10/32" service name="http" log prefix="NEW HTTP" limit value="3/s" accept' --permanent
- 安装httpd服务:
- 伪装功能
Masquerading
用来改“发件人”信息(通常用于保护内部网络结构),端口转发Port Forwarding
用来改“收件人”信息;- 伪装,发送包时,内网使用
10.0.0.1-3...
,伪装为1.2.3.4:10001-3
转发去外网;接受包时将1.2.3.4:10001-3
转换为内网IP10.0.0.1-3
;(NAT转换) - 富语言规则可以指定网段进行伪装,但规则伪装只能对所有包进行伪装,无法指定网段;
- 端口转发,服务器使用私有IP,外部请求为
1.2.3.4:80
,防火墙转发为10.0.0.1:8080
,通常用于保护内网服务安全; - 伪装不需要配置伪装前后的规则,防火墙自动转换;而端口转发需要配置转发前后的规则;
- 伪装,发送包时,内网使用
- 实验:服务器server4(172.25.4.11)是一个在防火墙desktop4(172.25.4.10)后面的运行web服务(8080/TCP)的服务器,配置过程如下:
- 重置虚拟机:
rht-vmctl reset all
- server4安装httpd:
yum install -y httpd
;配置vim /etc/httpd/conf/httpd.conf
监听8080
; - 启动服务:
systemctl start httpd.service && systemctl enable httpd.service
;查看服务netstat -tnlp
,8080
启动; - 为server4添加允许来自desktop4的流量:
1
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="172.25.4.10/32" port port="8080" portocol="tcp" accept'
- 为desktop4添加端口转发并开启伪装:
1
2
3
4# 开启伪装
firewall-cmd --add-masquerade
# 开启端口转发
firewall-cmd --add-rich-rule 'rule family="ipv4" forward-port port="80" protocol="tcp" to-port="8080" to-addr="172.25.0.11"' - 从物理机访问防火墙desktop4的80端口,会转发至server4的8080端口;
- 注意:从desktop4直接访问desktop4的80端口是不可以的,牵扯到用户态到内核态的数据转换,只能通过外部(如物理机)访问desktop4进行测试,详情Google “iptables四表五链”;
- 重置虚拟机:
SELinux端口控制
- SELinux检查进程和端口的标签间的权限:
- 查看进程标签:
ps Z 1757
,即SELinux标签的源; - 查看80端口的标签:
semanage port -l | egrep"\b80\b"
,即SELinux标签的目的; - 查看规则:
sesearch -A -s httpd_t -t http_port_t
- 查看进程标签:
- 配置SELinux端口权限:
- 修改端口为8800:
vim /etc/httpd/conf/httpd.conf
- 重启
systemctl restart httpd
报错,具体情况查看systemctl status -l httpd
; - 为8800新增http访问的标签:
semanage port -a -t http_port_t -p tcp 8800
; - 删除原来的标签:
semanage port -d -p tcp 8080
- 修改原来的标签:
semanage port -m -t ftp_port_t -p tcp 8800
- 注意:SELinux的默认标签是无法删除的,而对默认标签的修改也仅是新增一条相应的标签策略;
- 修改端口为8800:
DNS管理
- 静态授权DNS位于
/etc/hosts
;
- DNS缓存
- DNS服务器位于
/etc/resolv.conf
- 解析过程为:先找DNS静态授权数据,再找本地缓存,最后远程DNS缓存服务器(查找条件转发器forward,最后查找rootDNS服务器);
- 查找DNS:
- 显示简要信息:
nslookup www.example.com
; - 显示详细的查询过程过程(IPv4):
host -vt A desktop4.example.com
- 显示详细的查询过程过程(IPv6):
host -vt AAAA desktop4.example.com
- 主DNS服务器可以修改数据;辅助DNS服务器不能直接修改,只能同步主DNS服务器,主/辅DNS是授权DNS,有负责的区域,即与跟域呈树形结构;缓存服务器缓存的是任意值,即二维表型结构;
- 别名是由主机名指向主机名的记录,A、AAAA与别名都是存在正向DNS记录中;
- 显示简要信息:
- 搭建缓存名称服务:
- 安装unbound:
yum install -y unbound
; - 修改配置文件:
vim /etc/unbound/
;1
2
3
4
5
6interface: 172.25.4.11
access-control: 172.25.4.0/24 allow
domian-insecure: "example.com"
forward-zone:
name: "example.com"
forward-addr: 172.25.254.254 - 启动服务:
systemctl start unbound
;查看服务启动情况:netstat -tnlp
; - 允许防火墙通过:
firewall-cmd --add-service=dns
; - 检查配置文件语法错误:
unbound-checkconf
; - 从desktop4上测试
dig @server4.example.com A server6.example.com
; - 导出配置:
unbound-control dump_cache > dump.out
; - 导入配置:
unbound-control load_cache < dump.out
; - 清除缓存:
unbound-control flush server4.example.com
; - 清楚域信息:
unbound-control flush_zone example.com
;
- 安装unbound:
邮件服务
- 邮件是所有Linux自带的服务,因为
crond
等服务都是依赖邮件服务的;
- 发送邮件:
mail -s 'hello student'
- 空客户端:禁用本地邮件投递能力,将邮箱投递全部转发到指定服务器中;
- 配置postfix邮件服务器:
/etc/postfix/mail.cf
,可以使用postconf
工具,也可以直接编辑;- 在desktop4上:重置服务器,
lab smtp-nullclient setup
- 修改邮件服务器配置:
vim /etc/postfix/main.cf
1
2
3
4
5
6
7myorigin = desktop4.example.com
inet_interfaces = loopback-only
# [空]
mydestination =
mynetworks = 127.0.0.0/8 [::1]/128
relayhost = smtp4.example.com
local_transport = error:"local delivery disabled" - 日志排错在
/var/log/maillog
,如果遇到服务报错或邮件未收到,可以使用日志排错; - 在server4上发送邮件测试:
1
2
3
4
5mail -s 'remote student' student@desktop4.example.com
# 正文
hello remote
# ^D提交
EOT
- 在desktop4上:重置服务器,
2018-7-31
存储
- DAS(direct attach storage)
- NAS(network attach storage):
- unix-like nfs;
- Windows smb(cifs)
- SAN(storage area network): SCSI
- 概念:
- node: iSCSI initiator或iSCSI target都是node;
- IQN(iSCSI Qualified Name):全球唯一,类似链路层的MAC地址,以及网络层的IP地址;
- target:一个带有IQN地址的提供存储资源的设备;
- initiator:一个带有IQN地址的获取存储资源的设备;
- portal:入口,由IP地址和端口组成,用于建立连接;
- TPG(Target Portal Group):一组入口,用于指定iSCSI目标监听;
- ACL(Access Control List):用于限制initiator访问的IQN资源;
- discovery:基于入口或入口组的资源发现;
- login:initiator验证登录;
- 实验:
- desktop4上安装initiator
yum install -y iscsi-initiator-utils.i686
; - server4上安装target
yum install -y targetcli.noarch
;
- desktop4上安装initiator
- 在server4上:
- 查看硬盘:
lsblk
,划分分区:fdisk /dev/vdb
; - 创建pv:
pvcreate /dev/vdb1
; - 创建vg:
vgcreate ISCSI_vg /dev/vdb1
; - 创建lv:
lvcreate -l 511 -n disk1_lv ISCSI_vg
,把disk1_lv当做存储做实验; - 进入
targetcli
交互模式:1
2
3
4
5
6
7
8
9
10
11
12
13
14# 创建block1:
/backstores/block create block1 /dev/ISCSI_vg/disk1_lv
# 创建IQN:
/iscsi create iqn.2018-07.com.example:server4
# 创建ACL指定desktop4:
/iscsi/iqn.2018-07.com.example:server4/tpg1/acls create iqn.2018-07.com.example:desktop4
# 切换到/iscsi/iqn.2018-07.com.example:server4/tpg1>方便一些,创建LUN
luns/ create /backstores/block/block1
# 创建监听端口,使用默认端口3260:
portals/ create 172.25.4.11
# 查看所有配置
ls
# 退出自动保存(格式为json,在/etc/target/saveconfig.json)
exit - 添加防火墙策略:
firewall-cmd --add-port=3260/tcp
;
- 查看硬盘:
- 在desktop4上:
- 修改IQN:
vim /etc/iscsi/initiatorname.iscsi
中的IQN为server4 ACL允许的名称iqn.2018-07.com.example:desktop4
; - 发现target:
iscsiadm --mode discoverydb --type sendtargets --portal 172.25.4.11:3260 --discover
,发现后系统自动将目标记录在/var/lib/iscsi/nodes/
中; - 登录:
iscsiadm --mode node -targetname iqn.2018-07.com.example:server4 --portal 172.25.4.11:3260 --login
- 查看设备:
lsblk
- 登出:
iscsiadm --mode node -targetname iqn.2018-07.com.example:server4 --portal 172.25.4.11:3260 --logout
- 详情参考
man 8 iscsiadm
- 修改IQN:
nfs共享
- 在server4上:
- 查看包是否按照
rpm -q nfs-util
;创建/nfsshare
目录; - 配置共享
vim /etc/exports
:/nfsshare desktop4.example.com(rw)
; - 启用服务
systemctl status nfs-server && systemctl enable nfs-server && systemctl start nfs-server
; - 修改共享配置后重载
exportfs -r
; - 添加nfs防火墙策略
firewall-cmd --add-service=nfs --permanent && firewall-cmd --add-service=nfs
; - 添加rpc-bind防火墙策略(远端查看
showmount
需要)firewall-cmd --add-service=rpc-bind --permanent && firewall-cmd --add-service=rpc-bind
; - 添加mountd防火墙策略(远端查看
showmount
需要)firewall-cmd --add-service=mountd --permanent && firewall-cmd --add-service=mountd
; - 端口信息可以从
grep 2049 /etc/services
中看到; - 查看共享目录
showmount -e server4
- 查看包是否按照
- 在desktop4上:
- 新建挂载点
mkdir /mnt/nfsshare
; - 挂载
mount server4:/nfsshare /mnt/nfsshare
; - 永久挂载
echo 'server4:/nfsshare /mnt/nfsshare nfs defaults,_netdev 0 0' >> /etc/fstab && mount -a
;
- 新建挂载点
- 共享权限问题:
- 若共享不可写,则检查model模型及SELinux;共享时虽然由root发起nfs-server进程,但是实际服务用户是一个名为
id nfsnobody
的内置账号,因此需要在server4上授权chmod o+w /nfsshare
; - 在desktop4上强制修改SELinux标签:
mount -o context="system_u:object_r:public_content_rw_t:s0" server4:/nfs /media
; - 服务端的配置在
/etc/sysconfig/nfs
配置RPCNFSDARGS="-V 4.2"
,desktop4挂载时使用mount -o v4.2 server4:/nfs /media
,可以使客户端与服务端文件的SELinux一致; - 关于各软件的SELinux目录权限标签可以参考“软件名_selinux(8)”,如
man 8 nfsd\_selinux
;公共目录读写通常使用public_content_rw_t
;
- 若共享不可写,则检查model模型及SELinux;共享时虽然由root发起nfs-server进程,但是实际服务用户是一个名为
- 实验:
- 安装环境:
lab nfskrb5 setup
- 在server4上,下载krb凭证
wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/server4.keytab
- 新建文件夹
/securenfs
; - 设置共享
/etc/exports
写入/securenfs desktop4.exmaple.com(rw,sec=krb5p)
; - 修改nfs版本配置
/etc/sysconfig/nfs
该为RPCNFSDARGS="-V 4.2"
; - 防火墙添加服务:
1
2firewall-cmd --add-service=nfs
firewall-cmd --add-service=nfs --permanent - 启动nfs服务:
1
2
3
4
5
6systemctl enable nfs-server
systemctl enable nfs-secure-server
systemctl start nfs-server
systemctl start nfs-secure-server
systemctl status nfs-server
systemctl status nfs-secure-server
- 在desktop4上,下载krb凭证
wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/desktop4.keytab
- 新建挂载点
mkdir /mnt/sercureshare
- 启动服务
1
2
3systemctl enable nfs-secure
systemctl start nfs-secure
systemctl status nfs-secure - 挂载
mount -o sec=krb5p,v4.2 server4:/securenfs /mnt/secureshare
- 配置永久挂载:
server4:/securenfs /mnt/secureshare nfs4 defaults,_netdev,sec=krb5p,v4.2 0 0
- 另外,如果挂载时遇到访问被拒绝的问题,可以使用
klist /etc/krb5.keytab
查看证书问题; - 挂载选项中的
_netdev
选项参见man 8 mount
,即网络设备启动过后再执行挂载;
- 安装环境:
2018-08-01
nfs共享权限
- 使用krb认证后,若切换到认证用户身份(如ldapuser1),则权限已经从nfsnobody用户变为认证用户了(即ldapuser1);共享的权限检查顺序为:
- 共享权限
vim /etc/exports
; - model权限
ll -d /securenfs
,包括ACL权限; - SELinux权限
ll -dZ /securenfs
;
- 共享权限
- 权限试验:
- 在server4上创建文件:
echo 'hello world' > /securenfs/testfile.txt
- 修改SELinux标签:
chron -t public_content_t /securenfs/testfile.txt
- 修改文件属主为ldap用户:
chown ldapuser0:ldapuser0 /securenfs/testfile.txt
- 修改model权限:
chmod 644 /securenfs/testfile.txt
- 在desktop4上查看共享权限:
ls -Z /mnt/shcureshare/
- 通过认证切换用户为ldapuser4:
ssh ldapuser4@localhost
- 尝试写入失败:
echo 'i can't wirte' >> /mnt/seucreshare/testfile.txt
,文件对ldapuser4只读; - 通过认证切换用户为ldapuser0:
ssh ldapuser4@localhost
;注意:不可以通过su - ldapuser0
,因为这样不会通过krb进行认证; - 此时可以写入:
echo 'i can't wirte' >> /mnt/seucreshare/testfile.txt
;
- 在server4上创建文件:
- nfs与smb的路径对比:
- nfs:
hostname:/pathname
- cifs(smb):
//hostname/sharename
,其中的sharename在/etc/samba/smb.conf
中配置;
- nfs:
smb共享
- smb(server message block)是一个标准的文件共享协议,用户Windows系统;smb文件服务器可以配置为工作组模式或域模式;
- 工作组绝对平等,每台电脑管理自己的本地用户及密码,不适于大规模管理;
- 域成员服从域控制器,用户通过域控制器认证;
- 创建smb共享:
- 在server4上安装及查看
yum install -y samba
,rpm -ql samba
; - smb安装完成后提供两个服务:nmb提供netbios服务,解析共享时的域名解析;smb即共享服务;
- 配置
vim /etc/samba/smb.conf
,参考man 4 samba
:1
2
3
4
5
6
7workgroup = WORKGROUP
hosts allow =
[yinhe]
path = /smbshare/
# 用户,@组
write list = smbuser4,@smb
valid users = smbuser4 - 使用
testparm
检查配置文件语法错误; - 启动服务
1
2
3
4systemctl enable smb nmb
systemctl start smb nmb
# 检查服务:139、445端口已经启动
netstat -tnlp - 配置防火墙:
1
2firewall-cmd --add-service=samba
firewall-cmd --add-service=samba --permanent
- 在desktop4上新建非交互用户,为smbuser4指定非交互shell:
useradd -s /sbin/nologin smbuser4
- 设置smb格式密码:
1
2
3
4
5
6
7
8# 搜索提供该命令的包
yum provides smbpasswd
# 安装该包
yum install -y samba-client
# 为用户设置密码
smbpasswd -a smbuser4
# 查看该用户
pdbedit -L - 尝试挂载:
mount //server4/yinhe /media
报错,查看日志tail /var/log/message
,发现需要cifs文件系统; - 安装cifs文件系统支持
yum install -y cifs-utils
- 指定用户挂载:
mount -o username=smbuser4,password=redhat //server4/yinhe /media/
- 尝试访问被拒绝,在server4中添加SELinux读权限:
1
2
3
4
5
6# 查看SELinux标签
ll -dZ /smbshare
# 添加读标签,测试后可以访问,注意,chcon只用于临时调试,要永久修改策略应使用semanage
chcon -t public_content_t /smbshare/
# 该为写标签
chcon -t public_content_rw_t /smbshare/ - 为共享用户smbuser4添加ACL:
1
2
3
4# 查看ACL
getfacl /smbshare
# 为smbuser4设置读写ACL
setfacl -m smbuser4:rwx /smbshare/ - 尝试写发现写被拒绝,修改SELinux策略:
1
2
3
4
5
6# 检查smb权限
getsebool -a | grep smb
# 设置写权限
setsebool smbd_anon_write on
# 永久生效
setsebool -P smbd_anon_write on
- 在server4上安装及查看
- 多用户挂载
- 切换student写被拒绝,添加model权限:
chmod o+w /smbshare/
,我们发现student创建的属主文件也是smbuser4(即文件属于挂载用户); - 在server4上初始化实验环境
lab smbmultiuser setup
; - 可以看到实验创建了
/smbshare
协作目录drwxrwsr-x.
,并新增了两个账号brain:1001:1001(marketing)
和rob:1002:1002
- 在desktop4上初始化实验环境
lab smbmultiuser setup
; - 安装cifs:
yum install -y cifs-utils
; - 创建认证文件
vim /root/multiuser
:1
2username=brain
password=redhat - 配置永久挂载
vim /etc/fstab
:1
//server4/smbshare /mnt/multiuser cifs defaults,_netdev,multiuser,credentials=/root/multiuser 0 0
- 测试切换brian
su - brian
:1
2
3
4
5
6# 创建文件被拒绝
touch /mnt/multiuser/testfile
# 用户名密码认证
cifscreds add server4
# 具有读写权限
touch test - 测试切换rob
su - rob
:1
2
3
4
5
6# 创建文件被拒绝
touch /mnt/multiuser/testfile
# 用户名密码认证
cifscreds add server4
# 具有只读权限
touch test
- 切换student写被拒绝,添加model权限:
2018-08-02
数据库
- 安装MariaDB:
- 在server4上安装服务端,以组安装比较方便:
yum groups install MariaDB\ Database\ Server
- 使用
yum history list
查看安装历史,使用yum history info 2
查看组中安装的包详情 - 使用
rpm -ql mariadb-server | grep .service
查看安装的服务; - 启动服务:
1
2
3
4systemctl enable mariadb.service
systemctl start mariadb.service
# 确认默认端口3306
netstat -tnlp - 添加防火墙:
1
2firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
- 在desktop4上安装服务端,以组安装比较方便:
yum groups install MariaDB\ Database\ Client
- 运行
yum history list
查看安装历史,运行yum history info 2
查看组中安装的包详情
- 在server4上安装服务端,以组安装比较方便:
- 登录数据库
- 本地匿名登录,使用mysql客户端:
mysql
:1
2
3
4
5SHOW DATABASES;
USE mysql;
SHOW TABLES;
DESC user;
SELECT user, host, password FROM user; - 运行安全脚本禁用匿名用户、远程登录等功能:
mysql_secure_installation
- 使用密码本地登录:
mysql -u root -predhat -h localhost
,注意-p
选项后接密码无空格;1
2USE mysql;
SELECT user, host, password FROM user;
- 本地匿名登录,使用mysql客户端:
- 配置:
vim /etc/my.cnf
1
2
3
4
5
6
7# 默认配置指向套接字文件,供同一个电脑的进程间通信使用:
socket=/var/lib/mysql/mysql.sock
# bind-address,在所以配置文件中只允许一次,监听本地IP 172.25.0.11:
bind-address=172.25.0.11
# 禁用网络,仅使用本地套接字文件(以localhost连接会被自动转为本地套接字,而以server4连接则会被禁用):
skip-network=1
# 修改配置使能够远程访问,需要指向- 子配置位于
ll /etc/my.cnf.d
; - 日志、数据文件、套接字等位于
ll /var/lib/mysql
;
- SQL:
- DDL数据定义语言:
create, show, drop, alter
等,对象为容器(如表、视图); - DML数据管理语言:
insert, delete, select, update
等,对象为数据记录;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21-- DDL与DML:
SHOW HELP;
-- %通配多位
SHOW TABLES FROM mysql LIKE '%zone%';
-- _通配一位
SHOW TABLES FROM mysql LIKE '_i%';
-- 创建库
CREATE DATABASE inventory;
USE inventory;
-- 创建表
CREATE TABLE regions (
region_id int(8),
region_name varchar(20),
country_name varchar(20)
);
-- 查看表结构
DESC regions;
-- 插入记录
INSERT INTO regions values (1, 'Asia', 'China');
INSERT INTO regions(region_id, country_name) value ('Asia', 'Japan');
UPDATE regions SET country_name='CN' WHERE region_id=1; - DCL数据控制语言:
grant, revoke
等;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16-- 新建用户
CREATE USER 'yinhe'@'desktop4.example.com' identified by 'redhat';
-- 若使用主机名登录有问题,可以尝试使用IP地址登录
CREATE USER 'yinhe'@'172.25.4.10' identified by 'redhat';
-- 授予权限
GRANT SELECT, UPDATE, DELETE, INSERT ON inventory.regions TO 'yinhe'@'desktop4.example.com';
-- 刷新内存,赋权后建议刷新
flush privileges;
-- 回收权限
REVOKE UPDATE, INSERT, DELETE ON inventory.regions FROM 'yinhe'@'desktop4.example.com';
-- 查看用户权限
SHOW GRANTS FOR 'yinhe'@desktop4.example.com'
-- 用户授权支持SQL用通配符
mobius@'localhost'
mobius@'192.168.1.5'
mobius@'192.168.1.%'
- DDL数据定义语言:
- 数据备份
- 按业务分为冷备(所有业务下线)、温备(业务只读)、热备(所有业务在线);
- 备份方式分为逻辑备份(通过SQL导出记录,可以不下线,低效、高可移植)、物理备份(复制数据目录,如
/var/lib/mysql
,需要下线,高效、低可移植); - 逻辑备份:
1
2
3
4# 备份
mysqldump -uroot -predhat inventory > ~/dump.out
# 还原
mysql -uroot -predhat abc < /root/dump.out - 物理备份:
mysqlhotcopy
是mysql提供的冷/温备工具,或直接给逻辑卷做快照(lvm snapshots,cow写前复制,所以建议数据文件规划在逻辑卷上);
网页服务
- 安装
yum install -y httpd
:- 查看配置文件
rpm -qc httpd
; - 日志默认存放在
/var/log/httpd
(同时也会写入系统日志/var/log/message
); - 内容默认存放在
/var/www/html
; - httpd的详细帮助文档,安装
yum install -y httpd-manual
;
- 查看配置文件
- 实验,使用
/srv/www4.example.com/www/
为www4.example.com提供内容,使用/srv/default/www/
为其他域名提供内容:- SELinux策略已经为
/srv/*/www
目录授予权限,若遇到403,使用restorecon -vvvR /srv/
(v越多显示的过程越详细),使用ll -RZ /srv/
查看,发现SELinux已重置为httpd_sys_content_t
; - 虚拟主机配置可以参考
/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
,复制到/etc/httpd/conf.d/
下,分屏编辑vim -o {default,www4}.conf
; - default配置:
1
2
3
4
5
6
7<VirtualHost *:80>
DocumentRoot "/srv/default/www/"
</VirtualHost>
<Directory "/srv/default/www/">
AllowOverride None
Require all granted
</Directory> - www4配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<VirtualHost *:80>
DocumentRoot "/srv/www4.example.com/www/"
ServerName www4.example.com
ServerAlias www4
</VirtualHost>
<Directory "/srv/www4.example.com/www/">
AllowOverride None
Require all granted
# Allow,Deny是老版本的访问控制命令,Require是新版本的命令
# Order allow,deny
# Allow from all
# Deny from 172.25.4.10
# 多条Require放入Require容器:<RequireAny>、<RequireAl>
# <RequireAny>
# Require all granted
# Require not ip 172.25.0.10
# </RequireAny>
</Directory> - 若有欢迎页面,重命名掉
/etc/httpd/conf.d/welcome.conf
,注释掉主配置Options Indexes FollowSymLinks
;
- SELinux策略已经为
- 实验,https(TLS)配置:
- 生成秘钥对:
openssl genrsa 1024 > /root/pair.key
; - 生成新签名请求:
openssl req -new -key /root/pair.key -out /root/server.csr
; - 安装SSL支持:
yum install mod_ssl.x86_64
,查看安装文件rpm -ql mod_ssl
,主配置文件为/etc/httpd/conf.d/ssl.conf
; - 添加防火墙:
1
2firewall-cmd --add-service=https
firewall-cmd --add-service=https --permanent - 备份配置
mv /etc/httpd/conf.d/ssl.conf{,.bak}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Listen 443 https
<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLHonorCipherOrder on
ServerName www4.example.com
DocumentRoot /srv/ssl/www/
SSLCertificateFile
SSLCertificateKeyFile
SSLCACertificateFile /etc/pki/tls/certs/ca.crt
<Directory "/srv/ssl/www/">
Require all granted
</Directory>
</VirtualHost> - 重启服务:
systemctl restart httpd.server
;
- 生成秘钥对:
- 实验,部署python网络应用:
- 安装wsgi插件:
yum install -y mod_wsgi.x86_64
; - 修改
webapp.wsgi
的SELinux标签:1
2
3
4# 永久改标签
semanage fcontext -a -t "httpd_sys_content_t" "/srv/wsgi/www(/.*)?"
# 刷新标签
restorecon -vvvR /srv/wsgi/www/ - 修改端口的SELinux标签:
1
2
3
4
5
6# 查看9981端口标签
semanage port -l | grep 9981
# 查看一般网页端口的标签
semanage port -l | grep 80
# 永久改标签
semanage port -a -t http_port_t -p tcp 9981 - 修改
vim wsgi.conf
:1
2
3
4
5
6
7
8
9
10Listen 9981
<VirtualHost *:9981>
DocumentRoot "/srv/wsgi/www/"
ServerName webapp4.example.com
WSGIScriptAlias / /srv/wsgi/www/webapp.wsgi
</VirtualHost>
<Directory "/srv/wsgi/www/">
AllowOverride None
Require all granted
</Directory> - 添加防火墙:
1
2firewall-cmd --add-port=9981/tcp
firewall-cmd --add-port=9981/tcp --permanent
- 安装wsgi插件:
2018-08-03
Shell脚本
- 脚本文件首行可以写入魔术字:
#!/usr/bin/bash
,用于指定脚本执行的程序;
- 使用常量创建用户:
- 创建用户:
1
2
3
4echo "adding user1"
useradd user1 & > /dev/null
echo "setting password for user1"
echo "redhat" | passwd --stdin user1 - 执行脚本:
1
2
3
4
5
6
7
8
9
10# 将脚本读入bash子进程执行,ps j能够看到多一个bash子进程
bash createusers
# 将脚本读入当前进程运行执行
source createusers
# .等效于source
. createusers
# 直接运行
chmod a+x createusers
/root/createusers
./createusers
- 创建用户:
which
路径查找的顺序:alias、hash、$PATH
中具有x权限的文件,设置别名:alias cdnet='cd /etc/sysconfig/network-scripts/'
;which
默认查找PATH,找到立刻返回,which -a
表示查找PATH中的所有路径;whereis
也是路径查找,包man手册;whatis
专用于查找man手册,匹配名称,man -k
还匹配摘要内容;
$
用于变量调用,其他如*, @, #
等特殊符号参见man 1 bash
中“Special Parameters”;- 设置环境变量:
export user=user2
; - 变量默认以字符存储,使用
[]
转换数字:1
2
3a=1
b=2
echo $[$a+$b] - 使用
let
数字赋值:1
2let c=$a+$b
echo $c - 算数表达式:
1
2echo $[1+1*2]
echo $[(1+1)*2]
- 设置环境变量:
- 退出码
0
表示正常,非0
值各程序定义不同,使用exit 255
表示退出码;
- 条件判断:
- 数字比较:
[ "$a" -eq "$b" ] && echo true || echo false
,注意:中括号前后有空格; - 字符串比较:
[ "$a" == "$b" ] && echo true || echo false
,注意:中括号前后有空格; - 文件相关信息的条件判断参见
man 1 bash
的“Conditional Expressions”; - 判断语句if,参见
help if
:1
2
3
4
5
6if xxx ;
then ... ;
elif ... ;
then ... ;
else ... ;
fi - 判断语句case,参见
help case
,实验:1
2
3
4
5
6
7
8
9
case $* in
redhat)
echo fedora ;;
fedora)
echo redhat ;;
*)
echo "/root/foo.sh redhat|fedora"
esac - 添加运行权限
chmod a+x foo.sh
- 数字比较:
- 循环语句:
- for语句:
1
2
3for in {1..100};
do echo $i;
done - 判断PC是否在线:
1
2
3
4
5
6
7
8
9
10
11
for i in {1..20}
do ping -c1 172.25.254.$i > /dev/null
if [ $? -eq 0 ]
then echo pc${i}:online
let sumon++
else
echo pc${i}:online
let sumoff++
if
done - while语句:
1
2
3while: xxx
do ...;
done
- for语句:
- 表格处理:
grep w /etc/passwd | cut -d: -f 1,7
;
- 实验,用到的文件newusers每行形为
Cassy:Rundle:60:1
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if [ $# -ne 1 ]
then
echo 'Usage: /root/batchusers filename'
exit 256
elif [ -f $1 ]
then
for username in `cut -d: -f1 $1`
do
echo $username
useradd -s /bin/false $username
done
else
echo 'input file not found'
exit 128
fi
Redhat Linux初体验(1)
Redhat Linux初体验(2)
结语
- 特别感谢李老师在授课之余,带我刷猪肘饭和骨汤面;
- 感谢成都天气控制部门一直将盛夏的气温保持在25℃左右,湿度也刚刚好,我现在知道成都妹纸为啥皮肤好了[捂脸];
- 感谢金开服务公寓的免费撸铁房;
- 感谢东哥拐我来成都培训[捂脸]。
- 特此批评西安的天气控制部门,连续的40℃还说自己是啥线城市?