LAMP搭建,SQL举例及ftp,NFS和samba配置

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

centos6对于hph-fpm需要自行编译安装,centos7则源生支持,以下使用一台虚拟机来搭建LAMP环境,并实现wordpress功能.步骤如下:
1. 安装mariadb服务并配置文件:

  • 安装服务:
[root@localhost ~]# yum -y install mariadb-server.x86_64 
....
Dependency Installed:
  mariadb.x86_64 1:5.5.56-2.el7          perl-DBD-MySQL.x86_64 0:4.023-5.el7         

Complete!

  • 配置文件:/etc/my.cnf.d/server.cnf
[root@localhost ~]# vim /etc/my.cnf.d/server.cnf 

#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#

# this is read by the standalone daemon and embedded servers
[server]

# this is only for the mysqld standalone daemon
[mysqld]

# this is only for embedded server
[embedded]
skip_name_resove=ON  #加入这个,取消名字解析
innodb_file_per_table=ON  #innodb使用单独的表
# This group is only read by MariaDB-5.5 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mysqld-5.5]

"/etc/my.cnf.d/server.cnf" 29L, 788C          

  • 检验服务:
[root@localhost ~]# systemctl start mariadb.service 

[root@localhost ~]# 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      50             *:3306                       *:*      #3306使命服务启动了   
LISTEN      0      128           :::111                       :::*                  
LISTEN      0      128           :::80                        :::*                  
LISTEN      0      128           :::22                        :::*                  
LISTEN      0      128          ::1:631                       :::*                  
LISTEN      0      100          ::1:25                        :::*                  
[root@localhost ~]# vim /etc/my.cnf.d/server.cnf 

  • 服务初始化启动选项:
[root@localhost ~]# mysql_secure_installation 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y  #是否设置root用户
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y  #是否移除虚拟用户
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n   #是否运行root远程登录
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] n  #是否删除test表
 ... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y  #是否重新加载基本表
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!   #出现提示说明配置完成.

2. 安装php-fpm:

  • 安装服务:
[root@localhost ~]# yum -y install php-mysql php-fpm.x86_64 php-mbstring.x86_64 
......

Installed:
  php-fpm.x86_64 0:5.4.16-43.el7_4.1      php-mbstring.x86_64 0:5.4.16-43.el7_4.1   
  php-mysql.x86_64 0:5.4.16-43.el7_4.1   

Dependency Installed:
  libzip.x86_64 0:0.10.1-8.el7            php-common.x86_64 0:5.4.16-43.el7_4.1     
  php-pdo.x86_64 0:5.4.16-43.el7_4.1     

Complete!

#php-mysql   连接mysql服务的接口
#php-mbstring.x86_64  支持多字节的模块

  • 配置文件:
    主配置文件:/etc/php-fpm.conf和/etc/php-fpm.d/.conf
    环境配置文件:/etc/php.ini, /etc/php.d/
    .ini
[root@localhost php-fpm.d]# vim www.conf

; Start a new pool named 'www'.
[www]

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000

; Set listen(2) backlog. A value of '-1' means unlimited.
; Default Value: -1
;listen.backlog = -1  #等待请求的队列,-1表示无限制

; List of ipv4 addresses of FastCGI clients which are allowed to connect.
; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
; must be separated by a comma. If this value is left blank, connections will be
; accepted from any ip address.
; Default Value: any  # ';'号表示注释
listen.allowed_clients = 127.0.0.1  #运行访问的客户端地址
...省略...
ping.path = /ping  #把这个启动起来

; This directive may be used to customize the response of a ping request. The
; response is formatted as text/plain with a 200 response code.
; Default Value: pong
ping.response = pong  #同上
...省略...
; Set session path to a directory owned by process user
php_value[session.save_handler] = files  #设置会话文件及下面的路径
php_value[session.save_path] = /var/lib/php/session  #默认不存在,创建之,用户组改成使用该模块的系统用户apache

------------分割线------------

