http://drops.wooyun.org/  最专业的安全知识分享平台

http://www.freebuf.com/  关注黑客与极客

http://book.beifabook.com/product/BookDetail.aspx?Plucode=712105019        Linux安全体系分析与编程目录

最佳的策略是采用分层的方法,即将“老当益壮”的程序,如Snort、 iptables等老前辈与psad、Apparmor、SELinuxu等一些新生力量结合起来,借助强大的分析工具,我们就可以始终站在技术的前沿。

IDS新宠:PSAD。Psad是端口扫描攻击检测程序的简称,它作为一个新工具,可以与iptables和Snort等紧密合作,向我们展示所有试图进入网络的恶意企图。
老当益壮:Snort。它是一款轻量级且易于使用的工具,可以独立运行,也可以与psad和iptables 一起使用
简洁方便:chkrootkit和rootkit。Rootkit检测程序chkrootkit和rootkit Hunter也算是老牌的rootkit检测程序了
多面手:Tripwire。Tripwire是一款入侵检测和数据完整性产品

CGI漏洞

CGI是Common Gateway Interface(公用网关接口)的简称,并不特指一种语言。
Web服务器的安全问题主要包括:1)Web服务器软件编制中的BUG;2)服务器配置的错误。可能导致CGI源代码泄漏,物理路径信息泄漏,系统敏感信息泄漏或远程执行任意命令。CGI语言漏洞分为以下几类:配置错误、边界条件错误、访问验证错误、来源验证错误、输入验证错误、策略错误、使用错误等等。CGI漏洞大多分为一下几种类型:暴露不该暴露的信息、执行不该执行的命令、溢出。


一次利用show files类cgi漏洞成功入侵uta.edu的经历

http://www.chinaunix.net/bbsjh/19/23.html  cgi漏洞利用

httpd的error_log分析

  1. [Mon Apr :: ] [error] [client 46.28.206.148] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
  2. [Mon Apr :: ] [error] [client 70.46.57.98] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi
  3. [Mon Apr :: ] [error] [client 70.46.57.98] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
  4. [Tue Apr :: ] [error] [client 97.91.223.228] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi
  5. [Tue Apr :: ] [error] [client 97.91.223.228] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /

第一步获取域名与ip关系

[Tue Apr 07 11:32:01 1010 /dev/pts/0 192.168.2.250 ~]#ping www.fltdz.com
PING www.fltdz.com (58.64.136.166) 56(84) bytes of data.
64 bytes from 58.64.136.166: icmp_seq=1 ttl=48 time=79.6 ms
64 bytes from 58.64.136.166: icmp_seq=2 ttl=48 time=76.2 ms
64 bytes from 58.64.136.166: icmp_seq=3 ttl=48 time=63.2 ms
^C
--- www.fltdz.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2245ms
rtt min/avg/max/mdev = 63.245/73.044/79.639/7.069 ms

第二步请出瑞士军刀nc(netcat)
[Tue Apr 07 11:32:47 1011 /dev/pts/0 192.168.2.250 ~]#yum install nc

我用get / http/1.1来取得他的webserver的相关信息
[Tue Apr 07 11:32:47 1011 /dev/pts/0 192.168.2.250 ~]#nc -vv 58.64.136.166 80
Connection to 58.64.136.166 80 port [tcp/http] succeeded!
输入下面,然后两次回车
GET / HTTP/1.1

HTTP/1.1 400 Bad Request
Server: nginx/1.0.2
Date: Tue, 07 Apr 2015 03:43:36 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close

ac
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.0.2</center>
</body>
</html>

0

[Tue Apr 07 11:33:59 1012 /dev/pts/0 192.168.2.250 ~]#

第三步由于信息量太少请出扫描器之王nmap
[Tue Apr 07 11:46:16 1015 /dev/pts/0 192.168.2.250 ~]yum install nmap
[Tue Apr 07 11:46:16 1015 /dev/pts/0 192.168.2.250 ~]#nmap -sS -O -vv 192.168.2.2

