一、删除后门账户 修改强口令
1、修改改密码长度需要编译login.defs文件
vi /etc/login.defs PASS_MIN_LEN 8
2、注释掉不需要的用户和用户组
或者
检查是否存在除root之外UID为0的用户
使用如下代码,对passwd文件进行检索:
awk -F ':' '($3==0){print $1)' /etc/passwd
将检索出来的不是root的用户使用userdel命令全部删除。
3、限制su命令:如果您不想任何人能够su作为root,可以编辑/etc/pam.d/su文件,增加如下两行:
auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=isd
二、更改权限设置
1、chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。
# chattr +i /etc/passwd # chattr +i /etc/shadow # chattr +i /etc/group # chattr +i /etc/gshadow
2、禁止Ctrl Alt Delete重新启动机器命令
修改/etc/inittab文件,将”ca::ctrlaltdel:/sbin/shutdown -t3 -r now”一行注释掉。
重新设置/etc/rc.d/init.d/目录下所有文件的许可权限,运行如下命令:# chmod -R 700 /etc/rc.d/init.d/*
三、远程登陆
1、#不允许使用低版本的SSH协议
vi /etc/ssh/ssd_config 将#protocol 2,1改为 protocol 2
2、#取消root直接远程登录
vi /etc/ssh/sshd_config PermitRootLogin no
3、#禁用.rhosts 文件
Vi /etc/ssh/sshd_config IgnoreRhosts yes
4、#禁用基于主机的认证
Vi /etc/ssh/sshd_config
HostbasedAuthentication no
5、#禁用空密码:
PermitEmptyPasswords no
禁止帐号使用空密码进行远程登录SSH
6、设置访问控制策略限制能够管理本机的IP地址
检查方法:
#cat /etc/ssh/sshd_config 查看有无AllowUsers的语句 备份方法: #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak 加固方法: #vi /etc/ssh/sshd_config,添加以下语句 AllowUsers *@127.*.*.* 此句意为:仅允许127.0.0.0/8网段所有用户通过ssh访问
保存后重启ssh服务
#service sshd restart
7、限制FTP登录
检查方法:
#cat /etc/vsftpd/ftpusers 确认是否包含用户名,这些用户名不允许登录FTP服务
备份方法:
#cp -p /etc/vsftpd/ftpusers /etc/vsftpd/ftpusers_bak
加固方法:
#vi /etc/vsftpd/ftpusers 添加行,每行包含一个用户名,添加的用户将被禁止登录FTP服务(红色字体为修改部分)
四、服务器
1、服务器禁止ping
cp /etc/rc.d/rc.local /etc/rc.d/rc.localbak vi /etc/rc.d/rc.local #在文件末尾增加下面这一行 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
参数0表示允许 1表示禁止
五、限制访问
1、在 /etc/hosts.allow中加入
all:127.0.0.1
这样就会允许来自127.0.0.1的客户来访问。
在 /etc/hosts.deny中加入
all:0.0.0.0
就限制了来自0.0.0.0的所有的所有的IP。
设置好后,要重新启动
# /etc/rc.d/init.d/xinetd restart
#/etc/rc.d/init.d/network restart
六、FTP加固
1、禁止匿名登录
anonymous_enable=NO
2、设置本地用户的文件生成掩码为022,默认值为077
local_umask=022
3、禁止激活上传和下载日志
xferlog_enable=NO
4、禁止匿名用户上传
为了禁止匿名用户上传,需要在/etc/vsftpd中激活两个配置选项,分别是:
anon_upload_enable=NO
//禁止匿名用户上传
anon_mkdir_write_enable=NO
//关闭匿名用户的写和创建目录的权限
若要以上两项设置生效,同时还要求:
write_enable=NO
//禁止匿名用户对文件系统的上传目录具有写权限
添加如下的配置语句:
anon_world_readable_only=YES
//上面的配置语句用于禁止放开匿名用户的浏览权限
重新启动vsftpd.
5、设置客户端连接时的端口范围
例如下面的配置:
pasv_min_port=50000 (改成1)
pasv_max_port=60000(改成2)
将使客户端连接时的端口范围在50000和60000之间。这提高了系统的安全性。
6、设置chroot
在 默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP服务器来说是不安全的。如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot选项,涉及如下选项:
chroot_local_user
chroot_list_enable
chroot_list_file
有两种设置chroot的方法:
(1)设置对所有的本地用户执行chroot(即活动范围限制在自家目录)只要将chroot_local_user的值设 为YES即可, 即:
chroot_local_user=YES
(2)设置指定的用户执行chroot需要如下的设置:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file= /etc/vsftpd.chroot_list
这样,只有/etc/vsftpd.chroot_list文件中指定的用户才执行chroot。
注意 :上面所提及的文件/etc/vsftpd.chroot_list和下面将要提及的文件 /etc/vsftpd.user_list的格式要求均为每个 用户名占一行。
7、只允许指定的主机访问
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
only_from <主机表>
例如:only_from 192.168.1.0
表示只允许192.168.1.0网段内的主机访问。
2)指定不能访问的主机
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
no_access <主机表>
例如:no_access 192.168.1.0
表示只有192.168.1.0网段内的主机不能访问。
(因为现在情况是vsftpd服务不是由xinetd管理的,所以没有这个配置文件;vsftpd使用standalone模式启动,则有这个配置文件)
七、一些需要禁用的PHP危险函数(disable_functions)
phpinfo()
功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中
passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高
exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高
system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高
chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高
scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中
chgrp()
功能描述:改变文件或目录所属的用户组。
危险等级:高
chown()
功能描述:改变文件或目录的所有者。
危险等级:高
shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高
proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。
危险等级:高
proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。
危险等级:高
error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。
危险等级:低
ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。
危险等级:高
ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。
危险等级:高
ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。
危险等级:高
dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
危险等级:高
pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。
危险等级:高
syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。
危险等级:中
readlink()
功能描述:返回符号连接指向的目标文件内容。
危险等级:中
symlink()
功能描述:在 UNIX 系统中建立一个符号链接。
危险等级:高
popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。
危险等级:高
stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中
putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。
危险等级:高
禁用方法如下:
打开/etc/php.ini文件,
查找到 disable_functions ,添加需禁用的函数名,如下:
phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen
八、MySQL加固
1、修改root用户口令,删除空口令
缺省安装的MySQL的root用户是空密码的,为了安全起见,必须修改为强密码,所谓的强密码,至少8位,由字母、数字和符号组成的不规律密码。使用MySQL自带的命令mysaladmin修改root密码,同时也可以登陆数据库,修改数据库mysql下的user表的字段内容,修改方法如下所示:
/usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用mysqladmin
#mysql> use mysql; #mysql> update user set password=password(‘upassword’) where user=’root’;
#mysql> flush privileges; //强制刷新内存授权表,否则用的还是在内存缓冲的口令
2、禁止远程连接数据库
#vi /etc/my.cf
将#skip-networking注释去掉。
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止数据库 #/usr/local/mysql/bin/mysqld_safe –user=mysql & //后台用mysql用户启动mysql
3、用户目录权限限制
默认的mysql是安装在/usr/local/mysql,而对应的数据库文件在/usr/local/mysql/var目录下,因此,必须保证该目录不能让未经授权的用户访问后把数据库打包拷贝走了,所以要限制对该目录的访问。确保mysqld运行时,只使用对数据库目录具有读或写权限的linux用户来运行。
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止数据库 #/usr/local/mysql/bin/mysqld_safe –user=mysql & //后台用mysql用户启动mysql
4、禁止MySQL对本地文件存取
可以在my.cnf中添加local-infile=0,或者加参数local-infile=0启动mysql。
#/usr/local/mysql/bin/mysqld_safe –user=mysql –local-infile=0 & #mysql> load data local infile ’sqlfile.txt’ into table users fields terminated by ‘,’; #ERROR 1148 (42000): The used command is not allowed with this MySQL version
–local-infile=0选项启动mysqld从服务器端禁用所有LOAD DATA LOCAL命令,假如需要获取本地文件,需要打开,但是建议关闭。
5、禁止远程访问
如果数据库不需要远程访问,可以禁止远程 TCP/IP 连接,通过在 MySQL 服务器的启动参数中添加–skip-networking参数使 MySQL 服务不监听任何 TCP/IP 连接,增加安全性。
九、Kill 连接(shell)
十、shell攻击获取flag(nc和POST)
十一、python
DisplayDirectory
nc
WebShell