[root@localhost php-fpm.d]# mkdir /var/lib/php/session -pv
mkdir: created directory ‘/var/lib/php/session’
[root@localhost php-fpm.d]# chown apache:apache /var/lib/php/session/
[root@localhost php-fpm.d]# 

  • 启动服务:
[root@localhost php-fpm.d]# systemctl start php-fpm.service 
[root@localhost php-fpm.d]# 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:9000                       *:*        #说明服务已经启动并监听       
LISTEN      0      50             *:3306                       *:*                  
LISTEN      0      128           :::111                       :::*                  
LISTEN      0      128           :::80                        :::*                  
LISTEN      0      128           :::22                        :::*                  
LISTEN      0      128          ::1:631                       :::*                  
LISTEN      0      100          ::1:25                        :::*    

3. 安装httpd:

  • 安装服务:
[root@localhost php-fpm.d]# yum -y install httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: centos.ustc.edu.cn
Package httpd-2.4.6-67.el7.centos.6.x86_64 already installed and latest version
Nothing to do

  • 查看fgci模块:
[root@localhost php-fpm.d]# httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_anon_module (shared)
 authn_core_module (shared)
 authn_dbd_module (shared)
 authn_dbm_module (shared)
 authn_file_module (shared)
 authn_socache_module (shared)
 authz_core_module (shared)
 authz_dbd_module (shared)
 authz_dbm_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_owner_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)
 data_module (shared)
 dbd_module (shared)
 deflate_module (shared)
 dir_module (shared)
 dumpio_module (shared)
 echo_module (shared)
 env_module (shared)
 expires_module (shared)
 ext_filter_module (shared)
 filter_module (shared)
 headers_module (shared)
 include_module (shared)
 info_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 remoteip_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 slotmem_shm_module (shared)
 socache_dbm_module (shared)
 socache_memcache_module (shared)
 socache_shmcb_module (shared)
 status_module (shared)
 substitute_module (shared)
 suexec_module (shared)
 unique_id_module (shared)
 unixd_module (shared)
 userdir_module (shared)
 version_module (shared)
 vhost_alias_module (shared)
 dav_module (shared)
 dav_fs_module (shared)
 dav_lock_module (shared)
 lua_module (shared)
 mpm_prefork_module (shared)
 proxy_module (shared)
 lbmethod_bybusyness_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_heartbeat_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)   #没有这个模块无法与客户端通信的
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)
 proxy_wstunnel_module (shared)
 systemd_module (shared)
 cgi_module (shared)

  • 配置文件:添加/etc/httpd/conf.d/fcgi.conf
[root@localhost php-fpm.d]# mkdir -pv /date/www/html
mkdir: created directory ‘/date’
mkdir: created directory ‘/date/www’
mkdir: created directory ‘/date/www/html’

----------------分割线----------------

[root@localhost php-fpm.d]# vim /etc/httpd/conf.d/fcgi.conf

DirectoryIndex index.php  #默认主页
<VirtualHost *:80>
        ServerName www.magedu.net
        DocumentRoot /date/www/html  #要创建这个目录
        ProxyRequests Off    #关闭正向代理
        ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/date/www/html/$1   #与上面的目录路径一致
#如果用户请求的匹配.php结尾的文件就反代到/var/www/html/$1 目录下.$1代表(.*\.php)
        <Directory "/date/www/html">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
</VirtualHost>
~                                                                                    
~                                                                                    
~                                                                                    
~                                                                                    
~                                                                                    
~                                                                                    
~                                                                                    
~                                                                                    
~                                                                                    
~                                                                                    
"/etc/httpd/conf.d/fcgi.conf" 12L, 313C  
:wq

----------------分割线----------------

[root@localhost php-fpm.d]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK

  • 创建测试页面:/date/www/html/index.php
[root@localhost php-fpm.d]# vim /date/www/html/index.php

<?php
        phpinfo();
?>
~                                                                                    
~       
:wq
php-fpm安装成功.png

