今天在处理服务器故障的时候遇到了一个奇怪的问题,在使用mount尝试挂载磁盘的时候,始终提示:
Mount: /dev/xxx already mounted or /mnt busy
奇怪的是,使用
df -h
和
lsof -n
都找不到任何相关信息,看起来这块磁盘既没有挂载,也没有进程在写目录。但是就是挂载不成功。
后来搜索了一下发现了一个解决办法:
首先使用
dmsetup ls
查看能否看到Device Mapper信息。如果显示类似:
[root@]# dmsetup ls
ddf1_44656c6c202020201028001510281f033832b7a2f6678dab (253, 0)
ddf1_44656c6c202020201028001510281f033832b7a2f6678dab1 (253, 1)
那么执行两次
dmsetup remove xxxxxx
命令,将这两个Mapper信息删除,检查一下:
[root@]# dmsetup ls
No devices found
此时,再挂载磁盘就不会出现问题了。
Linux
Linux挂载Windows共享文件夹或硬盘分区
好久没使用过samba了,刚刚需要在Fedora9下挂载Windows共享时,准备使用smbmount,执行smbmount的时候,提示没有这个命令,系统samba也安装了呀,为什么没有呢,google下才知道,从Fedora9以后就没有smbmount这个概念了,而是使用cifs (Common Internet File Systemcifs),也就是说在这以后的系统直接使用mount加参数cifs就可直接挂载Windows的共享了.
使用方法:
先在你的xp电脑里面添加一个共享的文件夹linux
#mount -t cifs -o username=fish,password=fish //192.168.1.10/linux /mnt/linux
这样就可以了很是方便
但是如果你要挂载你的硬盘分区的话,同样设置你的硬盘分区d为共享但是主要你的共享名称一定要是英文
#mount -t cifs -o username=fish,password=fish //192.168.1.10/ld /mnt/d
这样也可以的
如果你要卸载你挂载的东西
#umount /mnt/linux
#umount /mnt/d
就可以了
备注:
说明一下,cifs是MS的一种通用的协议,Windows下的网上邻居访问其它计算机就是使用cifs协议.
服务器批量执行工具 PSSH
操作一台服务器的时候可以 ssh,操作多台服务器可以开多个窗口多个 ssh,那操作很多台服务器呢?
我们的一个 Oracle Gird Engine 集群上大概有60多台 Ubuntu 服务器作执行节点,这些服务器操作系统和软件配置完全一样(上线后由 puppet 统一配置),有时候我们需要在这些服务器上做同样的操作,这个时候特别适合使用 PSSH 这种 ssh 批量操作工具。
当然,如果对 Python 不恐惧的话也可以用 Fabric 批量执行服务器任务。
下载和安装 pssh:
$ git clone http://code.google.com/p/parallel-ssh/
$ cd parallel-ssh/
$ sudo python setup.py install
批量执行
首先新建一个服务器列表文件,把需要操作的服务器的 hostname(或者 IP 地址)加进去,然后就可以批量执行 uptime 命令了,-l 指定登录用户名,-A 询问密码,-h 指定服务器列表文件:
$ vi grids
grid01
grid02
grid03
grid04
grid05
$ pssh -i -l root -A -h grids 'uptime'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 05:42:09 [SUCCESS] grid01
11:42:09 up 620 days, 20:30, 0 users, load average: 6.09, 6.14, 6.13
[2] 05:42:09 [SUCCESS] grid03
11:42:09 up 620 days, 20:29, 0 users, load average: 9.01, 9.04, 9.05
[3] 05:42:09 [SUCCESS] grid05
11:42:09 up 620 days, 20:10, 0 users, load average: 8.46, 8.18, 8.10
[4] 05:42:09 [SUCCESS] grid04
11:42:09 up 620 days, 20:25, 0 users, load average: 6.00, 6.01, 6.05
[5] 05:42:10 [SUCCESS] grid02
11:42:10 up 606 days, 2:07, 0 users, load average: 6.03, 6.02, 6.01
批量上传
批量上传本地文件 linux-3.14.3.tar.xz 到服务器上的 /tmp 目录:
$ pscp -l root -A -h grids linux-3.14.3.tar.xz /tmp/
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 05:56:16 [SUCCESS] grid01
[2] 05:56:16 [SUCCESS] grid03
[3] 05:57:04 [SUCCESS] grid05
[4] 05:57:04 [SUCCESS] grid04
[5] 05:57:05 [SUCCESS] grid02
批量下载
批量下载服务器上的某文件到本地,不用担心重名问题,因为 pssh 已经建立了 grid01, grid02, …, grid05 目录来存放下载的文件:
$ pslurp -l root -h grids -A /tmp/linux-3.14.3.tar.xz .
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 06:06:01 [SUCCESS] grid01
[2] 06:06:01 [SUCCESS] grid03
[3] 06:06:06 [SUCCESS] grid04
[4] 06:06:06 [SUCCESS] grid02
[5] 06:06:06 [SUCCESS] grid05
$ ls
grid01 grid02 grid03 grid04 grid05 grids linux-3.14.3.tar.xz parallel-ssh
批量同步
有时候我们需要保持开发机上(某目录里)的数据和服务器上的数据一致:
$ prsync -l root -h grids -A -r develop/ /tmp/production/
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 06:12:52 [SUCCESS] grid05
[2] 06:12:52 [SUCCESS] grid01
[3] 06:12:52 [SUCCESS] grid04
[4] 06:12:52 [SUCCESS] grid02
[5] 06:12:52 [SUCCESS] grid03
动态修改php的配置项
我们一般修改php的配置项都是在php.ini中修改。在php,ini中的修改会影响到所有使用php的程序。假如我想让修改只在某个域名下生效,该如何做呢?
使用ini_set()
首先想到的可能是使用ini_set()方法在脚本中修改。但是这个只能修改作用域为PHP_INI_USER和PHP_INI_ALL的配置项。具体配置项作用域说明请查看 PHP配置指令作用域说明
使用php_value
如果我访问wanke.etao.com下的url时,程序每次执行都自动加载一个header.php文件。但是,如果是通过shell脚本方式执行,就不要加载这个文件了。要实现这个需求,我们需要用到 auto_prepend_file 这个配置想。这个配置想的作用域是 PHP_INI_PERDIR 。 也就是说不能通过ini_set()方法设置。那我们可以通过php_value进行设置。
如果是apache+php的组合,我们可以在apache的配置文件中加入如下指令即可。
Php_value auto_prepend_file /home/www/wanke.etao.com/header.php
如果是nginx+php组合,可以加入如下指令
fastcgi_param PHP_VALUE “auto_prepend_file=/home/www/wanke.etao.com/header.php”;
注意,nginx中多次使用 PHP_VALUE时,最后的一个会覆盖之前的。如果想设置多个配置项,需要写在一起,然后用换行分割。如:
fastcgi_param PHP_VALUE “auto_prepend_file=/home/www/wanke.etao.com/header.php \n auto_append_file=/home/www/wanke.etao.com/external/footer.php”;
php官方对配置项设置的一些文档
使用perl脚本输出可读的dmesg时间
#!/usr/bin/perl
use strict;
use warnings;
my @dmesg_new = ();
my $dmesg = "/bin/dmesg";
my @dmesg_old = `$dmesg`;
my $now = time();
my $uptime = `cat /proc/uptime | cut -d"." -f1`;
my $t_now = $now - $uptime;
sub format_time {
my @time = localtime $_[0];
$time[4]+=1; # Adjust Month
$time[5]+=1900; # Adjust Year
return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5];
}
foreach my $line ( @dmesg_old )
{
chomp( $line );
if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
{
# now - uptime + sekunden
my $t_time = format_time( $t_now + $1 );
push( @dmesg_new , "[$t_time] $3" );
}
}
print join( "\n", @dmesg_new );
print "\n";
脚本下载地址:dmesg.tar
L4D2多人写实对抗模式
在安装了SourceMod之后,SM会自动更改游戏模式。所以使用map命令无法打开真正的写实模式。需要进游戏之后输入:
!rcon sm_cvar mp_gamemode mutation12
来强制更改。
Quit Bash Shell Without Saving Bash History (5 Methods)
Remove Only Current Session Bash History and Leave Older History Untouched
1. Quit Bash Shell Without Saving History: Unset HISTFILE
unset HISTFILE && exit
2. Quit Bash Shell Without Saving History: Kill Console
kill -9 $$
Remove/Delete Bash History Completely
3. Quit Bash Shell Without Saving History: Clear History Option
history -c && exit
4. Quit Bash Shell Without Saving History: Set HISTSIZE to 0 (zero)
HISTSIZE=0 && exit
5. Quit Bash Shell Without Saving History: Delete HISTFILE and Unset HISTFILE
rm -f $HISTFILE && unset HISTFILE && exit
denyhosts研究
我在前天开始研究denyhosts这个软件,本来昨天就想写篇文章的,而直到现在,我还没有得到满意的答案。现在将它总结出来,全当解解气!囧
对于这个denyhosts,我耗费了太多的时间。光看那英文配置文件说明和安装说明我就几乎看了整整一上午。哎,没办法,我英语不好,很多单词不认识,只能用翻译软件翻译后再揣测其意思。大多安装配置文件算是看懂了。后来再参阅网上的文档,有了一定的了解。
只是当我安装后发现如下几个问题:
1,当我把denyhosts安装上启动后,结果/etc/hosts.deny文件中马上就有了我自己的ip地址在里面!晕死,我在安装后根本就还没有偿试登录过啊,又怎么被限制?(已解决)
2,在另一台机器上我设置了DENY_THRESHOLD_ROOT=5 ,安装后结果我root用户才输错一次密码就给我封杀了!按参数意思应该是5次机会啊!不用这么绝吧!(已解决)
3,我设置了PURGE_DENY=3m,即3分钟清除hosts.deny中添加的记录。结果我苦等十分钟还不见/etc/hosts.deny中添加的ip被清除!这不是存心不让我再次登录了吗?好在我当前的ssh连接没断开。要断开了岂不没得连了?(未解决)
4,这个所谓的阻止暴力破解,貌似只对ssh连接有效,我用ftp登录,然后不停的偿试登录,结果却没有被添加进阻止。(未解决)
5,我将hosts.deny文件中的用户列表删除后,不久后竟然又自动给添加进来了!我@#¥¥。。难道硬是不让我再次登录了?!!(已解决)
于是乎
一、自己思考,不停换各种方法偿试
二、找度娘,显然度娘对我的发问不敢兴趣!网上一大把denyhosts的配置文章,但就是没几个说问题的!看来看去说的内容也都几乎千篇一律!不得其果!
三、寻群友帮助,结果发了三群,各发几次,基本没人回应,回应了的也不知道。我狂汗!
四、实在不得已,又跑到官方网站上看那N多的FAQ!从上面找到了一点点的蛛丝马迹….
五、再做各种实验
下面公布我最近的研究战果!
首先贴上配置文件
[root@localhost denyhosts]# cat denyhosts.cfg
SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY = 3m
BLOCK_SERVICE = ALL
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 10
DENY_THRESHOLD_ROOT = 5
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/lock/subsys/denyhosts
ADMIN_EMAIL =
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 5m
第一个问题:
分析:我在rhel6和centos6上分别安装了denyhosts软件。结果均出现此情况。我想,既然它是根据/var/log/secure文件中登录失败记录来是判断是否违规,那么,会不会是我在安装denyhosts之前的secure中的失败登录记录也被算作违规呢?那么我删了应该就不会有问题了吧。
办法:echo “” > /var/log/secure 即把secure日志文件全部清空!要注意的是,清空后一定要service rsyslog restart 重启日志记数器!因为如果你不重启服务,你会发现secure日志文件会停止记录一切活动了!那么denyhosts也就无效了。
结果:如果安装前就先清空,在安装denyhosts后,就不会自动出现禁止的IP了。
原理:根据官方FAQ上关于denyhosts对监控secure日志文件更新的原理,可以理解上述问题的原因。官方说明大概是这样的:denyhosts在/usr/share/denyhosts/data(即WORK_DIR)中的offset文件中记录了secure的首行记录。
如果说offset文件中的首行记录和现有secure中的首行记录相同,则比较现有secure和offset中最后记录的secure文件的大小,如果现有secure比记录中的secure文件大,则将secure中新增加的部分进行分析,并将新增加的失败登录行记录在了denyhosts记数器中。比如原来记录了root有3次登录失败,这次新增行中又发现了2次,那么一共就5次记录了。当超过DENY_THRESHOLD_ROOT中设立的值时,便将该IP加入hosts.deny中。如果现有secure文件和offset中记录的文件大小相同,则认为secure日志未更新。不做任何操作
如果offset文件中首行记录和现有secure中的首行记录不同,那么则认为secure文件是全新的。那么,offset会重新分析secure日志的所有行。
如果我们刚安装denyhosts,那么offset中并不会有secure日志文件头,也不会有secure日志文件大小的记录,那么denyhosts自然会分析所有的secure日志行,于是乎,我在安装denyhost前一周的所有的登录失败次数被累计起来,如果我在上一周内登录失败记录超过限制数,那么肯定就会在启动denyhosts后马上被加入黑名单了!(为什么是一周之内?因为secure日志文件记录的周期为一个星期!)
第二个问题:
和第一个问题是一个原因。只要先将secure清空再安装,一切就正常了。原因是,root用户在安装前就有了失败的记录,影响到denyhosts的次数判断。如你安装denyHosts之前root已经错误登录4次。那么你再用root登录1次就会发现登录不了了。我的其实安装denyhosts前日志中的记录就已经有4次了,所以马上被封杀了。
第三个问题(未解决):
截取的部分/var/log/denyhosts日志
2011-09-24 06:29:02,211 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:26:02 2011
2011-09-24 06:29:02,215 – denyfileutil: INFO num entries purged: 0
2011-09-24 06:34:02,527 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:31:02 2011
2011-09-24 06:34:02,535 – denyfileutil: INFO num entries purged: 0
2011-09-24 06:36:02,710 – denyhosts : INFO new denied hosts: [‘192.168.1.5’]
2011-09-24 06:39:02,898 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:36:02 2011
2011-09-24 06:39:02,900 – denyfileutil: INFO num entries purged: 0
2011-09-24 06:44:03,212 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:41:03 2011
2011-09-24 06:44:03,220 – loginattempt: INFO purging_hosts: [‘192.168.1.5’]
2011-09-24 06:44:03,223 – denyfileutil: INFO num entries purged: 1
2011-09-24 06:49:03,543 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:46:03 2011
2011-09-24 06:49:03,547 – denyfileutil: INFO num entries purged: 0
配置文件中PURGE_DENY = 3m 即表示每3分钟清除hosts.deny中的IP地址一次,并且计数器+1.如果设定的计数次数达到PURGE_THRESHOLD的值,那么它就永远不会从hosts.deny文件中清除,直到计数器被清零。 DAEMON_PURGE=5m表示每5分钟清零一次计数器。
从下面日志行中可以看出虽然我设置的为3分钟清除,但根本没有3分钟就清除这一说。而且根据我另一个实验,我将DEAMON_PURGE设置为了1h之后,别说3分钟了,一个小时都不会清除hosts.deny中的记录!PURGE_DENY参数真是瞎扯蛋!只不过如果要让它清除得快一点可以将DEAMON_PURGE这个参数的值设小一点,如我把它设为5分钟后,大概过5-10分钟不等的时间就会将hosts.deny中的记录删除。
2011-09-24 06:36:02,710 – denyhosts : INFO new denied hosts: [‘192.168.1.5’]
2011-09-24 06:49:03,543 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:46:03 2011
从下面日志行可以看出,DEAMON_PURGE=5m倒是一直很有效。
2011-09-24 06:29:02,211 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:26:02 2011
2011-09-24 06:29:02,215 – denyfileutil: INFO num entries purged: 0
2011-09-24 06:34:02,527 – denyfileutil: INFO purging entries older than: Sat Sep 24 06:31:02 2011
第四个问题(未解决)
不知道怎么回事。一台机器一开始一直无效,重启后有效了。另一台机器一直无效…同样的安装,同样的配置。不一样的结果!
第五个问题(已解决)
参考了官方文档才发现,原来不能单纯的只删除hosts.deny中的记录,要想删干净,得先service denyhosts stop .然后再把/usr/share/denyhosts/data目录下的其它文件中关于hosts.deny中的IP记录一并清空。再service denyhosts start即可。但有的时候只清除hosts.deny中的文件也可以。
总结:首先承认是我水平不行!但我不得不说的是,这个软件本身肯定也有很多不足之处!给我感觉有点垃圾!简直浪费时间!网络上一大串关于这个软件的配置,我真想问问他们是不是真的都自己做过?还是copy,copy,再copy来的?难道你们就没人遇到过这样的问题吗?
另外,有的文章说安装完后看到阻止自己远程登录的IP就代表生效了。我想问问你们思考过没有,自己IP都阻止了,那你还登录什么?!
有的文章说看到Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).就代表成功了。大哥,麻烦你关闭denyhosts再登录看看行吗?这根本不是denyhostst的阻止成功的效果!真正生效的结果应该是ssh_exchange_identification: Connection closed by remote host !
还有文章标题就说“denyhosts防止ssh和ftp暴力破解。不知道这个防ftp暴力破解你们做过没有?
好了,到此为止吧。全当发泄!再也不搞这烂东西了!简直浪费时间!
本文出自 “小子无名” 博客,请务必保留此出处http://linuxroad.blog.51cto.com/765922/673425
在CentOS/RHEL 6.2上使用YUM安装PHP5.4
本文适用于所有CentOS6及Red Hat Enterprise Linux6版本上安装php5.4,本人测试安装环境为32位CentOS6系统。
文章来源:PHP 5.4 on CentOS/RHEL 6.2 via Yum http://www.webtatic.com/packages/php54/
php5.4于2012年5月8号发布,从php5.4.0开始php加入了一些新特色如:
- Traits支持
- 内置了一个简单的Web服务器
- 提供了数组简短语法
- 直接对函数返回值进行数组取值
- 最终删除魔术方法及安全模式
- rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm
- yum install php54w
如果安装失败,建议您先卸载以前的php再进行安装,使用yum remove php php-*
Package | Provides |
---|---|
php54w | mod_php |
php54w-bcmath | |
php54w-cli | php-cgi, php-pcntl, php-readline |
php54w-common | php-api, php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif, php-fileinfo, php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-json, php-libxml, php-openssl, php-pcre, php-pecl-Fileinfo, php-pecl-phar, php-pecl-zip, php-reflection, php-session, php-shmop, php-simplexml, php-sockets, php-spl, php-tokenizer, php-zend-abi, php-zip, php-zlib |
php54w-dba | |
php54w-devel | |
php54w-embedded | php-embedded-devel |
php54w-enchant | |
php54w-fpm | |
php54w-gd | |
php54w-imap | |
php54w-interbase | php_database, php-firebird |
php54w-intl | |
php54w-ldap | |
php54w-mbstring | |
php54w-mcrypt | |
php54w-mssql | |
php54w-mysql | php-mysqli, php_database |
php54w-odbc | php-pdo_odbc, php_database |
php54w-pdo | |
php54w-pgsql | php-pdo_pgsql, php_database |
php54w-process | php-posix, php-sysvmsg, php-sysvsem, php-sysvshm |
php54w-pspell | |
php54w-recode | |
php54w-snmp | |
php54w-soap | |
php54w-tidy | |
php54w-xml | php-dom, php-domxml, php-wddx, php-xsl |
php54w-xmlrpc | |
php54w-zts |
Linux主机安全检查
查看版本,某些版本可能会包含特定的漏洞。
/etc/debian_version.
/etc/redhat-release
/etc/fedora-release
lsb_release -a #ubuntu
查看内核版本:
uname -a
查看开机时间,开机时间意味着有多长时间没有升级内核了。
uptime #check last kernel upgrade
查看时区:
cat /etc/timezone
时间服务
ps aux|grep ntp
时间服务log
ntpq -p -n
查看安装的软件包,也许会找到有漏洞的版本:
dpkg -l
查找有setuid的可执行文件:
find / -perm -u+s 2>/dev/null
登录日志记录:
/etc/rsyslog.conf
查看网络接口:
ip addr
查看dns是否被更改:
cat /etc/resolv.conf
查看hosts文件:
cat /etc/hosts
todo:导出shell
检查敏感文件的权限:
/etc/shadow
/etc/shadow.backup
/etc/mysql/my.cnf
备份的文件
检查有root权限的应用:
find / -perm -4000 -ls
检查用户:
cat /etc/passwd
检查用户的uid和guid是否是0:0,如果是0:0意味着他们登录后是root
确认无需登录用户bash是/bin/false或/bin/nologin
检查shadowfile
cat /etc/shadow
密码hash以$和$1$开头的分别是DES和MD5 hash,应当修改。
题外话:
在检查shadow文件的时候有这么一行
1
|
root:$6$BPoThzPl$2FDtPs0iYJfIBWVG1Z1BxuzSD7ZYTN.wdjkqyo7R0NlqgRiY9s0qsyQT1PhN.qfLYwYZglpzK72e4sU5Khr1B.:15664:0:99999:7:::
|
这个对应的用户名和密码是root:toor
检查chown和chmod的权限,普通用户应该不能访问这两个命令。
检查sudo配置文件
egrep -v ‘^#|^$’ /etc/sudoers
查看打开的端口和对应的进程
# lsof -i TCP -n -P
# lsof -i UDP -n -P
关闭ssh的root远程访问权限
echo ‘PermitRootLogig off’ >> /etc/ssh/sshd_config
强制ssh使用新版本加密:
echo ‘protocol 2′ >> /etc/ssh/sshd_config
如果无需远程访问mysql的话,将mysql端口绑定到127.0.0.1上:
cat /etc/mysql/my.cnf
[mysqld]
bind-address = 127.0.0.1
mysql登录:
1
|
mysql -u root #会有主机没密码么
|
mysql查看版本:
1
|
select @@version;
|
mysql查看用户和密码:
1
|
select Host, User, Password from mysql.user;
|
mysql查看密码hash:
1
|
select password(‘admin’)
|
mysql查看写文件权限:
1
|
SELECT user,file_priv FROM mysql.user WHERE FILE_PRIV=’Y’;
|
检查apache运行的用户:
ps aux|grep apache
在apache的配置文件里也能找到
1
2
3
4
5
|
#cat /etc/apache2/envvars
…
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
…
|
确认网站目录下的文件权限:
1
2
3
4
5
|
#ls -lR /var/www/
/var/www/wordpress/:
total 125
-rwxrwxrwx 1 www-data www-data 395 Jul 11 07:02 index.php
-rwxrwxrwx 1 www-data www-data 19929 Jul 11 07:02 license.txt
|
这个例子中的文件权限应该被改为 -rwx-r–r–
关闭apache在http头中输出版本,这是Debian的设置位置
1
|
#echo “ServerTokens Prod;\nServerSignature Off” >> /etc/apache2/conf.d/security
|
关闭文件目录遍历
cat /etc/apache2/sitesenable/000-default
1
2
3
4
5
6
|
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
deny from all
|
Php设置
display_errors Off
reviewerror_reporting E_ALL
log_errors On;
safe_mode On;
禁用函数 eval, exec, passthru, shell_exec, system, proc_open,
popen。
allow_url_ Off.