一、搭建php-fpm工作方式的LAMP环境,实现wordpress正常访问
搭建Lamp
1、mysql服务的搭建
[root@wujunjie ~]# yum install mariadb-server.x86_64 -y
[root@wujunjie ~]# vim /etc/my.cnf
[mysqld]
innodb_file_per_table=ON #使用单独的表
skip_name_resolve=ON #取消名字解析
[root@wujunjie ~]# mysql_secure_installation #对MySQL数据库进行安全加固
[root@wujunjie ~]# mysql -uroot -predhat #登录数据库
MariaDB [(none)]> GRANT ALL ON *.* to 'text'@'192.168.%.%' IDENTIFIED BY 'redhat'; #授权text账户
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
2. php-fpm服务器的搭建
[root@wujunjie ~]# yum install -y php-mysql.x86_64 php-fpm php-mbstring #安装服务
#php-mysql 连接mysql服务的接口
#php-mbstring 支持多字节的模块
##主配置文件:/etc/php-fpm.conf和/etc/php-fpm.d/*.conf
##环境配置文件:/etc/php.ini, /etc/php.d/*.ini
[root@wujunjie ~]# vim /etc/php-fpm.d/www.conf #配置文件
[www]
listen = 192.168.32.128:9000 #修改监听的端口和IP
listen.backlog = -1 #后援队列,指最大的等待队列,-1表示无限制;
listen.allowed_clients = 192.168.32.128 #授权httpd主机请求
user = apache #监听服务进程的主机,默认以哪个用户身份运行
group = apache
pm = dynamic #定义进程控制器如何生成子进程;有两种方式static和dynamic;
pm.max_children = 50 #最大并发连接数量;
pm.start_servers = 5 #启动时,启动子进程数量;
pm.min_spare_servers = 5 #最少启动空闲子进程数量
pm.max_spare_servers = 35 #最大启动空闲子进程数量;
pm.max_requests = 500 #最大请求数
pm.status_path = /pmstatus #自带的状态输出模块
ping.response = pong #探测返回值
ping.path = /ping #探测服务正常;
php_value[session.save_handler] = files #是否保存php的session及保存格式
php_value[session.save_path] = /var/lib/php/session #保存路径
[root@wujunjie ~]# mkdir -pv /var/lib/php/session #创建目录
[root@wujunjie ~]# chown apache:apache /var/lib/php/session/ #创建指定目录并更改属主属组
[root@wujunjie ~]# systemctl start php-fpm.service #重启服务
[root@wujunjie ~]# ss -tnl #确定服务启动并监听
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6010 *:*
LISTEN 0 128 127.0.0.1:6011 *:*
LISTEN 0 128 192.168.32.128:9000 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 128 ::1:6010 :::*
LISTEN 0 128 ::1:6011 :::*
3、搭建httpd服务
[root@wujunjie ~]# yum install httpd -y #安装服务
[root@wujunjie ~]# httpd -M |grep fcgi #查看模块是否加载
proxy_fcgi_module (shared)
[root@wujunjie ~]# vim /etc/httpd/conf.d/fcgi.conf
Listen 8080
DirectoryIndex index.php
ServerName www.wujunjie.com
DocumentRoot /var/www/html
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.32.128:9000/var/www/html/$1
ProxyPassMatch ^/(ping|pmstatus)$ fcgi://192.168.32.128:9000/$1
options none
Allowoverride None
Require all granted
#####不是虚拟主机参考如下配置
[root@httpd ~]# vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php #设置默认主页为index.php
ProxyRequests off #关闭正向代理
#将以.php结尾的URL代理转发给fcgi://192.168.32.128:9000
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.32.128:9000/var/www/html/$1
ProxyPassMatch ^/(ping|pmstatus)$ fcgi://192.168.32.128:9000/$1
4、在php-fpm服务器上创建编辑index.php 和mysql.php进行测试
[root@wujunjie ~]# vim /var/www/html/index.php
[root@wujunjie ~]# vim /var/www/html/mysql.php
[root@wujunjie ~]# systemctl restart httpd
最后测试访问相应的页面:
wordpress的搭建
[root@wujunjie tmp]# unzip wordpress-4.3.1-zh_CN.zip -d /var/www/html/ #减压wordpress到/var/www/html目录
访问192.168.32.128:8080/wordpress
为wordpress的搭建提供相应的数据库账号及建立相应的数据库:
[root@wujunjie ~]# mysql -uroot -predhat
MariaDB [(none)]> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> GRANT ALL ON wordpress.* TO 'wpuser'@'192.168.%.%' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
点击现在就开始
提交后按照提示完成步骤
二、什么是DML?常用SQL举例,每个命令至少1个例子,最多不超过3个例子
DML – Data Manipulation Language
数据库操作语言:SQL中处理数据库中的数据;其主要命令有SELECT,INSERT,UPDATE,DELETE等
服务器端的命令除了DML,还有DDL(Data Definition Language)数据定义语言;DCL(Data Control Language)数据控制语言;TCL(Transaction Control Language)事务控制语言
- DDL:数据定义语言
DDL是SQL语言的四大功能之一。用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束
- 创建: CREATE
常用命令 | 解释 |
---|---|
CREATE DATABASE | 创建数据库 |
CREATE EVENT | 创建事件调度器 |
CREATE FUNCTION | 创建存储函数 |
CREATE FUNCTION UDF | 创建用户自定义存储函数 |
CREATE INDEX | 创建索引 |
CREATE PROCEDURE | 创建存储过程 |
CREATE SERVER | 创建服务器 |
CREATE TABLE | 创建表 |
CREATE TABLESPACE | 创建表空间 |
CREATE TRIGGER | 创建触发器 |
CREATE USER | 创建用户 |
CREATE VIEW | 创建视图 |
例:
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS testdb ;
MariaDB [(none)]> use testdb;
Database changed
MariaDB [testdb]> CREATE TABLE tbl1 (id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(60) NOT NULL);
Query OK, 0 rows affected (0.02 sec)
- 查看:SHOW
常用命令 | 解释 |
---|---|
SHOW CREATE DATABASE | 查看创建的数据库 |
SHOW CREATE EVENT | 查看创建的事件调度器 |
SHOW CREATE FUNCTION | 查看创建存储函数 |
SHOW CREATE PROCEDURE | 查看创建存储过程 |
SHOW CREATE TABLE | 查看创建的表 |
例:
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb |
| vsftpd |
+--------------------
MariaDB [testdb]> SHOW TABLE STATUS LIKE 'tbl1'\G
*************************** 1. row ***************************
Name: tbl1
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: 1
Create_time: 2018-10-26 15:43:45
Update_time: NULL
Check_time: NULL
Collation: binary
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
- 修改:ALTER
常用命令 | 解释 |
---|---|
ALTER DATABASE | 修改数据库 |
ALTER EVENT | 修改事件调度器 |
ALTER FUNCTION | 修改存储函数 |
ALTER LOGFILE GROUP | 修改日志组 |
ALTER PROCEDURE | 修改存储过程 |
ALTER SERVER | 修改服务器 |
ALTER TABLE | 修改表 |
ALTER TABLESPACE | 修改表空间 |
ALTER VIEW | 修改视图 |
例:
MariaDB [(none)]> ALTER DATABASE testdb CHARACTER SET 'utf8';
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> ALTER DATABASE testdb COLLATE 'binary';
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> DESC tbl1;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| name | varbinary(60) | NO | | NULL | |
+-------+---------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
MariaDB [testdb]> ALTER TABLE tbl1 ADD gender ENUM('F','M') after id;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [testdb]> DESC tbl1;
+--------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| gender | enum('F','M') | YES | | NULL | |
| name | varbinary(60) | NO | | NULL | |
+--------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
- 删除:DROP
常用命令 | 解释 |
---|---|
DROP DATABASE | 删除数据库 |
DROP EVENT | 删除事件调度器 |
DROP FUNCTION | 删除存储函数 |
DROP FUNCTION UDF | 删除用户自定义存储函数 |
DROP INDEX | 删除索引 |
DROP PROCEDURE | 删除存储过程 |
DROP SERVER | 删除服务器 |
DROP TABLE | 删除表 |
DROP TABLESPACE | 删除表空间 |
DROP TRIGGER | 删除触发器 |
DROP USER | 删除用户 |
DROP VIEW | 删除视图 |
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS testdb11;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> DROP DATABASE IF EXISTS testdb11;
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb |
| vsftpd |
+--------------------+
注意:mariadb数据库没有回收站,在生产环境中删除操作很危险;
2.DML:数据操作语言
- 增:
INSERT INTO:
INSERT [INTO] tbl_name [(col1,...)] {VALUES|VALUE} (val1, ...),(...),...
注意:
字符型:引号;
数值型:不能用引号;
例:
MariaDB [testdb]> INSERT INTO tbl1(name,gender) VALUES('GUO JING','M'),('Ding Dian','F');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [testdb]> SELECT * FROM tbl1;
+----+--------+-----------+
| id | gender | name |
+----+--------+-----------+
| 1 | M | GUO JING |
| 2 | F | Ding Dian |
+----+--------+-----------+
2 rows in set (0.00 sec)
- 查:
(1) SELECT * FROM tbl_name;
(2) SELECT col1, col2, ... FROM tbl_name;
显示时,字段可以显示为别名; col_name AS col_alias
(3) SELECT col1, ... FROM tbl_name WHERE clause;
WHERE clause:用于指明挑选条件;
col_name 操作符 value:
age > 30;
操作符(1) :
, <, >=, <=, ==, !=
组合条件:
and 、 or 、not
操作符(2) :
BETWEEN ... AND ...
LIKE 'PATTERN'
通配符:
%:任意长度的任意字符;
_:任意单个字符;
RLIKE 'PATTERN': 正则表达式对字符串做模式匹配;
IS NULL
IS NOT NULL
(4) SELECT col1, ... FROM tbl_name [WHERE clause] ORDER BY col_name, col_name2, ... [ASC|DESC];
ASC: 升序;
DESC: 降序;
例:
MariaDB [testdb]> SELECT * FROM tbl1;
+----+--------+-----------+
| id | gender | name |
+----+--------+-----------+
| 1 | M | GUO JING |
| 2 | F | Ding Dian |
+----+--------+-----------+
2 rows in set (0.00 sec)
MariaDB [testdb]> SELECT id,name FROM tbl1;
+----+-----------+
| id | name |
+----+-----------+
| 1 | GUO JING |
| 2 | Ding Dian |
+----+-----------+
2 rows in set (0.00 sec)
MariaDB [testdb]> SELECT id,gender,name FROM tbl1 WHERE gender='M';
+----+--------+----------+
| id | gender | name |
+----+--------+----------+
| 1 | M | GUO JING |
+----+--------+----------+
1 row in set (0.00 sec)
- 删:
DELETE:
DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
(1) DELETE FROM tbl_name WHERE where_condition
(2) DELETE FROM tbl_name [ORDER BY ...] [LIMIT row_count]
注意:不加WHERE 会将删除整个表
例:
MariaDB [testdb]> SELECT * FROM tbl1;
+----+--------+-----------+
| id | gender | name |
+----+--------+-----------+
| 1 | M | GUO JING |
| 2 | F | Ding Dian |
+----+--------+-----------+
2 rows in set (0.00 sec)
MariaDB [testdb]> DELETE FROM tbl1 WHERE id=2;
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> SELECT * FROM tbl1;
+----+--------+----------+
| id | gender | name |
+----+--------+----------+
| 1 | M | GUO JING |
+----+--------+----------+
1 row in set (0.00 sec)
- 改:
UPDATE:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1=value1 [, col_name2=value2] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
例:
MariaDB [testdb]> UPDATE tbl1 SET gender='F' WHERE id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [testdb]> SELECT * FROM tbl1;
+----+--------+----------+
| id | gender | name |
+----+--------+----------+
| 1 | F | GUO JING |
+----+--------+----------+
1 row in set (0.00 sec)
三、简述ftp的主动和被动模式,并实现基于pam认证的vsftpd
(1)前言
FTP,File transfer Protocl即文件传输协议,是用于在网络中控制文件的双向传输的协议。FTP协议运行在TCP/21和20端口,通常来说21端口是命令端口、20端口是数据端口,但根据FTP的工作模式的不同,数据端口也有可能跟着改变。
(2)ftp在服务器端的工作模式
- 主动模式(PORT):服务器向客户端发起数据传输请求;服务器端口是固定的;
如上图所示,在主动模式下,FTP客户端从任意端口5150(端口号>1023)发起一个FTP请求,并携带自己监听的端口号5151(发送的端口号+1=监听端口号);随后服务器返回确认,然后从服务器本地的20端口主动发起连接请求到客户端的监听端口5151,最后客户端返回确认。
这种模式缺点在于服务器带客户端的FTP连接很容易被传输过程中的路由器、防火墙所影响或拦截。 - 被动模式(PASV):客户端向服务器端发起数据传输请求;服务器端口:半随机,是随机的;
为了主动模式所面临的服务器到客户端的连接会被拦截阻塞的问题,FTP发展出了被动模式。在被动模式中,命令连接和数据连接都由客户端来发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙拦截的问题。
如上图所示,客户端用随机命令端口5150向服务器的21命令端口发送一个PASV请求,然后服务器返回数据端口3267,告诉客户端我在哪个端口监听数据连接。然后客户端向服务器的监听端口3268发起数据连接,最后服务器回复确认ok。
(3)配置文件及参数介绍
主程序:/usr/sbin/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
数据根目录:/var/ftp
Systemd Unit File :/usr/lib/systemd/systemd/vsftpd.service
禁止登陆用户列表:/etc/vsftpd/ftpusers
用户列表/etc/vsftpd/user_list
默认情况下,vsftpd的主配置文件没有注释的参数及解析如下:
anonymous_enable=YES #是否允许匿名用户访问
local_enable=YES #是否允许本地用户登录FPT
write_enable=YES #是否允许写入权限
local_umask=022 #本地用户上传文件的umask值
dirmessage_enable=YES #是否在用户进入某个目录时,会显示该目录需要注意的内容
xferlog_enable=YES #是否让FTP服务器记录上传下载的情况
connect_from_port_20=YES #即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。
xferlog_std_format=YES #是否将记录的上传下载情况写在xferlog_file所指定的文件中
listen=NO #是否以独立运行的方式监听服务
listen_ipv6=YES #是否支持ipv6
pam_service_name=vsftpd #列出与vsftpd相关的pam文件
userlist_enable=YES #是否启用禁止登录用户名单
tcp_wrappers=YES #是否支持tcp_wrappers
除了默认使用的参数外,主配置文件还可以设置以下参数:
定义匿名用户的ftp共享权限:
anon_world_readable_only =YES #是否全局可读
anon_upload_enable=NO #是否允许上传文件,仅能上传文件不能创建目录
anon_mkdir_write_enable=NO #是否允许创建目录
anon_other_write_enable=NO #是否删除文件、删除目录
anon_umask=077 #匿名用户的umask
定义系统用户的ftp权限:
local_enable=YES #允许本地用户访问(/etc/passwd中的用户)
write_enable=YES #允许写入权限,包括修改,删除
local_umask=022 #定义本地用户上传的文件的umask
chroot_local_user=YES #禁锢所有本地用户于其家目录;需事先去除用户对家目录的写权限;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #禁锢列表中文件存在的用户于其家目录中;需事先去除用户对其家目录的写权限;
修改匿名用户上传文件的属主;
chown_uploads:是否修改匿名用户上传的文件默认的属主属组,默认为对应的匿名用户所映射的ftp服务器上的用户;
chown_username:启用chown_uploads指令时,将文件属性修改为此指令指定的用户;默认为root;即修改文件属主;
chown_upload_mode:设定匿名用户上传文件的权限;默认为600;
控制可登陆vsftpd服务的用户列表:
userlist_enable=YES #启用/etc/vsftpd/user_list文件来控制可登陆用户;
userlist_deny=NO # NO意味着只允许/etc/vsftpd/user_list文件里面的用户访问FTP,YES相反
数据传输日志:
xferlog_enable 是否启用传输日志
xferlog_std_format=NO 是否启用标准日志格式,建议关闭
xferlog_file=/var/log/xferlog 日志文件路径 匿名服务器时,建议关闭
上传下载速率:
anon_max_rate=0 #匿名用户的最大上传下载速率,0表示无限制
local_max_rate=0 #本地用户的最大上传下载速率,0表示无限制
并发连接数限制:
max_clients=2000 #standalone下最大的并发连接数
max_per_ip=50 #设置单个IP的最大连接数
(4)配置pam_mysql认证vsftp虚拟用户
- mysql服务器安装及设置
#清空防火墙,关闭selinux
[root@132 ~]# iptables -F
[root@132 ~]# setenforce 0
[root@132 ~]# getenforce
Permissive
#安装mariadb服务
[root@132 ~]# yum install mariadb-server.x86_64 -y
#编辑配置文件
[root@132 ~]# vim /etc/my.cnf
[mysqld]
skip_name_resolve=ON #添加
innodb_file_per_table=ON #添加
[root@132 ~]#systemctl start mariadb.service
[root@132 ~]# systemctl enable mariadb.service
[root@132 ~]# mysql_secure_installation #安全加固
[root@132 ~]# mysql -uroot -predhat
MariaDB [(none)]> CREATE DATABASE vsftpd;
MariaDB [(none)]> use vsftpd;
MariaDB [vsftpd]> GRANT SELECT ON vsftpd.* TO 'vsftp'@'192.168.32.%' IDENTIFIED BY 'redhat';
MariaDB [vsftpd]> FLUSH PRIVILEGES;
MariaDB [vsftpd]> CREATE TABLE users (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);#创建users表,id列为无符号整型,该列值不可以为空,并不可以重复,而且自增;
MariaDB [vsftpd]> INSERT INTO users(name,password) VALUES ('test1',password('123')),('test2',password('456'));#插入test1和test2用户名密码
MariaDB [vsftpd]> select * from users;
+----+-------+-------------------------------------------+
| id | name | password |
+----+-------+-------------------------------------------+
| 1 | test1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 2 | test2 | *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
+----+-------+-------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [vsftpd]> exit
- ftp服务器安装及设置
#清空防火墙,关闭selinux
[root@128 ~]# setenforce 0
[root@128 ~]# iptables -F
[root@128 ~]# yum groupinstall -y "Development Tools" "Server PlatformDevelopment" #安装包组
[root@128 ~]# yum install vsftpd ftp wget -y #安装vsftp、wget、ftp客户端
[root@128 ~]# yum install mariadb-devel pam-devel openssl-devel -y #安装相关扩展
[root@128 ~]# tar -xf pam_mysql-0.7RC1.tar.gz #减压
[root@128 ~]# cd pam_mysql-0.7RC1/ #编译安装
[root@128 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
[root@128 pam_mysql-0.7RC1]# make && make install
[root@128 ~]# ll /lib64/security/ #检验安装
-rwxr-xr-x. 1 root root 882 Oct 26 10:46 pam_mysql.la
-rwxr-xr-x. 1 root root 141680 Oct 26 10:46 pam_mysql.so
[root@128 ~]# vim /etc/pam.d/vsftpd.mysal #创建pam认证
auth required /usr/lib64/security/pam_mysql.so user=vsftp passwd=redhat host=192.168.32.132 db=v
sftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vsftp passwd=redhat host=192.168.32.132 d
b=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
配置字段说明:
auth 表示认证;
required 表示认证要通过;
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数;
user=vsftpd为 登录mysql的用户;
passwd=redhat 登录mysql的的密码;
host=192.168.32.132 在mysql中定义的允许连接的主机名或ip地址;
db=vsftpd 连接msyql的哪一个库;
table=users 连接库里的哪一个表;
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密;
#创建系统用户用来作为映射虚拟用户时使用
[root@128 ~]# useradd -s /sbin/nologin -d /ftproot vuser
#确保用户的家目录,让其它远程访问的用户能读、执行权限,这样才能cd进此目录;
[root@128 ~]# chmod go+rw /ftproot/
[root@128 ~]# chmod u-w /ftproot/
#配置vsftpd
[root@128 vsftpd]# vim /etc/vsftpd/vsftpd.conf
………………..
pam_service_name=vsftpd.mysal
guest_enable=YES
guest_username=vuser
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusrs_conf
#配置虚拟用户具有不同的访问权限:
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
[root@128 ~]# mkdir /etc/vsftpd/vusrs_conf
[root@128 ~]# cd /etc/vsftpd/vusrs_conf/
[root@128 vusrs_conf]# vim test1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@128 vusrs_conf]# vim test2
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
[root@128 ~]# systemctl start vsftpd #启动
- 在客户端测试
[root@wujunjie6 ~]# yum install ftp -y #安装ftp
[root@wujunjie6 ~]# ftp 192.168.32.128
Connected to 192.168.32.128 (192.168.32.128).
220 (vsFTPd 3.0.2)
Name (192.168.32.128:root): test1 #测试test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> lcd /etc
Local directory now /etc
ftp> put issue #上传成功
local: issue remote: issue
227 Entering Passive Mode (192,168,32,128,24,224).
150 Ok to send data.
226 Transfer complete.
47 bytes sent in 0.000194 secs (242.27 Kbytes/sec)
ftp> mkdir test111 #创建成功
257 "/upload/test111" created
ftp> rm test111 #删除成功
250 Remove directory operation successful.
[root@wujunjie6 ~]# ftp 192.168.32.128
Connected to 192.168.32.128 (192.168.32.128).
220 (vsFTPd 3.0.2)
Name (192.168.32.128:root): test2 测试test2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> lcd /etc
Local directory now /etc
ftp> mkdir 111 #创建拒绝
550 Permission denied.
ftp> put issue #上传拒绝
local: issue remote: issue
227 Entering Passive Mode (192,168,32,128,24,175).
550 Permission denied.
四、简述NFS服务原理及配置
1.简介
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样,也就是说客户端PC可以挂载NFS服务器所提供的目录并且挂载之后这个目录看起来如同本地的磁盘分区一样,可以使用cp、cd、mv、rm及df等与磁盘相关的命令。
- NFS服务的优缺点
优点:
节省本地存储空间,将常用的数据存放在一台可以通过网络访问的服务器上
简单容易上手
方便部署非常快速,维护十分简单
缺点:
容易发生单点故障,需要做备份处理
在高并发环境中效率性能有限
客户端没有认证机制,数据通过明文传输,缺乏安全性
对数据的完整性不做验证
多台机器挂载NFS服务器时,连接管理维护比较麻烦 - NFS工作原理介绍
因为NFS的各项功能都需要向RPC服务注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号、PID、监听地址等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端口。
也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。 - NFS服务的配置
[root@128 ~]# yum install nfs-utils.x86_64 -y
[root@128 ~]# rpm -ql nfs-utils
其中:
/etc/exports.d 定义要导出的文件系统
/sbin/mount.nfs 支持nfs文件系统的mount命令
/sbin/mount.nfs4
/sbin/rpc.statd 保存文件状态;
/sbin/umount.nfs 支持nfs文件系统的umount命令
/usr/sbin/rpc.mountd
/usr/sbin/rpc.gssd 负责安全
/usr/sbin/rpc.idmapd 负责id映射
/usr/sbin/rpcdebug 实现rpc的诊断工具
/usr/lib/systemd/system/nfs-idmap.service 完成ID映射的服务
/usr/sbin/showmount 查看共享的服务
/usr/lib/systemd/system/nfs.service 服务
配置文件:/etc/exports或/etc/exports.d/*
/PATH/TO/SOME_DIR clients1(export_options, ...) clients2(export_options, ...)
clients:
single host:ipv4, ipv6, FQDN;
network:address/netmask, 支持长短格式的掩码;
wildcards:主机名通配,例如:.magedu.com;
netgroups:NIS域内的主机组;@group_name;
anonymous:使用通配所有主机;
而export_options的常见参数可以分为以下两类;其它可用参数可通过命令man exports查看
General Options:
ro:客户端挂载后,其权限为只读,默认选项;
rw:读写权限;
sync:同时将数据写入到内存与硬盘中;
async:异步,优先将数据保存到内存,然后再写入硬盘;
Secure:要求请求源的端口小于1024;
User ID Mapping:
root_squash:当NFS客户端使用root用户访问时,映射到NFS服务器的匿名用户;
no_root_squash:当NFS客户端使用root用户访问时,映射到NFS服务器的root用户;
all_squash:全部用户都映射为服务器端的匿名用户;
anonuid=UID:将客户端登录用户映射为此处指定的用户uid;
anongid=GID:将客户端登录用户映射为此处指定的用户gid;
实例
nfs服务端配置
[root@128 ~]# mkdir /data/text -pv #创建共享目录
[root@128 ~]# vim /data/text/111 #目录下建一个测试文件
12131312
[root@128 ~]# vim /etc/exports #编辑配置文件
/data/text 192.168.32.132(rw,sync,root_squash)
[root@128 ~]# systemctl start rpcbind
[root@128 ~]# systemctl start nfs-server.service
客户端挂载共享目录
[root@www ~]# showmount -e 192.168.32.128 #查看共享目录
Export list for 192.168.32.128:
/data/text 192.168.32.132
[root@www ~]# mount -t nfs 192.168.32.128:/data/text /mnt #挂载
[root@www ~]# cd /mnt/
[root@www mnt]# touch 11
touch: cannot touch '11': Permission denied #有读权限,无写权限
[root@www mnt]# cat 111
12131312
通过上述测试发现无法在挂载的共享目录下创建文件,明明NFS服务配置文件中有rw权限。其实这是因为root_squash参数导致的,因为此时测试客户端的登录账号为root,那么在访问NFS共享目录的时候,因此root_squash参数,导致权限被压缩为nobody权限,自然无法对该目录进行写入操作。
此时只需要对NFS的配置文件进行修改,然后重新导出NFS目录即可:
[root@128 ~]# vim /etc/exports #服务端配置
/data/text 192.168.32.132(rw,sync,no_root_squash)
[root@128 ~]# exportfs -arv
exporting 192.168.32.132:/data/text
[root@www mnt]# touch 1212 #返回测试,发现可创建
[root@www mnt]# ll
total 4
-rw-r--r--. 1 root root 9 Oct 26 2018 111
-rw-r--r--. 1 root root 0 Oct 26 2018 1212
5、指定NFS服务的映射用户
将客户端访问共享文件的登录用户映射为NFS服务器上的root账号,有人可能会觉得这样不安全,而其实我们也可以指定要映射到NFS服务器的用户。
[root@128 ~]# useradd nfsuser -s /sbin/nologin -u 1500 #创建映射用户
[root@128 ~]# id nfsuser
uid=1500(nfsuser) gid=1500(nfsuser) groups=1500(nfsuser)
[root@128 ~]# chown nfsuser:nfsuser /data/text/ #修改NFS共享目录的属主和属组为nfsuser
[root@128 ~]# ll -d /data/text/
drwxr-xr-x. 2 nfsuser nfsuser 4096 Oct 26 16:46 /data/text/
[root@128 ~]# vim /etc/exports
/data/text 192.168.32.132(rw,sync,all_squash,anonuid=1500,anongid=1500) #修改添加删除all_squash和指定匿名映射用户的uid和gid
[root@128 ~]# exportfs -arv #重新输出文件系统配置信息
exporting 192.168.32.132:/data/text
此时在测试主机上测试:
[root@www mnt]# touch 1234
[root@www mnt]# ll
total 4
-rw-r--r--. 1 root root 9 Oct 26 2018 111
-rw-r--r--. 1 root root 0 Oct 26 2018 1212
-rw-r--r--. 1 1500 1500 0 Oct 27 2018 1234 #生成的文件的uid和gid与NFS服务映射用户的相一致
[root@www mnt]# su – wujunjie
[wujunjie@www mnt]$ touch 2345
[wujunjie@www mnt]$ ll
total 4
-rw-r--r--. 1 root root 9 Oct 26 2018 111
-rw-r--r--. 1 root root 0 Oct 26 2018 1212
-rw-r--r--. 1 1500 1500 0 Oct 27 2018 1234
-rw-rw-r--. 1 1500 1500 0 Oct 27 2018 2345 #生成的文件的uid和gid与NFS服务映射用户的相一致
五、简述samba服务,并实现samba配置
1.简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。例如Windows和Linux,Windows和Unix等,这时可以使用sanba服务器来解决这个问题。
功能:
文件系统共享;
打印机共享;
支持NetBIOS协议:可使Linux主机出现在window是中的网络邻居上;
而由于NETBIOS协议对于windows来讲监听TCP的139端口和UDP的137,138端口 ,所以nmbd在linux上模拟出了udp的137和138端口,以及tcp的139端口,smdb上模拟出 tcp的445端口。而SAMBA将在Linux上同时监听这4个端口。
- samba服务的程序及配置文件
[root@128 ~]# yum install samba -y
[root@128 ~]# rpm -ql samba
/usr/sbin/nmbd 实现名称服务
/usr/sbin/smbd 实现文件共享服务
/etc/pam.d/samba 借助于pam实现认证
/usr/lib/systemd/system/nmb.service 启动的服务
/usr/lib/systemd/system/smb.service 启动的服务
[root@128 ~]# rpm -ql samba-common
其中:
/etc/samba/lmhosts #完成NetBIOS主机名称映射
/etc/samba/smb.conf #客户端与服务端通用的主配置文件
对于/etc/samba/smb.conf文件常见参数及分类如下:
[global]
workgroup = MYGROUP #工作组名
server string = Samba Server Version %v #服务器信息介绍
netbios name = MYSERVER #用netbios名来指定服务
interfaces = [interface1 interface2...|address1 address2...] #用于让samba服务监听多个网络接口或IP
hosts allow = [address1 address2...] #指定允许访问的主机IP
log file = /var/log/samba/log.%m #指定日志存放路径,%m为来访的主机名
max log size = 50 #定义日志文件最大容量为50K
security=user #设置samba服务的安全认证方式为user
设定安全级别:取值有四个;
share:匿名共享;
user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是系统用户,但密码非为/etc/shadow中的密码,而由samba自行管理的文件,其密码文件的格式由passdb backend进行定义;
server:由第三方服务进行统一认证;
domain:使用DC进行认证;基于kerberos协议进行;
passdb backend=tdbsam #定义用户后台的类型为tdbsam,其他类型还有smbpasswd、ldapsam
load prints = yes # #设置是否共享打印机
cups options = raw #打印机选项
共享文件系统配置
[SHARED_NAME]
有三类:
[homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录;
[printers]:定义打印服务;
[shared_fs]:定义共享的文件系统;
常用指令:
comment:注释信息;
path:当前共享所映射的文件系统路径;
browseable:是否可浏览,指是否可被用户查看;
guest ok:是否允许来宾账号访问;
public:是否公开所有用户;
writable:是否可写;
read only:是否为只读;
write list:拥有写权限的用户列表;
用户名
@组名
3.samba服务安装配置
#首先清空防火墙,关闭selinux
[root@128 ~]# iptables -F
[root@128 ~]# setenforce 0
[root@128 ~]# mkdir /magedu #创建共享文件
#编辑配置文件
[root@128 ~]# vim /etc/samba/smb.conf
#添加以下配置
[magedu]
comment=magedu
path=/magedu
guest ok=yes
read only=no
[root@128 ~]# testparm #校验配置文件是否正确
samba服务默认的验证模式为user,因此我们还需要创建用户的数据库。
- 创建samba用户数据库
samba帐号必须要存在于Linux系统中(/etc/passwd),但其密码的却是单独维护的。创建samba用户数据库需要使用命令pdbedit,pdbedit命令是用于管理smb服务的账号信息数据库其用法格式为:
pdbedit [options] account
常用选项有:
-a USERNAME:创建samba用户;
-x:删除samba用户;
-L:列出samba用户列表;
-Lv:列出用户详细信息列表;
除了pdbedit命令之外,我们也可以使用smbpasswd命令来管理创建samba用户,其语法格式如下:
smbpasswd [options] USERNAME
常用选项有:
-a:添加账号
-x:删除账号
-d:禁用账号
-e:启用账号
[root@128 ~]# useradd samba
[root@128 ~]# pdbedit -a samba
[root@128 ~]# pdbedit -a samba
new password:
retype new password:
Unix username: samba
NT username:
Account Flags: [U
……………………………….
[root@128 ~]# systemctl start smb
- 在Windows系统上测试
由上图所示,samba用户登录后无法在magedu创建文件,这是因为magedu目录的属主和属组为root,其他用户无写权限
[root@128 ~]# chown :samba /magedu/
[root@128 ~]# chmod g+w /magedu/
[root@128 ~]# ll -d /magedu/
drwxrwxr-x. 2 root samba 4096 Oct 27 12:41 /magedu/
[root@128 ~]# systemctl restart samba
再次测试,创建成功
- 在Linux系统上挂载samba共享目录:
[root@www ~]# mount -t cifs //192.168.32.128/magedu /smb -o username=samba,password=redhat
[root@www ~]# mount
…………………………
//192.168.32.128/magedu on /smb type cifs (rw,relatime,vers=1.0,cache=strict,username=samba,domain=128,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.32.128,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=65536,echo_interval=60,actimeo=1)
[root@www smb]# [root@www smb]# touch 121
[root@www smb]# ll
total 0
-rw-r--r--. 1 2004 2004 0 Oct 26 14:16 121
drwxr-xr-x. 2 2004 2004 0 Oct 27 2018 qqq
- 在linux系统中访问samba文件系统还可以使用smbclient命令工具
[root@www ~]# yum install samba-client -y
[root@www ~]# smbclient -L 192.168.32.128 -U samba
Enter samba's password:
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
magedu Disk magedu #可看到共享文件
IPC$ IPC IPC Service (Samba 4.4.4)
samba Disk Home Directories
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
Server Comment
--------- -------
128 Samba 4.4.4
Workgroup Master
--------- -------
SAMBA 128
[root@www ~]# smbclient //192.168.32.128/magedu -U samba
Enter samba's password:
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
smb: \> lcd /etc/
smb: \> put fstab
putting file fstab as \fstab (37.6 kb/s) (average 37.6 kb/s) #上传成功
smb: \> ls
. D 0 Sat Oct 27 14:39:17 2018
.. DR 0 Sat Oct 27 12:41:18 2018
fstab A 501 Sat Oct 27 14:39:17 2018
qqq D 0 Sat Oct 27 14:07:08 2018
smb: \> rm fstab #删除
smb: \> ls
. D 0 Sat Oct 27 14:40:53 2018
.. DR 0 Sat Oct 27 12:41:18 2018
qqq D 0 Sat Oct 27 14:07:08 2018