php-fpm安装成功,图中显示为FPM格式的php

4. 安装wordpress:

  • 下载解压wordpress:
[root@localhost php-fpm.d]# tar xf /root/wordpress-4.9.4-zh_CN.tar.gz 
[root@localhost php-fpm.d]# ls /root/
anaconda-ks.cfg  epel-7.repo           Pictures   wordpress-4.9.4-zh_CN.tar.gz
Desktop          File Explorer.lnk     Public     wordpress-4.9.4-zh_CN.zip
Documents        initial-setup-ks.cfg  Templates
Downloads        Music                 Videos

  • 删除主页文件,将wordpress目录下在文件cp到主页目录中
[root@localhost php-fpm.d]# rm -rf /date/www/html/index.php 

[root@localhost php-fpm.d]# cp -a wordpress/* /date/www/html/

wordpress页面.png

出现这个页面就成功了一般,按页面提示来操作即可以

  • 设置数据库权限并创建数据库:
[root@localhost php-fpm.d]# mysql -uroot -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input st

MariaDB [(none)]> GRANT ALL ON wordpress.* TO 'wpuser'@'%' IDENTIFIED BY 'wppass';
Query OK, 0 rows affected (0.42 sec)
MariaDB [(none)]> CREATE DATABASE wordpress;   #创建wordpress数据库
Query OK, 1 row affected (0.00 sec)

*复制httpd主页目录下wp-config-sample.php并配置

[root@localhost html]# cp wp-config-sample.php wp-config.php  #配置文件名称不要改其他的,会报错

[root@localhost html]# vim wp-config.php   
/**#@+
 * 身份认证密钥与盐。
 *
 * 修改为任意独一无二的字串!
 * 或者直接访问{@link https://api.wordpress.org/secret-key/1.1/salt/
 * WordPress.org密钥生成服务}
 * 任何修改都会导致所有cookies失效,所有用户将必须重新登录。
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

/**#@-*/

/**
 * WordPress数据表前缀。
 *
 * 如果您有在同一数据库内安装多个WordPress的需求,请为每个WordPress设置
 * 不同的数据表前缀。前缀名只能为数字、字母加下划线。
 */
$table_prefix  = 'wp_';
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
 *
 * @package WordPress
 */

// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wordpress');     #改为数据库的名称

/** MySQL数据库用户名 */
define('DB_USER', 'wpuser');    #改为数据库用户名

/** MySQL数据库密码 */
define('DB_PASSWORD', 'wppass');    #数据库的密码

/** MySQL主机 */
define('DB_HOST', 'localhost');   #允许访问的主机地址

/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');   

/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');