Starting Nmap 5.51 ( http://nmap.org ) at 2015-04-07 11:46 CST
Initiating ARP Ping Scan at 11:46
Scanning 192.168.2.2 [1 port]
Completed ARP Ping Scan at 11:46, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 11:46
Completed Parallel DNS resolution of 1 host. at 11:46, 0.09s elapsed
Initiating SYN Stealth Scan at 11:46
Scanning 192.168.2.2 [1000 ports]
Discovered open port 111/tcp on 192.168.2.2
Discovered open port 22/tcp on 192.168.2.2
Discovered open port 5500/tcp on 192.168.2.2
Discovered open port 5801/tcp on 192.168.2.2
Discovered open port 5666/tcp on 192.168.2.2
Discovered open port 10000/tcp on 192.168.2.2
Discovered open port 5901/tcp on 192.168.2.2
Discovered open port 2049/tcp on 192.168.2.2
Discovered open port 1521/tcp on 192.168.2.2
Discovered open port 6001/tcp on 192.168.2.2
Discovered open port 10003/tcp on 192.168.2.2
Discovered open port 80/tcp on 192.168.2.2
Completed SYN Stealth Scan at 11:46, 1.10s elapsed (1000 total ports)
Initiating OS detection (try #1) against 192.168.2.2
Retrying OS detection (try #2) against 192.168.2.2
Retrying OS detection (try #3) against 192.168.2.2
Retrying OS detection (try #4) against 192.168.2.2
Retrying OS detection (try #5) against 192.168.2.2
Nmap scan report for 192.168.2.2
Host is up (0.00023s latency).
Scanned at 2015-04-07 11:46:25 CST for 13s
Not shown: 988 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
111/tcp   open  rpcbind
1521/tcp  open  oracle
2049/tcp  open  nfs
5500/tcp  open  hotline
5666/tcp  open  nrpe
5801/tcp  open  vnc-http-1
5901/tcp  open  vnc-1
6001/tcp  open  X11:1
10000/tcp open  snet-sensor-mgmt
10003/tcp open  documentum_s
MAC Address: E4:1F:13:80:ED:2C (IBM)
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=5.51%D=4/7%OT=22%CT=1%CU=34628%PV=Y%DS=1%DC=D%G=Y%M=E41F13%TM=552
OS:3531E%P=x86_64-redhat-linux-gnu)SEQ(SP=108%GCD=1%ISR=109%TI=Z%CI=Z%II=I%
OS:TS=A)OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7%O5
OS:=M5B4ST11NW7%O6=M5B4ST11)WIN(W1=16A0%W2=16A0%W3=16A0%W4=16A0%W5=16A0%W6=
OS:16A0)ECN(R=Y%DF=Y%T=40%W=16D0%O=M5B4NNSNW7%CC=N%Q=)T1(R=Y%DF=Y%T=40%S=O%
OS:A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=Y%T=40%W=16A0%S=O%A=S+%F=AS%O=M5B4ST1
OS:1NW7%RD=0%Q=)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=4
OS:0%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%
OS:Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=16
OS:4%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)

Uptime guess: 39.383 days (since Fri Feb 27 02:34:52 2015)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=264 (Good luck!)
IP ID Sequence Generation: All zeros

Read data files from: /usr/share/nmap
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.87 seconds
           Raw packets sent: 1103 (52.326KB) | Rcvd: 1076 (46.626KB)
[Tue Apr 07 11:46:38 1016 /dev/pts/0 192.168.2.250 ~]#

linux安全手段

  1. 改名,强密码,改端口,开防火墙
  2. 组策略,ipsec策略
  3.  
  4. 、用chattr命令防止系统中某个关键文件被修改
  5. # chattr +i /etc/fstab
  6. 然后试一下rm mv rename等命令操作于该文件,都是得到Operation not permitted 的结果
  7. 、让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作
  8. # chattr +a /data1/user_act.log
  9. 、不能修改root密码
  10. lsattr /etc/passwd /etc/shadow
  11. chattr -i /etc/passwd
  12. chattr -i /etc/shadow 再修改root的密码就可以
  13. chattr +i /etc/passwd
  14. chattr +i /etc/shadow
  15.  
  16. 策略与手段
  17. .对目录设置粘滞位限定用户只能对自己的文件进行处理 stick bit
  18. .对文件设置setuid可以让执行该命令的用户以该命令拥有者的权限去执行,setuid使用不是无限制的。出于安全目的,只能应用在Linux ELF格式二进制文件上,而不能用于脚本文件。
  19. .防止某个文件被修改 chattr
  20. .安全分区与只读分区 mount -o remountnoexecro
  21. .root无法远程登录 手段有三个
  22. .操作机,机房与公司,全部通过公钥认证,避免密码泄漏
  23. .一律在wincmd界面,用命令,这样不会有记录
  24.  
  25. 想限制root在指定终端登录。如下做后,无法登录。
  26. 、在 /etc/pam.d/sshd 添加 auth required pam_securetty.so
  27. 、在/etc/securetty 中添加
  28. pts/
  29. pts/
  30. 依然无法用root登录ssh服务器。
  31. PS:我的系统是arch。注释掉/etc/pam.d/sshd中的 pam_securetty.so,可以登录。
  32.  
  33. vim /etc/ssh/sshd_config
  34. #PermitRootLogin yes
  35. 找到这一行,去掉注释。
  36. 改为
  37. PermitRootLogin no
  38. service sshd restart
  39.  
  40. 我们经常使用SSH登录管理服务器,在享受便利的同时也会遇到一些安全隐患,最常见的就是SSH密码被暴力破解。如果我们将SSH密码设置的过于复杂,又不容易记,因此限制SSH登录方式,只能使用key登录是一个不错的选择,既可以保证安全性,又非常方便。具体的修改方式如下:
  41. 、添加信任key,并测试能否不通过密码直接登录
  42. 将公钥信息加入用户目录的SSH认证key文件下。(linux下可以用ssh-keygen命令生成,windows下可以用SecureCRT等工具生成)
  43. 比如,将如下格式的公钥信息拷贝到/root/.ssh/authorized_keys
  44. ssh-rsa AAAAB3.....H+5w== hujiankang@qiyi.com
  45. 此时,带有对应私钥的机器就已经拥有了访问该机器root账户的权限。
  46.  
  47. 完成配置后,请采用带对应私钥的机器访问服务器,如果不提示输入password,直接登录,则证明配置正确。
  48.  
  49. 、修改SSH配置文件并重启SSH服务
  50. SSH配置文件的位置:/etc/ssh/sshd_config
  51. 找到其中的两个参数配置:
  52. PasswordAuthentication
  53. ChallengeResponseAuthentication
  54. 将这两个参数值修改为no
  55. PasswordAuthentication no
  56. ChallengeResponseAuthentication no
  57. 然后重启SSH服务。
  58. # service sshd restart
  59. 现在我们就已经限制用户的SSH登录方式,只允许用key方式登录。
  60. 进一步测试,如果我们用一台不带信任key的机器尝试登录,那么会提示如下信息。
  61. Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
  62. 证明限制SSH登录方式成功。
  63.  
  64. 可以说sudo命令补偿了它的一个致命缺陷,那就是任何一个想转为root用户的人都得掌握root用户的密码
  65.  
  66. linux安全设置
  67.  
  68. .删除所有那些不能在你系统上使用的默认用户和组账户: lpsyncshutdownhalt, news, uucp, operator, games, gopher
  69.  
  70. .ROOT自动从shell注销,编辑你的配置文件”vi /etc/profile”,在某个地方加入如下行,
  71. HISTFILESIZE=”
  72. TMOUT=
  73. 我们为变量”TMOUT=”输入的这个值使用秒表示的、代表一个小时(*=3600秒)。如果你将此行加入你的“/etc/profile 文件,那么在一小时的
  74. 非活动状态之后将要系统里的所有用户自动注销。你可以在用户私人的”.bashrc”文件里面设置这个变量,可以在一个确定的时间以后自动注销他们。
  75.  
  76. .禁止并且卸载所有没有用的服务
  77. 你必须禁止一切卸载所有你不用的的服务,那样的话,你就能少担心一些。看看你的”/etc/inetd.conf”文件,用注释的方法禁用(在一行的开始加个#),
  78. 然后给inetd进程发送一个SIGHUP命令去更新到当前的”inetd.conf”文件。这样做:
  79. 第一步把”/etc/inetd.conf”更改许可权限成600,那样的话,就只有root可以读和写。
  80. [Root@kapil /]# chmod /etc/inetd.conf
  81. 第二步确保”/etc/inetd.conf”的所有者是root
  82. 第三步编辑inetd.conf文件(vi /etc/inetd.conf),并且禁止一些服务,就像:ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-, pop-, finger, auth等等,
  83. 除非你打算用它。关闭这些服务就降低一些风险。
  84. 第四步给你的inetd进程发送一个HUP信号
  85. [root@kapil /]# killall -HUP inetd
  86. 第五步设置”/etc/inetd.conf”文件为不可更改,使用 chattr 命令,这样的话,没人能修改那个文件。简单的设置文件为不可更改,执行如下命令:
  87. [root@kapil /]# chattr +i /etc/inetd.conf
  88. 这将防止对”inetd.conf”文件的任何更改(意外的更改或者其他更改)。只有超级用户root能设置或者清除这个文件属性。修改inetd.conf 简单的取消不可更改的设置,执行如下命令:
  89. [root@kapil /]# chattr -i /etc/inetd.conf
  90.  
  91. .免疫”/etc/services”文件
  92. 你必须免疫 “/etc/services 文件,防止未经授权的删除、增加服务。
  93. 免疫 “/etc/services 文件,使用命令:
  94. [root@kapil /]# chattr +i /etc/services
  95.  
  96. .禁止Control-Alt-Deletc键盘关机命令
  97. 在你的”/etc/inittab”文件里面注释掉如下的行(用一个”#”)。
  98. 编辑inittab文件(vi /etc/inittab),
  99. 更换:
  100. ca::ctrlaltdel:/sbin/shutdown -t3 -r now
  101. 读入:
  102. #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
  103. 现在,按照如下提示输入,让更改生效:
  104. [root@kapil /]# /sbin/init q
  105.  
  106. .为脚本文件整理”/etc/rc.d/init.d”下的权限
  107. 整理脚本文件的许可权限,可靠的开始和结束所有你需要在引导时运行的常态进程,这样做:
  108. [root@kapil/]# chmod -R /etc/rc.d/init.d/*
  109. 这意味着只有root可以被允许读,写,和执行目录里面的脚本文件。
  110.  
  111. 7.隐藏你的系统信息
  112. 默认状态下,当你登录到linux机器时,他告诉你Linux分布商的名字,版本,核心版本和服务器名字。这对一个骇客来说从你的服务器得到这些信息足够了,所以必须立刻用一个”Login:”提示符提示用户。
  113.   第一步
  114.   这样做,编辑”/etc/rc.d/rc.local”文件,放置”#”在如下行的前面。
  115.   # This will overwrite /etc/issue at every boot. So, make any changes you
  116.   # want to make to /etc/issue here or you will lose them when you reboot.
  117.   #echo “” >; /etc/issue
  118.   #echo “$R” >;>; /etc/issue
  119.   #echo “Kernel $(uname -r) on $a $(uname -m)” >;>; /etc/issue
  120.   #
  121.   #cp -f /etc/issue /etc/issue.net
  122.   #echo >;>; /etc/issue
  123.   第二步
  124.   然后,删除如下文件:在”/etc/”目录下的”issue.net” 和 “issue”:
  125.   [root@kapil /]# rm -f /etc/issue
  126.   [root@kapil /]# rm -f /etc/issue.net
  127.  
  128. 8.禁止未用的 SUID/SGID 程序
  129.   一个常规用户如果设置为SUID root,将能够作为root运行程序。一个系统管理员必须最小化使用这些 SUID/GUID程序,而且禁止那些不需要的程序。
  130.   第1步
  131.   从root拥有的程序里发现所有有`s’位的程序,用此命令:
  132.   [root@kapil]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
  133.   在被选中的程序上禁止suid 位,键入如下命令:
  134.   [root@kapil /]# chmod a-s [program]
  135.   
  136. 9.关闭ipv6
  137.   vi /etc/modprobe.conf,在文件中添加以下两行
  138.   alias net-pf-10 off
  139.   alias ipv6 off
  1. 我怎样才能区分程序是否使用了PAM验证?
  2.   使用ldd命令,如果这个程序的使用的动态连接库没有libpamlibpam_misc,那它肯定不使用PAM验证。然而,还有可能已经包含这两个库了,但是因为某些问题,程序无法正常工作。因此需要更好的方法来测试。
  3.   对于需要使用PAM的程序,需要在/etc/pam.d目录中为其设置配置文件。配置文件的名字被编写进程序源代码中,通常和程序的名字是一样的,但不总是这样。例如:有个程序叫作pamprog,它的PAM配置文件是/etc/pam.d/pamprog。在配置文件中,只有下面两行:
  4. auth required pam_permit.so
  5. auth required pam_warn.so
  6.   现在对其进行测试。第一行,表示所有的用户都允许通过;第二行表示想syslog中写入一条警告信息。如果测试成功,就表示程序能够使用PAM进行验证。然后你可以在配置文件中加入更为复杂的验证功能。
  7.  
  8. [root@84-monitor ~]# ldd /usr/bin/passwd|grep pam
  9. libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fdfac008000)
  10. libpam.so.0 => /lib64/libpam.so.0 (0x00007fdfab620000)
  11. [root@84-monitor ~]# ldd /bin/login|grep pam
  12. libpam.so.0 => /lib64/libpam.so.0 (0x00007f7d4c9d8000)
  13. libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007f7d4c7d0000)
  14. [root@84-monitor ~]# ldd /usr/sbin/sshd|grep pam
  15. libpam.so.0 => /lib64/libpam.so.0 (0x00007f20629b8000)
    [root@84-monitor pam.d]# ldd /usr/sbin/crond|grep pam
            libpam.so.0 => /lib64/libpam.so.0 (0x00007f6095e38000)

linux安全的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  9. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  10. Linux 江湖系列阶段性总结

    引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...

随机推荐

  1. Spring中配置文件applicationContext.xml配置详解

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  2. iOS 开发之推力动画效果

    步骤: 1.使用single view application 创建新的项目 2.在.h文件中需要遵守两个协议<UICollisionBehaviorDelegate,UIGestureReco ...

  3. 产生n位元的所有格雷码

    原文链接:http://blog.csdn.net/beiyeqingteng/article/details/7044471 问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集 ...

  4. 13、SQL基础整理(流程控制begin……end)

    流程控制 begin ……end将一个语句块包含起来,中间可以写任何语句 格式: begin--开始 select *from student end--结束 if declare @bianlian ...

  5. js去掉空格

    去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim.ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写.下面的实现方法是用到了正则表达式,效率不错,并把这三 ...

  6. 【转】Hbase shell 常用命令

    不定时更新常用好用命令. --------------------------------------------------------------------------------------- ...

  7. 使用jQuery设置disabled属性与移除disabled属性

    Readonly只针对input和textarea有效,而disabled对于所有的表单元素都有效,下面为大家介绍下使用jQuery设置disabled属性   表单中readOnly和disable ...

  8. CentOS 6.3配置PPTP VPN的方法

    1.验证ppp 用cat命令检查是否开启ppp,一般服务器都是开启的,除了特殊的VPS主机之外. [root@localhost1 /]# cat /dev/ppp cat: /dev/ppp: No ...

  9. eoe资料

     -------------------------------https://github.com/waylau/vpngate-mirrors   FQ软件.方法 android优化: http: ...

  10. html部分---样式属性;

    <!--大小--> width:宽度 height:高度 <!--背景与前景--> "background-color:#0F0; 背景颜色 background-i ...