环境搭建 0x00 准备工作 虚拟机:Vmware15 系统:Ubuntu16 虚拟机装ubuntu过程个人觉得就不用详说了。。反正就是一顿操作猛如虎。。然后就安装好了,因为登录是个人用户,所以做了一些设置,让其可以使用root方式登录。
1、安装vim(个人喜欢用vim,自带的vi不太喜欢用) sudo apt-get install vim 2、设置root密码 sudo passwd ****** 3、配置文件,设置root可登录 sudo vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 在文件最后添加:greeter-show-manual-login=true
更换源
sudo vim /etc/apt/sources.list 清华大学源 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
安装截图
更新ubuntu
更新 sudo apt update sudo apt upgrade sudo apt clean 更新报错,提示资源管理器被占用,使用ps -e | grep apt 查看占用进程 使用sudo kill PID号 杀死进程,重新运行以上命令即可
成功截图
0x01 搭建web环境 安装mysql apt-get -y install mysql-server mysql-client
中途会让你设置数据库密码,或者使用以下命令设置密码
mysql_secure_installation
可以正常连接,此时账户是root
安装nginx apt-get install nginx -y 启动nginx守护程序 systemctl start nginx.service systemctl enable nginx.service
安装php-fpm apt-get -y install php7.0-fpm php7.0-mysql
配置php.ini文件
vim /etc/php/7.0/fpm/php.ini
在配置文件中查看以下参数
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo ; cgi.fix_pathinfo=1 使用 / ; to use SCRIPT_ 找到此行,修改最后一行为以下 ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0
保存后重新启动php
systemctl restart php7.0-fpm.service systemctl enable php7.0-fpm.service
配置Nginx使用php处理器 打开配置文件
sudo vim /etc/nginx/sites-available/default
设置以下对应参数
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name 127.0.0.1; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } location ~ /\.ht { deny all; } }
创建index.php
访问成功
参考连接:https://www.globo.tech/learning-center/setup-nginx-php-fpm-mysql-ubuntu-16/ https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04
0x02 php连接mysql 让php连接mysql,感觉网上找个源码搭建有点不太好,不是自己的东西,所以准备自己写一个可以插入数据的页面,先本机测试,然后放到ubuntu虚拟机中
创建数据库 create database mag;//创建test数据库 use mag;//选择数据库 //创建表 create table mag( id int not null primary key, name char(10) not null, content varchar(100) not null )charset utf8;
创建成功
插入数据 有点丑,不过可以用就行。。。
php代码
<?php //连接数据库 $conn = mysql_connect('localhost' , 'root' , 'root'); mysql_query('use mag' , $conn);//选择数据库 mysql_query('set names utf8' , $conn);//设置字符集 //获取post过来的数据 $id = $_POST['id']; $name = $_POST['name']; $content = $_POST['content']; $sql = "INSERT INTO mag(id , name , content) VALUE ('$id' , '$name' , '$content')"; if (mysql_query($sql , $conn)) { echo "OK"; }else{ echo "no"; } ?>
html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>留言板</title> </head> <body> <form action="mag.php" method="post"> <p>ID :<input type="text" name="id"><br/></p> <p>昵称:<input type="text" name="name"><br/></p> <p>内容:<textarea name="content" id="" cols="30" rows="10"></textarea><br/></p> <p style="height: 200px"><input type="submit" value="SUBMIT"></p> </form> </body> </html>
插入成功
开始测试虚拟机是否可用。
ubuntu下php连接mysql 创建数据库
create database mag;//创建test数据库 use mag;//选择数据库 //创建表 create table mag( id int not null primary key, name char(10) not null, content varchar(100) not null )charset utf8;
将代码放入ubuntu下的html目录中,发现提交数据报错,报500错误, 搜索后发现nginx禁止静态页面使用post方式,需要修改nginx.conf. 在nginx.conf下添加以下代码
error_page 405 =200 @405; location @405 { proxy_method GET; proxy_pass http://localhost; }
还是报错,测试各种方法都失败了。猜测可能不是nginx的问题,如果mysql配置错误也会爆出500错误,查看mysql错误日志
vim /var/log/nginx/error.log
报mysql_connetc错误。
最后发现环境不一样,本机使用的phpstudy集成环境,使用的是php5 ubuntu下载的php7,两种不一样。 php7使用的是mysqli,所以连接需要使用mysqli_connect
代码修改这样的
//连接数据库 $conn = mysqli_connect('127.0.0.1' , 'root' , '888888'); mysqli_query('use mag' , $conn);//选择数据库 mysqli_query('set names utf8' , $conn);//设置字符集 //获取get过来的数据 $id = $_GET['id']; $name = $_GET['name']; $content = $_GET['content']; $sql = "INSERT INTO mag(id , name , content) VALUES ('$id' , '$name' , '$content')"; if (mysqli_query($conn , $sql)) { echo $sql; echo 'ok'; }else{ echo $sql; echo 'no';
发现还是报错,提示mysqli_query($conn , $sql)这行出问题,使用f12查看网络,发现报错500。。经过表哥们的提醒,mysql配置连接不应该按照php5的来写。 修改成以下
$host = 'localhost:3306'; $username = 'root'; $password = '888888'; $dbname = 'mag'; $link = mysqli_connect($host , $username , $password , $dbname); mysqli_set_charset($link , 'utf-8'); //获取get过来的数据 $id = $_GET['id']; $name = $_GET['name']; $content = $_GET['content']; $sql = "INSERT INTO mag(id , name , content) VALUES ($id , '$name' , '$content')"; $res = mysqli_query($link , $sql); if (!$res) { echo $sql; echo "<br/>no"; }else{ echo $sql; echo "<br/>yes"; }
数据插入成功
困扰我大半天的问题,终于解决了,感谢大表哥们的回答啊。。
0x03 Ubuntu安全加固 参考连接:https://www.freebuf.com/column/202728.html
根据群主说的下载了linux安全加固PDF,但是由于第一次做加固,所以不太懂,在freebuf上面找了一篇文章,根据此文章进行加固
身份鉴别 口令复杂度策略 口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少2类。 Minlen //密码最小长度要求; Lcredit //小写字符数量 Ocredit //特殊字符数量
因为安装的ubuntu,所以有些文件可能不太一样
修改/etc/security/pwquality.conf配置文件 vim /etc/security/pwquality.conf Minlen //密码最小长度要求; Lcredit //小写字符数量 Ocredit //特殊字符数量
口令最长生存期策略 修改/etc/login.defs
vim /etc/login.defs 找到以下参数修改 PASS_MAX_DAYS 180 #密码最长过期天数 PASS_MIN_DAYS 90 #密码最小过期天数 PASS_WARN_AGE 10 #密码过期警告天数
多次登录失败锁定策略 修改/etc/pam.d/login配置文件 各参数解释:
even_deny_root 也限制root用户; deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户 unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒; root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
设置为密码连续错误6次锁定,锁定时间30秒 root密码连续错误6次锁定,时间为 100秒
添加 #%PAM-1.0 auth required pam_tally2.so onerr=fail deny=6 unlock_time=30 even_deny_root root_unlock_time=100
访问控制 多余账户锁定策略 应锁定与设备运行、维护等工作无关的账号。 /etc/password以root账户登录Linux系统 锁定用户方法一: 修改/etc/password文件,将需要锁定的用户的shell域后添加nologin; test:x:1000:100:-LINUX:/home/test:/bin/bash/nologin 锁定用户方法二: 在超级权限的账户下使用”passwd”命令 #passwd –lusername //锁定账户; #passwd –dusername//解锁用户; 解锁用户后需重新设置密码,且/etc/passwd文件内容不会发生变化。该操作比较麻烦,不推荐使用。
对以下账户进行锁定,使用第一种方法
锁定uucp账户 uucp:x:10:10:uucp:-LINUX:/var/spool/uucp:/usr/sbin/nologin 锁定lp账户 lp:x:7:7:lp:-LINUX:/var/spool/lpd:/usr/sbin/nologin 锁定sync账户 sync:x:4:65534:sync:-LINUX:/bin:/bin/sync
关键目录权限控制 重点设置password、shadow、group、service、login.defs、xinetd.conf、security、ssh_config文件权限。 其实很多版本都默认设置了一些。 ls –l /etc/passwd//查看passwd文件是否为644权限 ls –l /etc/shadow//查看shadow文件是否为600权限 ls –l /etc/group//查看group文件是否为644权限 ls –l /etc/services//查看services文件是否为644权限 ls –l /etc/login.defs //查看login.defs是否为644权限 ls -l /ssh/ssh_config //查看ssh_config文件是否为600权限
计算权限
r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=5。
查看关键目录权限 符合
passwd文件为 6+4+4=644 -rw-r--r-- 1 root root 2371 Jul 30 21:59 /etc/passwd group文件为 6+4+4=644 -rw-r--r-- 1 root root 1008 Jul 30 04:01 /etc/group services文件为 6+4+4=644 -rw-r--r-- 1 root root 19605 Oct 25 2014 /etc/services login.defs文件为 6+4+4=644 -rw-r--r-- 1 root root 10551 Jul 30 21:27 /etc/login.defs
不符合
shadow文件为 6+4+0=640 不符合 -rw-r----- 1 root shadow 1332 Jul 30 04:01 /etc/shadow 修改 chmod 600 /etc/shadow shadow文件为 6+0+0=600 符合 -rw------- 1 root shadow 1332 Jul 30 04:01 /etc/shadow
ssh_config文件为 6+4+4=644 不符合 -rw-r--r-- 1 root root 1756 Apr 28 2016 /etc/ssh/ssh_config 修改 chmod 600 /etc/ssh/ssh_config ssh_config文件为 6+0+0=600 符合 -rw------- 1 root root 1756 Apr 28 2016 /etc/ssh/ssh_config
用户缺省权限控制 umask值应为027或更小的权限 修改/etc/profile
0x04 总结 1、重新温习了环境搭建这一块的知识,搭建这块倒也没有遇到什么坑。 2、了解php5和php7语法这块的区别,大体上面的没有变,就是语法格式上面可能有些改变。。。之前学的是php5,加上好久没有搞php了,这坑踩了几个小时才解决。。 3、linux安全加固这块是完全没有碰过的,以前只听过加固,知道加固的一些关键点,但是从来没有实践过,这次动手感觉涨了不少见识。
总体来说,根据这次作业还是学到了很多东西,特别是加固这块,加固命令,检查那些地方,可能没有完全按照文章里面写的加固,有些文件没有,有些是看不太懂,所以不敢操作。。怕把虚拟机搞崩溃了,总结就到这里结束了。。。