/**#@+
 * 身份认证密钥与盐。
 *
...省略...
:wq

*刷新页面登录wordpress:


wordpress页面.png

点击现在就开始

出现安装界面.png

点击安装wordpress

wordpress安装成功.png

点击登陆

wordpress用户登录.png

填写登陆信息并登录

wordpress的界面.png

最终登陆界面,大功告成.

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

DML:数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE、SELECT,分别代表插入、更新、删除与查询,是开发以数据为中心的应用程序必定会使用到的指令
获取命令帮助:

mysql> help KEYWORD

MariaDB [(none)]> help SHOW
Name: 'SHOW'
Description:
SHOW has many forms that provide information about databases, tables,
columns, or status information about the server. This section describes
those following:

SHOW AUTHORS
SHOW {BINARY | MASTER} LOGS
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW CHARACTER SET [like_or_where]
SHOW COLLATION [like_or_where]
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]
SHOW CONTRIBUTORS
SHOW CREATE DATABASE db_name
SHOW CREATE EVENT event_name
SHOW CREATE FUNCTION func_name
...省略...
  • INSERT :插入

      INSERT  [INTO]  tbl_name  [(col1,...)]  {VALUES|VALUE}  (val1, ...),(...),...
      一个()表示一行,tbl_name如果不给出则没一个表都插入
      注意:
          字符型:引号
          数值型:不能用引号
    

MariaDB [test]> INSERT INTO mage(id,name) VALUES(2,'hoho'); 
Query OK, 1 row affected (0.32 sec)

MariaDB [test]> INSERT INTO mage(id,name) VALUES(3,'maha'); 
Query OK, 1 row affected (0.01 sec)

  • SELECT:查询

      (1) SELECT  *  FROM  tbl_name;  #从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 [test]> SELECT * FROM mage;
+------+------+
| id   | name |
+------+------+
|    1 | haha |
|    2 | hoho |
|    3 | maha |
|    4 | maha |
+------+------+
4 rows in set (0.00 sec)

--------------分割线--------------

MariaDB [test]> SELECT id FROM mage WHERE id < 2;
+------+
| id   |
+------+
|    1 |
+------+
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]
    
MariaDB [test]> DELETE FROM mage WHERE id = 1;
Query OK, 1 row affected (0.34 sec)

MariaDB [test]> SELECT * FROM mage;
+------+------+
| id   | name |
+------+------+
|    2 | hoho |
|    3 | maha |
|    4 | maha |
+------+------+
3 rows in set (0.00 sec)

--------------分割线--------------

MariaDB [test]> DELETE FROM mage WHERE name = 'maha';
Query OK, 2 rows affected (0.33 sec)

MariaDB [test]> SELECT * FROM mage;
+------+------+
| id   | name |
+------+------+
|    2 | hoho |
+------+------+
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 [test]> SELECT * FROM mage;
+------+------+
| id   | name |
+------+------+
|    2 | hoho |
|    2 | hoho |
|    3 | maha |
|    1 | haha |
+------+------+
4 rows in set (0.00 sec)

MariaDB [test]> UPDATE mage SET id=4 WHERE name = 'hoho';
Query OK, 2 rows affected (0.29 sec)
Rows matched: 2  Changed: 2  Warnings: 0

MariaDB [test]> SELECT * FROM mage;
+------+------+
| id   | name |
+------+------+
|    4 | hoho |
|    4 | hoho |
|    3 | maha |
|    1 | haha |
+------+------+
4 rows in set (0.00 sec)

--------------分割线--------------

MariaDB [test]> SELECT * FROM mage;
+------+------+
| id   | name |
+------+------+
|    3 | maha |
|    1 | haha |
+------+------+
2 rows in set (0.00 sec)

MariaDB [test]> UPDATE mage SET name='lalala' WHERE id < 2;
Query OK, 1 row affected (0.29 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [test]> SELECT * FROM mage;
+------+--------+
| id   | name   |
+------+--------+
|    3 | maha   |
|    1 | lalala |
+------+--------+
2 rows in set (0.01 sec)

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

  • 主动模式:

数据传输连接由服务器主动创建,客户端先随机一个端口N,用这个的端口连接服务器的21端口来完成命令连接的建立,之后服务器以tcp的20端口主动连接客户端的N+1端口来进行数据传输连接.

  • 被动模式:

数据传输连接由客户端的某个随机端口去连接服务器的某个端口,命令连接的方式与主动连接方式一致,完成连接之后服务器会告诉客户端连接的端口M,于是客户端的N+1端口连接服务器的M端口来进行数据传输的连接.

  • ftp的一些常用配置信息:
    配置文件路径在:/etc/vsftpd/vsftpd.conf

          匿名用户:
          anonymous_enable=YES   #是否开启匿名用户
          anon_upload_enable=YES  #是否具有上传权限
          anon_mkdir_write_enable=YES  #是否可以创建目录
          anon_other_write_enable=YES  #除了写权限是否可以删除修改服务器上的其他文件
          anon_umask=077   #文件的掩码权限
                  
      系统用户:
          local_enable=YES   #是否启用本地用户
          write_enable=YES   #是否具有可写权限
          local_umask=022  #文件的掩码权限
    
          userlist_enable=YES  #启用/etc/vsftpd/user_list文件来控制可登录用户 
          userlist_deny=
                  YES:意味着此为黑名单
                  NO:白名单(名单中的用户才能登陆)
    
          chroot_local_user=YES
          禁锢所有本地用户 于其家目录之中;(需要事先去除用户对家目录的写权限)
                      
          chroot_list_enable=YES  #启用家目录禁锢列表功能
          chroot_list_file=/etc/vsftpd/chroot_list
              禁锢列表中文件存在的用户于其家目录中;(需要事先去除用户对家目录的写权限)
    

pam:
可插入式认证模块,高度模块化,可以查询系统的认证模块.

[root@localhost ~]# rpm -ql pam  | grep so
/etc/security/console.apps
/etc/security/console.handlers
/etc/security/console.perms
/etc/security/console.perms.d
/usr/lib64/libpam.so.0
/usr/lib64/libpam.so.0.83.1
/usr/lib64/libpam_misc.so.0
/usr/lib64/libpam_misc.so.0.82.0
/usr/lib64/libpamc.so.0
/usr/lib64/libpamc.so.0.82.1
/usr/lib64/security/pam_access.so
/usr/lib64/security/pam_chroot.so
/usr/lib64/security/pam_console.so
/usr/lib64/security/pam_cracklib.so
/usr/lib64/security/pam_debug.so
/usr/lib64/security/pam_deny.so

---------------------分割线---------------------

[root@localhost ~]# ls /etc/pam.d/
atd                     login             smartcard-auth-ac
chfn                    other             smtp
chsh                    passwd            smtp.postfix
config-util             password-auth     sshd
crond                   password-auth-ac  su
cups                    pluto             sudo
fingerprint-auth        polkit-1          sudo-i
fingerprint-auth-ac     postlogin         su-l
gdm-autologin           postlogin-ac      system-auth
gdm-fingerprint         ppp               system-auth-ac
gdm-launch-environment  remote            systemd-user
gdm-password            runuser           vlock
gdm-pin                 runuser-l         vmtoolsd
gdm-smartcard           setup             xserver
liveinst                smartcard-auth

虚拟用户模式登录ftp所用到的用户不是系统本地用户,这些虚拟用户只能对ftp服务器中的文件有写权限而不能对系统中的其他资源有访问权限,提高了安全性.这是又就使用pam模块了做认证.

  • 创建用户帐号密码文件:
[root@localhost ~]# vim /etc/vsftpd/vuser.list

magedu1
123456
magedu2
654321

~         
:wq

  • 将用户密码文件加密成数据库文件:
[root@localhost ~]# yum -y install db4-utils  #安装转换工具db4
...忽略...
  Verifying  : libdb4-utils-4.8.30-13.el7.x86_64                                                                                                         1/2 
  Verifying  : libdb4-4.8.30-13.el7.x86_64                                                                                                               2/2 

Installed:
  libdb4-utils.x86_64 0:4.8.30-13.el7                                                                                                                        

Dependency Installed:
  libdb4.x86_64 0:4.8.30-13.el7                                                                                                                              

Complete!

----------------分割线----------------

[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db   # 转换文件

----------------分割线----------------

[root@localhost ~]# chmod 600 /etc/vsftpd/vuser.*   #修改密码文件,保证安全性
[root@localhost ~]# ll /etc/vsftpd/vuser.*
-rw-------. 1 root root 12288 May  3 23:48 /etc/vsftpd/vuser.db
-rw-------. 1 root root    31 May  3 23:41 /etc/vsftpd/vuser.list

  • 创建FTP根目录及映射的虚拟用户:
[root@localhost ~]# mkdir /var/ftproot

----------------分割线----------------

[root@localhost ~]# useradd -d /var/ftproot/ -s /sbin/nologin virtual
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

----------------分割线----------------

[root@localhost ~]# chmod 755 /var/ftproot/  #修改根目录权限

  • 创建pam认证:
[root@localhost ~]# vim /etc/pam.d/vsftpd 

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth
auth       required     pam_userdb.so db=/etc/vsftpd/vuser   #加入最后两行
account    required     pam_userdb.so db=/etc/vsftpd/vuser  #文件后缀不能带
~                     
:wq
                                        
  • 配置/etc/vsftpd/vsftpd.conf文件:
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO   #这里改成NO
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
...省略...
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES  #允许虚拟用户登录
guest_username=virtual  #虚拟用户名字
pam_service_name=vsftpd   #虚拟用户的pam文件名称
virtual_use_local_privs=YES  #开启虚拟用户功能
user_config_dir=/etc/vsftpd/vusers_dir    #虚拟用户的配置目录,需要自己创建

:wq

*创建虚拟用户的目录文件并配置:

[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir
[root@localhost ~]# cd /etc/vsftpd/vusers_dir
[root@localhost vusers_dir]# touch magedu1 magedu2
[root@localhost vusers_dir]# vim magedu2

anon_upload_enable=YES
anon_mkdir_enable=YES

:wq

  • 重启服务并测试:
[root@localhost vusers_dir]# systemctl restart vsftpd
[root@localhost vusers_dir]# lftp -u virtual 192.168.1.108
Password: 
lftp virtual@192.168.1.108:~> 

简述NFS服务原理及配置

NFS是网络文件系统,NFS能够通过片网络实现在不同主机之间彼此资源的共享.NFS主要借助RPC(远程过程调用)来实现文件分享,NFS的配置文件及格式用法如下:

  • 服务端配置:
  /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:使用*通配所有主机;
                    
        常用 Options:
            ro:只读方式读取数据
            rw:读写
            sync:同步
            async:异步
            secure:客户端端口小于1024,否则就要使用insecure选项
        User ID Mapping:
            root_squash:压缩root用户,一般指将其映射为nfsnobody
            no_root_squash:不压缩root用户,允许root用户访问挂载的NFS卷
            all_squash:压缩所有用户
            anonuid and anongid:将压缩的用户映射为此处指定的用户

*客户端配置:

NFS 客户端:
    mount -t nfs servername:/path/to/share /path/to/mount_point  [-rvVwfnsh ] [-o options]
            
showmount -显示NFS挂载点信息
    showmount -e NFS_SERVER_IP: 查看指定的nfs server上导出的所有文件系统
    showmount -a:在nfs server上查看nfs服务的所有客户端列表
        
exportfs:
        -r:重新导出
        -a:所有文件系统
        -v:详细信息
        -u:取消导出文件系统
    # exportfs -ar
    # exportfs -au

因为NFS依赖RPC服务,所以安装NFS时要先安装rpcbind服务.下面演示一下NFS文件分享.

1.在服务端配置:

*安装服务:

[root@localhost ~]# yum -y install nfs-utils.x86_64 
Loaded plugins: fastestmirror, langpacks
base                                                                  | 3.6 kB  00:00:00     
epel                                                                  | 4.7 kB  00:00:00     
extras                                                                | 3.4 kB  00:00:00     
updates                                                               | 3.4 kB  00:00:00     
Loading mirror speeds from cached hostfile
...省略...
Updated:
  nfs-utils.x86_64 1:1.3.0-0.48.el7_4.2                                                      

Complete!
[root@localhost ~]# yum -y install rpcbind
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Package rpcbind-0.2.0-42.el7.x86_64 already installed and latest version
Nothing to do

  • 创建分享目录:
[root@localhost ~]# mkdir /tmp/test
  

*配置文件:

[root@localhost ~]# vim /etc/exports

/tmp/test  192.168.1.105(rw,sync,no_root_squash)
~                                                                                            
~                                                                                            
#/tmp/test 分享目录,      192.168.1.105 :分享的客户端                                                                                    
# (rw,sync,no_root_squash)  客户端用户的权限                                                                                            
~                                                                                            
~                              
:wq
  • 启动服务:
[root@localhost ~]# systemctl start nfs rpcbind
[root@localhost ~]# systemctl status nfs rpcbind
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since Fri 2018-05-04 18:31:41 CST; 1min 56s ago
  Process: 45371 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 45364 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)
  Process: 45362 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=1/FAILURE)
 Main PID: 45371 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

May 04 18:31:41 localhost.localdomain systemd[1]: Starting NFS server and services...
May 04 18:31:41 localhost.localdomain exportfs[45362]: exportfs: Failed to stat /etc/test...y
May 04 18:31:41 localhost.localdomain systemd[1]: Started NFS server and services.

● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)
   Active: active (running) since Fri 2018-05-04 18:31:41 CST; 1min 56s ago
  Process: 45357 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 45359 (rpcbind)

2. 客户端配置:

  • 查看分享目录:
[root@localhost ~]# showmount -e 192.168.1.108
Export list for 192.168.1.108:
/tmp/test 192.168.1.105

  • 挂载分享目录:
[root@localhost ~]# mount -t nfs 192.168.1.108:/tmp/test /tmp/test
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=917556k,nr_inodes=229389,mode=755)

...省略...

/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=186708k,mode=700,uid=42,gid=42)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=186708k,mode=700)
gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
192.168.1.108:/tmp/test on /tmp/test type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.105,local_lock=none,addr=192.168.1.108)

*测试NFS:

在客户端挂载目录下创建目录
[root@localhost test]# vim nfs.txt

this is a client nfs file
~                                                                                            
~                               
:wq

-------------分割线-------------

在服务器端查看对应目录下是否有文件
[root@localhost test]# ls
nfs.txt
[root@localhost test]# cat nfs.txt   #网络分享文件同步过来了
this is a client nfs file

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

SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源,samba常用的配置以及命令 如下:

 samba的配置:
/etc/samba/smb.conf
        
    两类配置段:
        全局配置
            [global]
                Network-Related Options
                    workgroup =
                    server string = 
                    interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
                    hosts allow = 127.  192.168.12.  192.168.13.

                Logging Options
                    log file = /var/log/samba/log.%m
                    max log size = 50

                Standalone Server Options
                    security = user   #设定安全级别:取值有四个
                        share:匿名共享
                        user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是系统用户,但密码非为/etc/shadow中的密码,而由samba自行管理的文件,其密码文件的格式由passdb backend进行定义
                        server:由第三方服务进行统一认证
                        domain:使用DC进行认证;基于kerberos协议进行;
                        passdb backend = tdbsam

                Printing Options
                        load printers = yes
                        cups options = raw
                    
        [SHARED_NAME]   共享文件系统配置
                有三类:
                    [homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录
                    [printers]:定义打印服务
                    [shared_fs]:定义共享的文件系统;
                    
                常用指令:
                    comment:注释信息
                    path:当前共享所映射的文件系统路径
                    browseable:是否可浏览,指是否可被用户查看
                    guest ok:是否允许来宾账号访问
                    public:是否公开所有用户
                    writable:是否可写
                    read only:是否为只读
                    write list:拥有写权限的用户列表
                        用户名
                        @组名
                        +组名
            
        samba用户管理:
            smbpasswd 
                smbpasswd [options] USERNAME
                    -a:添加
                    -x:删除
                    -d:禁用
                    -e:启用
            pdbedit
                -L:列出samba服务中的所有用户
                -a, --create:添加用户为samba用户
                    -u, --user=USER:要管理的用户;
                -x, --delete:删除用户
                -t, --password-from-stdin:从标准输出接收字符串作为用户密码
                    使用空提示符,而后将密码输入两次
            
        查看服务器端的共享:
            smbclient -L SMB_SERVER  [-U USERNAME]
            
        交互式文件访问:
            smbclient //SMB_SERVER/SHARE_NAME [-U USERNAME]
            
        挂载访问:
            mount -t cifs //SMB_SERVER/SAHRE_NAME  -o username=USERNAME,password=PASSWORD
            
            注意:挂载操作的用户,与-o选项中指定用户直接产生映射关系;
                此时,访问挂载点,是以-o选项中的username指定的用户身份进行;本地用户对指定的路径访问,首先得拥有对应的本地文件系统权限;
            
smbstatus命令:显示samba服务的相关共享的访问状态信息
        -b:显示简要格式信息
        -v:显示详细格式信息

下面演示一下samba的配置;

1.服务端配置:

  • 安装服务:
[root@localhost test]# yum -y install samba
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
...省略...
Dependency Updated:
  libsmbclient.x86_64 0:4.6.2-12.el7_4            libwbclient.x86_64 0:4.6.2-12.el7_4       
  samba-client-libs.x86_64 0:4.6.2-12.el7_4       samba-common.noarch 0:4.6.2-12.el7_4      

Complete!

  • 配置文件:
[root@localhost test]# vim /etc/samba/smb.conf

# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

...省略...

[homes]
        comment = samba test dir
        path = /tmp/sambatest
        writeable = Yes
        create mask = 0600
        public = Yes
        browseable = No

:wq
  • 添加samba用户:
[root@localhost test]# useradd smbtest
[root@localhost test]# smbpasswd -a smbtest
New SMB password:
Retype new SMB password:
Added user smbtest.

  • 启动服务:
[root@localhost test]# systemctl start smb nmb
[root@localhost test]# systemctl status smb nmb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-05-04 20:26:10 CST; 7s ago
 Main PID: 47137 (smbd)
   Status: "smbd: ready to serve connections..."
   CGroup: /system.slice/smb.service
           ├─47137 /usr/sbin/smbd
           ├─47138 /usr/sbin/smbd
           ├─47139 /usr/sbin/smbd
           └─47140 /usr/sbin/smbd

May 04 20:26:09 localhost.localdomain systemd[1]: Starting Samba SMB Daemon...
May 04 20:26:10 localhost.localdomain smbd[47137]: [2018/05/04 20:26:10.114204,  0] ../l...y)
May 04 20:26:10 localhost.localdomain systemd[1]: Started Samba SMB Daemon.
May 04 20:26:10 localhost.localdomain smbd[47137]:   STATUS=daemon 'smbd' finished start...ns

● nmb.service - Samba NMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/nmb.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-05-04 20:26:09 CST; 8s ago
 Main PID: 47135 (nmbd)
   Status: "nmbd: ready to serve connections..."
   CGroup: /system.slice/nmb.service
           └─47135 /usr/sbin/nmbd

2.客户端配置:

  • 安装客户端服务:
[root@localhost test]# yum -y install samba-client
Loaded plugins: fastestmirror, langpacks
Repository epel is listed more than once in the configuration
Repository epel-debuginfo is listed more than once in the configuration
Repository epel-source is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
...省略...
Installed:
  samba-client.x86_64 0:4.6.2-12.el7_4                                                       

Complete!

*连接服务端:

[root@localhost test]# smbclient //192.168.1.108/smbtest -U smbtest
Enter SAMBA\smbtest's password: 
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
  .                                   D        0  Fri May  4 20:13:24 2018
  ..                                  D        0  Fri May  4 20:41:59 2018

        18971044 blocks of size 1024. 13750820 blocks available

*挂载目录:

[root@localhost test]# mount -t cifs //192.168.1.108/smbtest /tmp/smb -o username=smbtest,password=123456
[root@localhost test]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

...省略...

192.168.1.108:/tmp/test on /tmp/test type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.105,local_lock=none,addr=192.168.1.108)
//192.168.1.108/smbtest on /tmp/smb type cifs (rw,relatime,vers=1.0,cache=strict,username=smbtest,domain=LOCALHOST,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.1.108,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=65536,echo_interval=60,actimeo=1)


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容