首页
归档
时光轴
推荐
Cloud
图床
导航
Search
1
openstact 基础环境安装 (手动版)
545 阅读
2
Deploy OpenStack offline based on Kolla
404 阅读
3
Typecho 1.2.0 部署
387 阅读
4
Mariadb 主从复制&读写分离
365 阅读
5
模拟登录古诗文网
301 阅读
Python
Linux
随笔
mysql
openstack
Search
标签搜索
linux
Pike
python
爬虫
openstack
mysql
Essay
Ansible
docker
Zabbix
kolla
Internet
Redis
1+X
Hyper-V
jenkins
Kickstart
自动化
sh
Acha
累计撰写
76
篇文章
累计收到
1
条评论
首页
栏目
Python
Linux
随笔
mysql
openstack
页面
归档
时光轴
推荐
Cloud
图床
导航
搜索到
27
篇与
Linux
的结果
2021-04-03
安装 PHP
PHP安装 对于使用LAMP 架构的朋友,php是非常重要的 我最初部署博客的时候使用的是php5.4的版本,也是centos7 yum源中的默认版本 安装很简单,yum install php -y 就可以了 后来,部署图床的时候php版本就是个问题了,要求7的版本 上了7.4,结果高了不兼容,又换了7.1 在使用中发现7.1 对我现在部署的一些东西还是比较稳定的。听说7比5要快一点 不过还是建议选择合适版本,在虚拟机里实验好,在上线 准备工作 查看PHP版本 # php -v 移除 rpm -qa | grep php # 检查当前PHP安装包 yum remove php* # 完全移除当前PHP安装包以免起冲突 安装 epel 源 Tip: EPEL 是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux yum install epel-release -y # 安装好后可以通过如下命令查看 yum info epel-release yum repolist 安装PHP tip:PHP选择合适版本安装 安装PHP 7.0 yum install -y php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 php70w-fpm Tip:想安装php5.5或者5.6版本,将上面70 替换为55或56 安装 PHP 7.1 yum install -y php71w-fpm php71w-opcache php71w-cli php71w-gd php71w-imap php71w-mysqlnd php71w-mbstring php71w-mcrypt php71w-pdo php71w-pecl-apcu php71w-pecl-mongodb php71w-pecl-redis php71w-pgsql php71w-xml php71w-xmlrpc php71w-devel mod_php71w 检查版本 php -v 启动 启动PHP Tip:PHP-FPM 是一个PHPFastCGI管理器,适用于5.3.3以后版本 systemctl start php-fpm # 启动 systemctl enable php-fpm # 开机自启 systemctl stop php-fpm # 停止 systemctl restart php-fpm # 重启 测试 在apache工作目录下新建 test.php,内容如下 <?php phpinfo(); ?> 在浏览器中访问:[ip地址]/test.php ; 返回下图,安装成功
2021年04月03日
107 阅读
0 评论
1 点赞
2021-03-18
域名
域名 简介 域名是IP地址的代称,目的是方便记忆。 由一串用点分隔的字符组成的,用于在数据传输是标记计算机的位置。 域名映射IP,由DNS服务器解析转换为IP地址。 历史 1983年,保罗·莫卡派乔斯发明了域名解析服务和域名系统 1985年1月1日,世界上第一个域名nordu.net被注册 域名层次 以 www.baidu.com 为例 顶级域名 (.com) 一级域名(baidu) 二级域名 (www) 一个域名可以有多个二级域名 域名注册 向域名服务商注册域名,每年需要缴纳一定费用 域名可以转让,买卖 域名解析(DNS) 正向解析 域名转换为IP地址 反向解析 IP地址转换为域名 工作流程: 输入查询域名 浏览器查询本地缓存,查询到与网络服务交换内容,结束 向对应的顶级服务器下的子服务器发起请求,获得对应IP 浏览器去相应IP的网络服务器交互内容 域名解析配置 去域名服务商那添加域名解析 记录类型 A 指向一个 ipv4地址 CNAME 指向另一个域名 AAAA 指向一个ipv6地址 主机记录 www 解析后的域名为 www.<域名>.<顶级域名> 二级域名 如 abc.<域名>.<顶级域名> @ 直接解析主域名 记录值 IP地址 Apache 配置多站点访问及二级域名配置 通过云解析服务商为主域名分配子域名,再为子域名绑定主机IP。 修改 httpd.conf 文件,去掉include httpd-vhosts.conf 前面的注释。 注释 httpd-vhosts.conf 文件中所有内容,然后添加 <Directory /> AllowOverride all Require all granted </Directory> NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin 「管理员邮箱」 DocumentRoot 「项目根目录」 ServerName 「二级域名」 ServerAlias 「域名别名」 ErrorLog 「错误日志」 CustomLog 「访问日志」 </VirtualHost> Directory 标签用于给所有目录设置访问权限 AllowOverride all 允许 .htaccess 对URL进行重写 / AllowOverride none 忽略 .htaccess 文件 Require all granted 允许外部访问 / Require all denied 禁止外部访问 NameVirtualHost 是固定形式,用于使 VirtualHost 标签生效 VirtualHost 标签用于为二级域名绑定虚拟主机 每一个二级域名对应一个 VirtualHost 标签,有多少二级域名,就需要多少个 VirtualHost 标签 DocumentRoot 和 ServerName 是必填项,其余可选 注意:由于 www 域名属于特殊的二级域名,所以它也需要在 httpd-vhosts.conf 文件中注册 重启apache服务
2021年03月18日
292 阅读
0 评论
0 点赞
2021-03-18
apache 实验
配置文件位置 配置文件位置: 源码包安装: PREFIX/etc/httpd.conf(主配置文件) PREFIX/etc/extra/*.conf(子配置文件) rpm包安装: /etc/httpd/conf/httpd.conf 网页文件位置: 源码包安装: PREFIX/htdocs/ rpm包安装: /var/www/html/ 日志文件位置: 源码包安装: PREFIX/logs/ rpm包安装: /var/log/httpd/ 配置文件详解 注意:apache配置文件严格区分大小写 针对主机环境的基本配置参数 ServerRoot /usr/local/apache2 #apache主目录 Listen :80 #监听端口 LoadModule php7 #加载的相关模块 User Group #用户和组 ServerAdmin #管理员邮箱 ServerName #服务器名(没有域名解析时,使用临时解析。默认不开启) ErrorLog "logs/error_log #服务器错误日志 CustomLog "logs/access_log" common #访问记录日志 DirectoryIndex index.html index.php #默认网页文件名,优先级顺序 Include etc/extra/httpd-vhosts.conf #子配置文件中内容也会加载生效 主页目录及权限 DocumentRoot "/usr/local/apache2/htdocs" #网页文件存放目录(默认) <Directory "/usr/local/apache2/htdocs"> #定义指定目录的权限 Options Indexes FollowSymLinks None #没有任何额外权限 All #所有权限(除去MultiViews以外) Indexes #浏览权限(当此目录下没有默认网页文件时,显示目录内容) FollowSymLinks #准许软连接到其他目录 MultiViews #准许文件名泛匹配(需要手动开启模块才有效negotiation) AllowOverride None #定义是否允许目录下.htaccess文件中的权限生效 None #.htaccess中权限不生效 All #文件中所有权限都生效 AuthConfig #文件中,只有网页认证的权限生效 Require all granted(denied) #访问控制列表 </Directory> <IfModule dir_module> #此标签用来指定访问到指定目录时自动加载哪个页面文件 DirectoryIndex index.php index.html #可以写多个,但是有优先级之分 </IfModule> 实验 说明:以下实验均为源码安装apache yum 安装需要去 /usr/share/doc/httpd-2.4.6/ 配置文件,拷贝到 http.d 1. 目录别名 当 apache 接受请求时,在默认情况下会将 DocumentRoot目录中的文件送到客户端 如果想将某一不 在 DocumentRoot 目录中的文件共享到网站上 可以通过建立别名的方式将 URL 指向特定的目录 编辑主配置文件 # vim /usr/local/apache2/conf/httpd.conf Include etc/extra/httpd-autoindex.conf #去掉注释,开启调用子配置文件 编辑子配置文件 # vim /usr/local/apache2/conf/extra/httpd-autoindex.conf alias /icons/ "/usr/local/apache2/icons/" 结构:别名 "真实目录" #真实目录的结尾要有/,否则报错 <Directory "/usr/local/apache2/icons"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> 可以根据模板编写一个自己需要的目录别名 重启服务 2.用户认证 有时候,我们需要给一些特殊的访问。设置一个用户认证机制,增加安全 比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身就有密码 但为了更加安全,可以再设置一层用户身 份认证 编辑子配置文件 # vim /usr/local/apache2/etc/httpd.conf 在需要进行登录认证的目录标签中加入如下配置: <Directory "/usr/local/apache2/htdocs/admin"> #声明被保护目录 Options Indexes FollowSymLinks AllowOverride All #开启权限认证文件.htaccess Require all granted </Directory> 在指定目录下创建权限文件 切换到需要进行登录认证的目录,创建 .htaccess 文件,并添加下面的内容 # vi .htaccess AuthName "Welcome to atguigu" #提示信息 AuthType basic #加密类型 AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd #密码文件,文件名自定义。(使用绝对路径) require valid-user #允许密码文件中所有用户访问 建立密码文件,加入允许访问用户(与系统用户无关) # htpasswd -c /usr/local/apache2/htdocs/admin/apache.passwd test1 -c 建立密码文件,只有添加第一个用户时,才能-c # htpasswd -m /usr/local/apache2/htdocs/admin/apache.passwd test2 -m 再添加更多用户时,使用-m 参数 注意: htpasswd 该命令是 httpd 的命令,需要绝对路径 、重启服务 3.虚拟主机 虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。 虚拟主机的分类: 基于IP 基于端口 基于域名 实验准备: 域名解析:准备两个域名 www.sohu.com www.sina.com 网站主页目录规划 在/htdocs/目录下分别创建 sohu 和 sina 两个目录,并在新建目录内创建 index.html 文件(分别写不同内容) 实验步骤: 修改主配置文件开启文件关联 # vi /usr/local/apache2/etc/httpd.conf Include etc//extra/httpd-vhosts.conf #此行取消注释 编辑子配置文件,编写虚拟主机标签 # vi /usr/local/apache2/etc/extra/httpd-vhosts.conf 添加下方内容,有几个虚拟主机就写几组(添加之前先把原先存在的示例删除掉) <Directory "/usr/local/apache2/htdocs/sina"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> #目录权限标签根据需要自行添加 <VirtualHost 192.168.88.10:80> #虚拟主机标签 ServerAdmin webmaster@sina.com #管理员邮箱 DocumentRoot "/usr/local/apache2/htdocs/sina" #网站主目录 ServerName www.sina.com #完整域名 ErrorLog "logs/sina-error_log" #错误日志 CustomLog "logs/sina-access_log" common #访问日志 </VirtualHost> 重启服务,验证结果 4.域名跳转 一个站点难免会有多个域名,而多个域名总得有一个主次 比如我的网站可以用两个域名访问:www.sina.com和www.sohu.cn 但大家发现不管我用哪个域名访问,最终都会跳转到 www.sina.com 上 来 这个行为就叫做域名跳转,状态码:301 是永久跳转,302 是临时跳转 网站上一定要设置为 301, 这样对搜索引擎是比较友好的 实验条件: 虚拟主机能正常访问 打开重写配置模块 LoadModule rewrite_module modules/mod_rewrite.so #取消注释 实验步骤: 修改虚拟主机配置文件 # vi */extra/httpd-vhosts.conf <Directory "/usr/local/apache2/htdocs/sohu"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> 创建规则匹配文件 # vi */.htaccess 在指定的网站目录下创建文件,并添加以下内容 RewriteEngine on # 开启rewrite功能 RewriteCond %{HTTP_HOST} ^www.sohu.com # 把以www.sina.com 开头的内容赋值给HTTP_HOST变量 RewriteRule ^(.*)$ http://www.sina.com/$1 [R=permanent,L] # ^(.*)$ 指代客户端要访问的资源 # $1 把 .* 所指代的内容赋值到$1变量中 # R=permanent 永久重定向 = 301 # L 指定该规则为最后一条生效的规则,以后的不再生效 重启服务并测试 5.实现https HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的 HTTP 通道 简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,用于安全的 HTTP 数据传输。 这个系统被 内置于浏览器中,提供了身份验证与加密通讯方法。 准备工作: 检查 Apache 是否支持 SSL,检查相应模块是否安装,若安装则将模块启用 模块存放目录:/usr/local/apache2/modules 检查模块是否启用:apachectl -M CA 证书申请: a. openssl genrsa -out ca.key 1024 #建立服务器私钥,生成 RSA 密钥 b. openssl req -new -key ca.key -out atguigu.csr #需要依次输入国家,地区,城市,组织,组织单位,Email 等信息。最重要的是有一个 common name,可以写你的名字或者域名。如果为了 https 申请,这个必须和域名吻合,否则会引发浏览 器警报。生成的 csr 文件交给 CA 签名后形成服务端自己的证书 c. openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey ca.key -out atguigu.crt #使用 CA 服务器签发证书,设置证书的有效期等信息 注意 1:生成完秘钥和证书文件后,将文件存放在 Apache 的安装目录下的 cert 目录下 注意 2:在生产环境中必须要在 https 证书厂商注册(否则浏览器不识别) 配置文件修改: 调用 ssl 模块,并启用 ssl 独立配置文件 # vim /usr/local/apache2/etc/httpd.conf LoadModule ssl_module modules/mod_ssl.so #取消注释 Include etc/extra/httpd-ssl.conf #取消注释 修改 conf/extra/httpd-ssl.conf 配置文件,调用证书等文件 #添加 SSL 协议支持协议,去掉不安全的协议 SSLProtocol all -SSLv2 -SSLv3 #修改加密套件如下 SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM SSLHonorCipherOrder on #证书公钥配置(签字的) SSLCertificateFile cert/atguigu.crt #证书私钥配置 SSLCertificateKeyFile cert/ca.key 修改主配置文件,添加虚拟主机 <VirtualHost _default_:443> # DocumentRoot 目录位置要和 httpd.conf 里面的一致 DocumentRoot "/usr/local/apache2/htdocs" ServerName localhost:443 SSLCertificateFile cert/atguigu.crt SSLCertificateKeyFile cert/ca.key SSLCertificateChainFile cert/atguigu.crt </VirtualHost> 结果验证 # apachectl -t #检查配置文件语法 # apachectl restart #重启 apache,并测试是否可以使用 https 访问 报错提示:AH00526: Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf: SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?). 解决方案:要么不调用此模块,要么让调用的模块加载上 强制跳转 https: 有些时候为了安全,网站不允许使用 http 访问,仅允许使用 https 访问,目的是为了更加安全 在 http 部分的目录权限标签中添加一下内容 <Directory "/usr/local/apache2/htdocs"> …… RewriteEngine on #开启转发规则 RewriteCond %{SERVER_PORT} !^443$ #检查访问端口只要目标不是443的 RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] #全都使用https重新访问 </Directory> 在做后面实验时为了更加方便理解,我们可以先把 https 关闭掉 需要关闭:跳转&虚拟主机&ssl 配置文件调用 6.日志分割 我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大 如何避免产生大的日志文件?其实 apache 有相关的配置 使日志按照我们的需求进行归档,比如每 天一个新日志,或者每小时一个新的日志 首先简单设置日志的路径名称 #vim /usr/local/apache2/etc/httpd.conf 编辑添加内容如下: ErrorLog "logs/error.log" CustomLog "logs/access.log" combined 指定了日志存放在/usr/local/apache2/logs 目录下分别为 error.log 和 access.log,combined 为日 志显示的格式,日志格式可以参考配置文件 httpd.conf 中格式的指定,如下: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common 设置apache 日志分割 同样编辑配置文件 httpd.conf ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400" CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined 注意 1:以上仅为两条命令(一条错误日志,一条访问日志),路径太长写不开 注意 2:若开启了 https,则需要修改 http-ssl.conf 配置文件中的日志记录条目 xxxxxxxxxx 同样编辑配置文件 ErrorLog 是错误日志,CustomLog 是访问日志。|就是管道符,意思是把产生的日志交给 rotatelog 而这个工具就是 apache 自带的切割日志的工具。-l 的作用是校准时区为 UTC,也就是北京时间 86400,单位是秒,正好是一天,那么日志会每天切割一次 而最后面的 combined 为日志的 格式,在 httpd.conf 中有定义 7.不记录指定日志类型 如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的 比如网站的一些图片,还有 js、css 等静态对象。而这些文件的访问往往是巨量的 而且即使记录这 些日志也没有什么用,那么如何忽略不记录这些日志呢? 配置日志不记录图片的访问 # vim /usr/local/apache2/conf/httpd.conf 相关配置为: SetEnvIf Request_URI ".*\.gif$" image-request SetEnvIf Request_URI ".*\.jpg$" image-request SetEnvIf Request_URI ".*\.png$" image-request SetEnvIf Request_URI ".*\.bmp$" image-request SetEnvIf Request_URI ".*\.swf$" image-request SetEnvIf Request_URI ".*\.js$" image-request SetEnvIf Request_URI ".*\.css$" image-request CustomLog "|/usr/local ... _%Y%m%d.log 86400" combined env=!image-request 说明:在原来的访问日志配置基础上,增加了一些 image-request 的定义 比如把 gif、jpg、bmp、 swf、js、css 等结尾的全标记为 image-request 然后在配置日志后加一个标记 env=!image-request, 表示取反 8.配置静态缓存 所说的静态文件指的是图片、js、css 等文件,用户访问一个站点,其实大多数元素都是图片、js、 css 等 这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时 不再去服务器上下载 加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总 有一些时效性,那么就得设置这个过期时间 Apache 配置静态缓存 # vim /usr/local/apache2/conf/httpd.conf <IfModule mod_expires.c> #此模块默认未启用,请手动启用 ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hours" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" </IfModule> 或者使用 mod_headers 模块实现:该模块默认启用 <IfModule mod_headers.c> # htm,html,txt 类的文件缓存一个小时 <filesmatch "\.(html|htm|txt)$"> header set cache-control "max-age=3600" </filesmatch> # css, js, swf 类的文件缓存一个星期 <filesmatch "\.(css|js|swf)$"> header set cache-control "max-age=604800" </filesmatch> # jpg,gif,jpeg,png,ico,flv,pdf 等文件缓存一年 <filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$"> header set cache-control "max-age=29030400" </filesmatch> </IfModule> 说明:这里的时间单位可以 days、hours 甚至是 min,两种不同的方法, 上面使用的是 mod_expires, 而下面用的是 mod_headers,要想使用这些模块,必须要事先已经支持。 如何查看是否支持,使用命令: # /usr/local/apache2/bin/apachectl -M 重启服务并验证 验证: # curl -x127.0.0.1:80 'http://www.sohu.com/image/a.jpg' -I HTTP/1.1 200 OK Date: Wed, 26 Oct 2016 03:51:26 GMT Server: Apache/2.2.31 (Unix) PHP/5.5.38 Last-Modified: Tue, 31 May 2016 03:08:36 GMT ETag: "46891b-16b-5341ab0597500" Accept-Ranges: bytes Content-Length: 363 Cache-Control: max-age=86400 # 看这里 Expires: Thu, 27 Oct 2016 03:51:26 GMT Content-Type: image/jpg 9.禁止解析PHP 某个目录下禁止解析 PHP,这个很有作用,我们做网站安全的时候,这个用的很多, 比如某些目录可 以上传文件,为了避免上传的文件有木马,所以我们禁止这个目录下面的访问解析 PHP。 配置禁止解析 php: <Directory /usr/local/apache2/htdocs/data> php_admin_flag engine off <filesmatch "(.*)php"> Order deny,allow Deny from all </filesmatch> </Directory>
2021年03月18日
179 阅读
0 评论
1 点赞
2021-03-16
ansible 学习
ansible inventory ANSIBLE_CONFIG ansible.cfg 项目目录 ./ansible.cfg 当前用户的家目录 /etc/ansible/ansible.cfg [root@manager ~]# cat /etc/ansible/ansible.cfg inventory = /etc/ansible/hosts #主机列表配置文件 library = /usr/share/my_modules/ #库文件存放目录 remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录 local_tmp = ~/.ansible/tmp #本机的临时执行目录 forks = 5 #默认并发数 sudo_user = root #默认sudo用户 ask_sudo_pass = True #每次执行是否询问sudo的ssh密码 ask_pass = True #每次执行是否询问ssh密码 remote_port = 22 #远程主机端口 host_key_checking = False #跳过检查主机指纹 log_path = /var/log/ansible.log #ansible日志 [privilege_escalation] #如果是普通用户则需要配置提权 become=True become_method=sudo become_user=root become_ask_pass=False 生成密钥 生成密钥名字为dsa , 生成的时候会提示生成的密钥的路径以及密码,可以不输入,默认在 ~/.ssh/目录下 ssh-keygen -t dsa 将生成的公钥上传到指定的服务器中 ssh-copy-id -i ~/.ssh/id_dsa.pub user@192.168.0.201 创建工作目录 mkdir project1/ vim hosts [youto] 192.168.0.201 192.168.0.202 Ad-Hoc [ ping ] ansible youto -m ping -i hosts [查看磁盘信息] ansible youto -m shell -a "df -h" -i hosts command 不能支持管道符 playbook [][] 示例 检查yum语法 ansible-palaybook --syntax http.yml nfs.yaml nfs 的 配置文件 exports.j2 /data 192.168.0.201(rw) [共享文件夹] [允许访问主机] (权限) - hosts: 192.168.0.202 tasks: # yum 安装 nfs-utils - name: Install NFS Server yum: name=nfs-utils state=present # 分发 配置文件 - name: Configure NFS Server copy: src=./exports.j2 dest=/etc/exports backup=yes # 创建 组 - name: Create NFS Group group: name=nfss gid=666 # 创建 用户 - name: Create NFS User user: name=nfss uid=666 group=666 shell=/sbin/nologin create_home=no # 创建 共享文件夹 - name: Create NFS Data file: path=/data state=directory owner=nfss group=nfss recurse=yes # 开启 nfs 服务 - name: Service NFS Server service: name=nfs state=started enabled=yes - hosts: 192.168.0.201 tasks: # 创建 挂载目录 - name: Client Create NFS Data file: path=/nfs_tt state=directory # 挂载 - name: Client Mount NFS Server mount: src: 192.168.0.202:/data path: /nfs_tt fstype: nfs opts: defaults state: mounted 清空原来http软件 ansible youto -m yum -a "name=httpd state=absent" -i hosts http.yml tt.j2 (index.html 显示页面) httpd.conf.j2 (httpd 配置文件) - hosts: 192.168.0.202 tasks: yum install httpd # yum 安装 httpd - name: Install Httpd Server yum: name=httpd state=present # 修改 httd.conf 配置文件 - name: Configure Httpd Server copy: src=./httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf backup=yes # 设置 web 页面 - name: Configure Httpd WebSite copy: src=./tt.j2 dest=/var/www/html/tt.html owner=root group=root mode=644 # 开启 httpd 服务 - name: Service Httpd Server service: name=httpd state=started enabled=yes # 开启 firewalld - name: Service Firewalld Server service: name=firewalld state=started # 放行 9988 端口 - name: Configure Firewalld Server firewalld: zone=public port=9988/tcp permanent=yes immediate=yes state=enabled 卸载php71w yum list installed |grep php71w|awk '{print $1}'|xargs|sed -r 's#(.*)#yum remove -y \1#g'|bash lamp.yml wget http://static.kodcloud.com/update/download/kodexplorer4.40.zip - hosts: 192.168.0.201 tasks: # yum 安装 httpd php - name: Install Httpd PHP firewalld yum: name=httpd,php,php-pdo,php-mbstring,php-gd,firewalld state=present # 开启 httpd 服务 - name: Service Httpd Server service: name=httpd state=started # 开启防火墙 - name: Service Firewalld Server service: name=firewalld state=started # 放行 80 端口 - name: Configure Firewalld firewalld: port=80/tcp immediate=yes state=enabled # 获取 tt.php - name: Get Url index.php get_url: url: http://fj.xuliangwei.com/public/index.php dest: /var/www/html/tt.php # 获取并解压 kodexplorer4.40 - name: Copy Kod Cloud Code unarchive: src=./kodexplorer4.40.zip dest=/var/www/html/ mode=0777 - name: Chown Directory file: path=/var/www/html owner=apache group=apache recurse=yes 变量 定义变量 playbook的yaml文件中定义变量赋值 - hosts: all vars: #定义变量 file_name: bgx_yaml_vars tasks: - name: # {{ file_name }}引用上面定义的变量 file: path=/tmp/{{ file_name }} state=touch #playbook执行,在/tmp目录创建bgx_yaml_vars文件 [root@manager ~]# ansible-playbook f1.yml --extra-vars执行参数赋给变量 - hosts: all tasks: - name: Create New File file: path=/tmp/{{ file_name }} state=touch #playbook执行时传入file_name变量的参数,在/tmp目录创建bgx_extra-vars文件 [root@manager ~]# ansible-playbook f2.yml --extra-vars "file_name=bgx_extra-vars" 在文件中定义变量 在/etc/ansible/hosts主机组中定义,然后使用palybook进行调度该变量 [root@manager ~]# cat /etc/ansible/hosts [nfs] 10.0.0.20 [nfs:vars] file_name=bgx_filename 变量优先级 1.extra-vars外置传参的优先级最高 [所有执行的主机都生效] 2.定义在yml文件中的优先级其次 [所有执行的主机都生效] 3.hosts文件中定义的变量优先级最低 [当前主机组定义会生效] 变量注册 register关键字可以存储指定命令的输出结果到一个自定义的变量中 [root@manager ~]# cat f5.yml - hosts: all tasks: - name: shell: netstat -lntp register: System_Status - name: Get System Status debug: msg={{System_Status.stdout_lines}} when ( 判断 ) - hosts: all tasks: #检查httpd服务是否是活动的 - name: Check Httpd Server command: systemctl is-active httpd ignore_errors: yes register: check_httpd #如果check_httpd变量中的rc结果等于0,则执行重启httpd,否则跳过 - name: Httpd Restart service: name=httpd state=restarted when: check_httpd.rc == 0 when with_items ( 循环 ) - hosts: webserver tasks: - name: Create User user: name={{ item.name }} groups={{ item.groups }} state=present with_items: - { name: 'www', groups: 'bin'} - { name: 'test', groups: 'root'} with_items item handlers ( 触发器 ) - hosts: webserver #1.定义变量,在配置文件中调用 vars: http_port: 8881 #2.安装httpd服务 tasks: - name: Install Httpd Server yum: name=httpd state=present #3.使用template模板,引用上面vars定义的变量至配置文件中 - name: Configure Httpd Server template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf notify: #调用名称为Restart Httpd Server的handlers(可以写多个) - Restart Httpd Server #4.启动Httpd服务 - name: Start Httpd Server service: name=httpd state=started enabled=yes #5.如果配置文件发生变化会调用该handlers下面的对应名称的task handlers: - name: Restart Httpd Server service: name=httpd state=restarted notify handlers include ( 包含) [root@ansible project1]# cat restart_httpd.yml #注意这是一个tasks所有没有play的任何信息 - name: Restart Httpd Server service: name=httpd state=restarted [root@ansible project1]# cat a_project.yml - hosts: webserver tasks: - name: A Project command command: echo "A" - name: Restart httpd include: restart_httpd.yml 导入一个完整的playbook文件 (play task) [root@m01 project1]# cat tasks_total.yml - import_playbook: ./tasks_1.yml - import_playbook: ./tasks_2.yml tags ( 标签) 指定执行某个tags标签 [root@m01 docs1]# ansible-playbook -i hosts nginx_php.yml -t "test_user" 忽略执行某个tags标签 [root@m01 docs1]# ansible-playbook -i hosts nginx_php.yml --skip-tags "test_user" igneore_errors ( 错误处理) 1.强制调用handlers - hosts: webserver force_handlers: yes #强制调用handlers tasks: - name: Touch File file: path=/tmp/bgx_handlers state=touch notify: Restart Httpd Server - name: Installed Packages yum: name=sb state=latest handlers: - name: Restart Httpd Server service: name=httpd state=restarted 2.关闭changed的状态(确定该tasks不会对被控端做任何的修改和变更.) - hosts: webserver tasks: - name: Installed Httpd Server yum: name=httpd state=present - name: Service Httpd Server service: name=httpd state=started - name: Check Httpd Server shell: ps aux|grep httpd register: check_httpd changed_when: false - name: OutPut Variables debug: msg: "{{ check_httpd.stdout_lines }}" 3.使用changed_when检查tasks任务返回的结果 - hosts: webserver tasks: - name: Installed Nginx Server yum: name=nginx state=present - name: Configure Nginx Server copy: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: Restart Nginx Server - name: Check Nginx Configure Status command: /usr/sbin/nginx -t register: check_nginx changed_when: - ( check_nginx.stdout.find('successful')) - false - name: Service Nginx Server service: name=nginx state=started handlers: - name: Restart Nginx Server service: name=nginx state=restarted jinja语法 {% if EXPR %}...{% elif EXPR %}...{% endif%} 作为条件判断 --------------------------------------判断语句 {% if ansible_fqdn == "web01" %} echo "123" {% elif ansible_fqdn == "web02" %} echo "456" {% else %} echo "789" {% endif %} --------------------------------------循环语句 {% for i in EXPR %}...{% endfor%} 作为循环表达式 {% for i in range(1,10) %} server 172.16.1.{{i}}; {% endfor %} {# COMMENT #} 表示注释 Roles Roles基于一个已知的文件结构 tasks handlers templates ..... Roles小技巧: 创建roles目录结构,手动或使用ansible-galaxy init test roles 编写roles的功能,也就是tasks。 最后playbook引用roles编写好的tasks [root@m01 project2]# mkdir memcached/{tasks,handlers,templates,vars,files} -pv mkdir: 已创建目录 "memcached" mkdir: 已创建目录 "memcached/tasks" mkdir: 已创建目录 "memcached/handlers" mkdir: 已创建目录 "memcached/templates" mkdir: 已创建目录 "memcached/vars" mkdir: 已创建目录 "memcached/files" [root@m01 project2]# mkdir {nginx,php-fpm}/{tasks,handlers,templates} -p galaxy /root/.ansible/roles 1.使用roles创建Rsync服务, 目录结构如下 [root@m01 roles]# tree /etc/ansible/roles/ /etc/ansible/roles/ ├── hosts ├── rsync │ ├── files │ │ ├── rsyncd.conf │ │ └── rsync.passwd │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── templates │ └── vars ├── site.yml 2.定义roles主机清单 [root@m01 roles]# cat /etc/ansible/roles/hosts [backup] 172.16.1.41 3.指定backup主机组,执行那个roles [root@m01 roles]# cat /etc/ansible/roles/site.yml - hosts: backup remote_user: root roles: - rsync 4.查看rsync角色的tasks任务 [root@m01 roles]# cat /etc/ansible/roles/rsync/tasks/main.yml - name: Install Rsync Server yum: name=rsync state=present - name: Configure Rsync Server copy: src={{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }} with_items: - {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"} - {src: "rsync.passwd", dest: "rsync.passwd", mode: "0600"} notify: Restart Rsync Server - name: Start Rsync Server service: name=rsyncd state=started enabled=yes 5.查看rsync角色的handlers [root@m01 roles]# cat /etc/ansible/roles/rsync/handlers/main.yml - name: Restart Rsync Server service: name=rsyncd state=restarted 6.查看rsync角色的files目录 [root@m01 roles]# ll /etc/ansible/roles/rsync/files/ total 8 -rw-r--r-- 1 root root 322 Nov 16 18:49 rsyncd.conf -rw------- 1 root root 20 Nov 16 18:30 rsync.passwd 8.执行roles,使用-t指定执行测试rsync角色 [root@m01 roles]# ansible-playbook -i hosts -t rsync site.yml PLAY [backup] ******************************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [172.16.1.41] TASK [backup : Install Rsync Server] *********************************************************************** ok: [172.16.1.41] TASK [backup : Configure Rsync Server] ********************************************************************* ok: [172.16.1.41] TASK [backup : Start Rsync Server] ************************************************************************* ok: [172.16.1.41] PLAY RECAP ***********************************************************************************=0 failed=0
2021年03月16日
147 阅读
0 评论
0 点赞
2021-03-16
网络服务
网络服务 网络服务管理 操作行为 CentOS 6 CentOS 7 启动指定服务 service [服务名] start systemctl start [服务名] 关闭指定服务 service [服务名] stop systemctl stop [服务名] 重启指导服务 service [服务名] restart systemctl restart [服务名] 查看指定服务状态 service [服务名] status systemctl status [服务名] 查看所有服务状态 service --status -all systemctl list-nuits 设置服务自启动 chkconfig [服务名] on systemctl enable [服务名] 设置服务不自启动 chkconfig [服务名] off systemctl disable [服务名] 查看所有服务自启动状态 chkconfig --list systemctl list-unit-files 网卡配置 [root@achapc ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none # 连接方式( dhcp/static ) DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 # 网卡名称 UUID=2045ca8b-6656-4597-a113-76091988dc38 DEVICE=eth0 # 设备名称 ONBOOT=yes # 是否开机加载 IPADDR=192.168.0.200 # IP地址 PREFIX=24 # 子网掩码 GATEWAY=192.168.0.2 # 网关 DNS1=210.28.144.8 # DNS IPV6_PRIVACY=no 注意:选项要大写,小写不生效 修改网卡名(Centos7) 1.修改网卡配置名文件 cp ifcfg-ens33 ifcfg-eth0 2.修改网卡配置文件内容 NAME=eth0 DEVICE=eth0 3.修改grub配置文件 GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0" 4.更新配置文件,并加载新的参数 grub2-mkconfig -o /boot/grub2/grub.cfg 5.重启 reboot TCP/IP 五层常见协议 应用层: FTP, HTTP, SMTP, Telnet, DNS 传输层: TCP, UDP 网络层: IP, ICMP,ARP 数据链路层: PPP 物理层:不常用 端口配置文件: /etc/service 端口号 服务名 功能 20/21 ftp 文件共享 22 ssh 安全远程管理 23 telent 不安全远程管理 25 smtp:简单邮件传输协议 发信 465 smtp(ssl) 发信 110 pop3:邮局1协议 收信 143 imap4 收信 993 imap4(ssl) 收信 80 www(http://) 网页访问 443 www(https://) 加密网页访问 3306 mysql 数据库连接端口 53 DNS 域名解析端口 SSH 用户密码验证 格式: ssh 用户名@IP地址 ssh root@192.168.0.200 -p 指定端口 密钥对登录验证 1.生成密钥对 ssh-keygen -t rsa -b 2048 2.将公钥上传至被控端 ssh-copy-id root@192.168.0.200 3.登录 ssh root@192.168.0.200 ssh 配置文件 位置: /ssh/sshd_confi 1.禁止使用密码登录 PasswordAuthentication no 2.禁止使用root远程登录 PermitRootLogin no 3.修改默认端口 Port 2233 4.限制ssh监听IP ListenAddress 192.168.0.201 scp 格式:scp 本地文件 用户@服务器IP:目录 scp /root/acha.txt root@192.168.0.200:/tmp -P 指定端口 sftp 格式:sftp 用户@服务器IP sftp root@192.168.0.200 -oProt=端口 TCP Wrappers TCP_ Wrapper 通过控制两个配置文件实现访问控制 允许 /etc/hosts. allow 阻止 /etc/hosts. deny 配置文件编写规则: service list@host: client list service_ list: 是程序(服务)的列表,可以是多个,多个时,使用,隔开 host: 设置允许或禁止他人从自己的哪个网口进入。这一项不写,就代表全部 client_ list: 是访问者的地址,如果需要控制的用户较多,可以使用空格或,隔开 格式如下: 基于IP地址: 192.168.0.1 192.168.0. 基于主机名:youto .youto.com 基于网络/掩码:192.168.0.0/24 内置ACL:ALL(所有主机) , LOCAL(本地主机) DHCP DHCP介绍 准备实验环境 防护关闭: 1)关闭防火墙 2)关闭 SElinux 3)关闭VMware 虚拟网络编辑器DHCP功能 DHCP 相关信息 软件名: dhcp # DHCP服务软件包 dhcp-common # DHCP命令软件包(默认安装) 服务名: dhcpd # DHCP 服务名 dhcrelay #DHCP 中继服务名 端口号: udp 67 # 作为客服端的目标端口,接受客服端的请求DHCP udp 68 # 作为服务器的源端口,用来向客户端回复数据包 配置文件: dhcpd /etc/dhcp/dhcpd.conf # 此配置文件默认为空,需找模板文件重新生成 dhcpd.conf.sample /usr/share/doc/dhcp-4. . /dhcpd.con.sample # DHCP模板配置文件 dhcrelay /etc/sysconfig/dhcrelay # 中继配置文件 DHCP 配置文件详解 DHCP 基本功能实验 安装 DHCP yum install -y dhcp 生成配置文件 cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf 修改配置文件 注释所有subnet,修改最后一个subnet subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.101 192.168.0.110; default-lease-time 600; max-lease-time 7200; } 重启服务 systemctl start dhcpd 监控DHCP日志文件 tail -f /var/log/messages 重启客户机网卡 ifdown eth0;ifup eth0 固定地址分配 获取客户端 mac 地址 arp -a 修改 /etc/dhcp/dhcpd.conf 文件 host fantasia { hardware ethernet 00:0c:29:66:f5:d8; # mac 地址 fixed-address 192.168.0.123; # ip 地址 } 重启DHCP服务 systemctl start dhcpd 重启客户机网卡验证IP ifdown eth0;ifup eth0 超级作用域 设置DHCP服务器单臂路由需要的子网卡 cp -a ifcfg-eth0 ifcfg-eth0:0 #生成网卡,修改网卡名和IP地址 开启路由转发 vim /etc/sysctl.conf net.ipv4.ip_forward=1 #开启路由转发 sysctl -p # 刷新内核参数配置文件 修改 /etc/dhcp/dhcpd.conf 文件 shared-network 0-100 { subnet 192.168.0.0 netmask 255.255.255.0 { option routers 192.168.0.200; range 192.168.0.121 192.168.0.121; } subnet 192.168.100.0 netmask 255.255.255.0 { option routers 192.168.100.200; range 192.168.100.131 192.168.100.141; } } 重启 DHCP 服务 systemctl restart dhcpd 重启客户机网卡,查看验证ip地址 ifdown eth0;ifup eth0 DHCP 中继 DNS DNS 介绍 域名 (Domain Name):简称 域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机 或计算机组的名称, 用于在数据传输时标识计算机的电子方位。具有独一无二,不可重复的特性。 DNS : 域名系统( Domain Name System) , 域名解析就是 域名到 IP 地址的转换过程 正向解析: 域名 --> IP地址 反向解析: IP地址 --> 域名 域名的组成和分类 常见格式:www.youto.club 完整格式:www.youto.club. . 根域,可以省略不写 com 定级域,由ICANN组织指定和管理 分类: 国家地区域名: cn(中国) 、 hk(香港) 、 sg(新加坡) 等 通用顶级域名: com(商业机构) 、 org(非营利组织) 、 edu(教育机构) 等 新通用顶级域名: red(红色、 热情) 、 top(顶级、 高端) 等 youto: 二级域(注册域),可由个人或组织申请注册 www: 三级域(子域) ,服务器网站名代表 主机名: s1.www.youto.club. 中的 s1 就是主机名, 一般用来表示具体某一台主机 com.cn属于“二级域名” ,是 cn 顶级域的子域 4.域名解析过程 客户机首先查看查找本地 hosts 文件,如果有则返回,否则进行下一步 客户机查看本地缓存,是否存在本条目的缓存,如果有则直接返回, 否则进行下一步。 将请求转发给指向的 DNS 服务器。 查看域名是否本地解析, 是则本地解析返回, 否则进行下一步。 本地 DNS 服务器首先在缓存中查找,有则返回,无则进行下一步。 向全球 13 个根域服务器发起 DNS 请求,根域返回 org 域的地址列表。 使用某一个 org 域的 IP 地址,发起 DNS 请求, org 域返回 kernel 域服务器地址列表。 使用某一个 kernel 域 IP 地址,发起 DNS 请求, kernel 域返回 www.kernel.org 主机的 IP 地址,本 地 DNS 服务收到后,返回给客户机,并在本地 DNS 服务器保存一份 5.DNS 软件信息 软件名称:bind 服务名称:named 软件端口: UDP 53 数据通信(域名解析) TCP 53 数据同步(主从同步) 配置文件: 主配置文件: /etc/named.conf(服务器运行参数) 区域配置文件: /etc/named.rfc1912.zones(服务器解析的区域配置,正反向区域定义信息) 数据配置文件: /var/named/xx.xx(主机名和 IP 地址的对应解析关系,及主从同步信息) DNS 服务搭建 先关闭服务器和客户机上的防火墙和 SELinux 软件安装 yum -y install bind 配置主配置文件(/etc/named.conf) 配置区域文件(/etc/named.rfc1912.zones) 注:先对区域文件进行备份, 删除多余的模板,只留下一个正向和一个反向(反向修改时,网络 位的反写格式, 如 192.168.100.2-->100.168.192.) 配置数据文件/var/named/ A. 先复制生成正向解析文件和反向解析文件 B. 编辑正向解析文件(注意域名结尾的 “.” ) C. 编辑反向解析文件(注意域名结尾的 “.” ) 重启 DNS 服务 service named restart 客户端测试 在网卡配置文件中添加 DNS 服务器的地址,然后用 nslookup 测试 DNS 主从服务器 实验目的:减轻主服务器的压力 先关闭服务器和客户机上的防火墙和 SELinux 实验准备: 一台主服务器、一台从服务器、一台测试机 搭建过程: 搭建主服务器步骤(同上,不截图了) : a. 安装 bind 软件 b. 主配置文件的修改 c. 区域配置文件的修改 d. 配置数据文件 正向数据文件 反向数据文件(可选做) e. 启动 named 服务 注意: 主 DNS 的区域配置文件中 allow-updata 参数添加从服务器 IP 地址。 搭建从服务器步骤: a. 安装 bind 软件 b. 修改主配置文件/etc/named.conf c. 配置区域文件(/etc/named.rfc1912.zones) 注意:从配置文件的类型需要修改为 slave,并且需要填写主服务器的地址,如下 type slave; masters { 192.168.0.10; }; #大括号两侧留有空格 文件保存位置修改为 file “slaves/atguigu.localhost” ; d. 重启服务 e. 在测试机上填写从服务器的 IP,并使用 nslookup 测试 DNS 缓存服务器 实验作用:加快解析速度, 提高工作效率 先关闭服务器和客户机上的防火墙和 SELinux 实验软件:dnsmasq 配置文件:/etc/dnsmasq.conf domain=域名 #需要解析的域名 server=ip #主 DNS 服务器 IP cache-size=15000 #声明缓存条数 重启服务: service dnsmasq restart 测试效果: 在测试机上填写 DNS 缓存服务器的 ip 地址 智能 DNS (分离解析) 实验原理: DNS 分离解析即将相同域名解析为不同的 IP 地址。现实网络中一些网站为了让用户有更好 的体验效果解析速度更快,就把来自不同运营商的用户解析到相对应的服务器这样就大大提升了访问速度 实验环境: 一台内网测试机(单网卡) 一台网关+DNS(双网卡) 一台外网测试机(单网卡) 一台 web 服务器(双网卡) 先关闭服务器和客户机上的防火墙和 SELinux 实验步骤: 安装 bind 软件 内核配置文件开启路由转发,修改/etc/sysctl.conf 修改主配置文件/etc/named.conf 生成自己定义的区域文件(反向解析省略掉了) cp – a named.rfc1912.zones lan cp – a named.rfc1912.zones wan 配置数据文件 配置内网的正向解析文件 配置外网的正向解析文件 重启服务 service named restart 效果测试 内网客户端网卡配置 将 dns 和网关都指为网关服务器的内网口地址 外网客户端网卡配置 将 dns 和网关都指为网关服务器的外网口地址 VSFTP VSFTP介绍 概述:VSFTP是一个基于 GPL发布的类 Unix 系统上使用的 FTP 服务器软件 安全性 vsftp 程序的运行者一般是普通用户,降低了相对应进程的权限 任何需要执行较高权限的指令都需要上层程序许可 ftp 所需要使用的绝大多数命令都被整合到了 vsftp 中,基本不需要系统额外提供命令 拥有 chroot 功能,可以改变用户的根目录,限制用户只能在自己的家目录 VSFTP 连接类型 控制连接( 持续连接) --> TCP 21( 命令信道) --> 用户收发FTP命令 数据连接( 按需连接) --> TCP 20( 数据信道) --> 用于上传下载数据 工作模式 Port模式 (主动) Passive 模式 (被动) 传输模式 Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等 ASCII模式: 进行文本传输时,自动适应目标操作系统的结束符, 如回车符等 切换方式: 在ftp>提示符下输入ascii即转换到ACSII方式,输入bin,即转换到Binary方式 软件信息 服务端软件名: vsftpd 客户端软件名: ftp 服务名: vsftpd 端口号: 20、 21、指定范围内随机端口 配置文件: /etc/vsftpd/vsftpd.conf 登录验证方式 匿名用户验证: 用户账号名称: ftp或anonymous 用户账号密码: 无密码 工作目录: /var/ftp 默认权限: 默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统) 本地用户验证: 用户账号名称:本地用户(/etc/passwd) 用户账号密码: 用户密码(/etc/shadow) 工作目录:登录用户的宿主目录 权限:最大权限(drwx------) 虚拟(virtual)用户验证: 1. 创建虚拟用户用来代替本地用户,减少本地用户曝光率 2. 使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制 3. 能够设置严格的权限(为每一个用户生成单独的配置文件) 匿名用户实验 tip:关闭服务器和客户机的防火墙和SELinux 目录:/etc/vsftpd/vsftpd.conf 选项 anonymous_enable=YES 启用匿名访问 anon_umask=022 匿名用户所上传文件的权限掩码 anon_root=/var/ftp 匿名用户的 FTP 根目录 anon_upload_enable=YES 允许上传文件 anon_mkdir_write_enable=YES 允许创建目录 anon_other_write_enable=YES 开放其他写入权(删除、覆盖、重命名) anon_max_rate=0 限制最大传输速率(0 为不限速, 单位: bytes/秒) 实验需求与流程: 注意: 在客户端登录后,默认情况下是可以下载的,但不能上传 实现可以上传 a. anon_upload_enable=YES b. 在/var/ftp/下创建上传目录 c. 修改上传目录的权限或所有者,让匿名用户有写入权限 实现创建目录和文件其他操作 non_mkdir_write_enable=YES 允许创建目录 anon_other_write_enable=YES 开放其他写入权(删除、覆盖、重命名) 用户进入某个文件夹时,弹出相应的说明 a. 在对应目录下创建 .message 文件,并写入相应内容 b. 确认dirmessage_enable=YES是否启用 c. 尝试却换目录查看效果(同一次登录仅提示一次) 实现上传的文件可下载 默认情况下开放上传权限后,上传的文件是无法被下载的,因为文件的其他人位置没有r权限 设置anon_umask=022,可以让上传的文件其他人位置拥有r权限, 然后才能被其他人下载 本地用户实验 目录:/etc/vsftpd/vsftpd.conf 选项 local_enable=YES 是否启用本地系统用户 local_umask=022 本地用户所上传文件的权限掩码 local_root=/var/ftp 设置本地用户的 FTP 根目录 chroot_local_user=YES 是否将用户禁锢在主目录 local_max_rate=0 限制最大传输速率 ftpd_banner=Welcome to blah FTP service 用户登录时显示的欢迎信息 userlist_enable=YES & userlist_deny=YES 禁止user_list 文件中出现的用户名登录 FTP userlist_enable=YES & userlist_deny=NO 仅允许user_list 文件中出现的用户名登录 FTP 禁止 /etc/vsftpd/ftpusers 文件中出现的用户名登录 FTP,权限比 user_list 更高,即时生效 实验需求与流程: 服务端需要创建用户并设置密码(所创建的用户,不需要登录操作系统,仅用来登录VSFTP) useradd -s /sbin/nologin username 将所有用户禁锢在自己的家目录下 注: 默认没有禁锢用户时,客户端登录后可以随意切换目录,查看文件所在位置和文件名 chroot_local_user=YES 开启用户家目录限制, 限制所有用户不能随便切换目录 将部分用户禁锢在自己的家目录下 chroot_list_enable=YES 开启白名单功能,允许白名单中的用户随意切换目录 chroot_list_file=/etc/vsftpd/chroot_list 白名单文件所在位置(需自己创建) 配置文件: /etc/vsftpd/ftpusers 所有写入此文件内的用户名都不允许登录ftp,立刻生效。 修改被动模式数据传输使用端口 pasv_enable=YES pasv_min_port=30000 pasv_max_port=35000 虚拟用户实验 建立 FTP 的虚拟用户的用户数据库文件(在/etc/vsftpd) vim vsftpd.user 该文件名可以随便定义, 文件内容格式: 奇数行用户, 偶数行密码 db_load -T -t hash -f vsftpd.user vsftpd.db 将用户密码的存放文本转化为数据库类型, 并使用 hash 加密 chmod 600 vsftpd.db 修改文件权限为 600,保证其安全性 创建 FTP 虚拟用户的映射用户, 并制定其用户家目录 useradd -d /var/ftproot -s /sbin/nologin virtual 创建 virtual 用户作为 ftp 的虚拟用户的映射用户 建立支持虚拟用户的 PAM 认证文件,添加虚拟用户支持 cp – a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam 使用模板生成自己的认证配置文件, 方便一会调用 编辑新生成的文件 vsftpd.pam (清空原来内容, 添加下列两行) auth required pam_userdb.so db=/etc/vsftpd/vsftpd acco unt required pam_userdb.so db=/etc/vsftpd/vsftpd 在 vsftpd.conf 文件中添加支持配置 修改: pam_service_name=vsftpd.pam 添加: guest_enable=YES guest_username=virtual user_config_dir=/etc/vsftpd/dir 为虚拟用户建立独立的配置文件,启动服务并测试 注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉。 用户可以上传: anon_upload_enable=YES #允许上传文件 用户可以创建目录或文件: anon_mkdir_write_enable=YES #允许创建目录 用户可以修改文件名: anon_upload_enable=YES #允许上传文件(为了覆盖开启的) anon_other_write_enable=YES #允许重名和删除文件、覆盖 注:给映射用户的家目录 设置 o+r 让虚拟用户有读权限
2021年03月16日
241 阅读
0 评论
0 点赞
1
...
4
5
6