题目来源:http://2358205.blog.51cto.com/2348205/1688323
http://mofansheng.blog.51cto.com/8792265/1627907
大部分都自己做的,部分参考了原帖博主的答案
1、Linux开机流程
BIOS开机自检→MBR引导→加载GRUB→加载linux内核→运行init进程,读取/etc/inittab→执行/etc/rc.d/rc.sysinit脚本→执行/etc/rc.d/rc脚本,运行/etc/rc.d/rcX.d中的脚本,X表示inittab中指定的运行级别→执行/etc/rc.d/rc.local脚本→启动mingetty进程,等待用户登陆
2、TCP三次握手,四次挥手
说明:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
第一次握手————建立连接时,客户端发送syn包(syn=j)到服务器,并进入syn_send状态,等待服务器确认;
第二次握手————服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即syn+ack包,此时服务器进入syn_recv状态;
第三次握手————客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务器进入established状态,完成三次握手,客户端与服务器开始传送数据。
第一次挥手————客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态;
第二次挥手————服务器收到FIN后,发送一个ACK包给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态;
第三次挥手————服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态;
第四次挥手————客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
3、如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0
iptables -t nat -A PREROUTING -o eth0 -d 192.168.16.1 -p tcp --dport 80 -j REDIRECT --to-ports 8080
4、什么是NAT,常见分为那几种,DNAT与SNAT有什么不同,应用事例有那些?
NAT(Network Address Translation,网络地址转换)是将IP数据包头中的IP地址转换为另一个IP地址的过程。分为DNAT (目的网络地址转换)和SNAT(源网络地址转换)
SNAT主要是用于内网主机通过路由器或网关访问外网
DNAT将外部地址和端口的访问映射到内部地址和端口
5、包过滤防火墙与代理应用防火墙有什么区别,能列举几种相应的产品吗?
过滤防火墙工作在网络层,它只对IP包的源地址、目标地址及相应端口进行处理,因此速度比较快,能够处理的并发连接比较多,缺点是对应用层的攻击无能为力。
代理服务器防火墙工作在应用层,它将收到的IP包还原成高层协议的通讯数据,比如http连接信息,因此能够对基于高层协议的攻击进行拦截。缺点是处理速度比较慢,能够处理的并发数比较少。代理服务器是防火墙技术的发展方向,众多厂商都在提高处理速度的同时基于代理开发防火墙的更高级防护功能。
6、iptables是否支持time时间控制用户行为,如有请写出具体操作步骤。
iptables是支持时间控制的,以下摘抄自man iptables:
EXAMPLES. To match on weekends, use:
-m time --weekdays Sa,Su
Or, to match (once) on a national holiday block:
-m time --datestart 2007-12-24 --datestop 2007-12-27
Since the stop time is actually inclusive, you would need the following stop time to not match the first second
of the new day:
-m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59
During lunch hour:
-m time --timestart 12:30 --timestop 13:30
The fourth Friday in the month:
-m time --weekdays Fr --monthdays 22,23,24,25,26,27,28
7、说出你知道的几种linux/unix发行版本。
Linux:RHEL、CentOS、Fedora、SuSE、Debian、Ubuntu等
Unix:FreeBSD、Solaris、AIX、Mac OS X等
8、列出linux常见打包工具并写相应解压缩参数(至少三种)
tar
gzip
bzip2
9、计划每星期天早8点服务器定时发送一封内容为:test的邮件。发信人:user1@ab.com 收信人:test1@example.com,如何实现?
crontab -e
00 08 * * 7 echo "test" | /bin/mail -r user1@ab.com -s test test1@example.com &>/dev/null
10、我们都知道,dns既采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计?
首先了解一下TCP与UDP传送字节的长度限制: UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
区域传送时使用TCP:
辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多,并且TCP是一种可靠的连接,保证了数据的准确性。
域名解析时使用UDP:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
11、一个EXT3的文件分区,当使用touch test.file命令创建一个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况,说说你的理由。
df -i 查看inode使用情况
一般是inode满了造成的
12、我们都知道FTP协议有两种工作模式,说说它们的大概的一个工作流程?
主动模式FTP:
命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 <- 服务器 20端口
被动模式FTP:
命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 -> 服务器 >1024端口
下面是主动与被动FTP优缺点的简要总结:
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
解决办法:使用被动模式,可以把数据连接的端口固定(大于1024小于65535),在服务器端的防火墙上开放该端口
13、编写个shell脚本将当前目录下大于100K的文件转移到/tmp目录下
find . -size +100K xargs -I {} mv {} /tmp
14、apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式?
Apache主要有两种工作模式:prefork(预派生,默认安装模式)和worker(支持混合的多线程多进程的多路处理模块,可以在编译的时候加参数--with-mpm=worker指定为worker模式)
prefork的特点:
1、prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销。
2、可以防止意外的内存泄漏,但这种模式消耗的内存比较大;
3、在服务器负载下降的时候会自动减少子进程数
worker的特点:
worker MPM 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,假如一个线程崩溃,整个进程就会连同其任何线程一起"死掉".由于线程共享内存空间,所以一个程式在运行时必须被系统识别为"每 个线程都是安全的"。
15、编写shell脚本获取本机的IP/netmask。
ifconfig | awk -F "[ :]+" 'NR==2 {print $4}'
16、简述DDOS攻击的原理,有没有解决办法?有,如何解决?
分布式服务拒绝攻击就是用一台主服务器来控制N台肉鸡对目标服务器进行合理的资源请求,导致服务器资源耗尽而不能进行正常的服务。
几种流行的DDOS攻击方式:SYN/ACK FLOOD攻击、TCP全连接攻击、CC攻击(百科:攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS,和伪装就叫:cc(ChallengeCollapsar)。CC主要是用来攻击页面的。)
一个简单的测试: 首先是网站如果打不开的话,可以尝试着用3389连接一下服务器看看,然后还可以用PING命令来测试,再一种方式就是用telnet来登录80端口看看,看会不会出现黑屏。如果这些方式测试都连接不上的话,那就说明受到DDOS攻击了。
然后如果除了80端口之外的其他端口连接都正常,PING命令测试也正常,但就是80端口访问不了,然后看看IIS是否正常,可以把80端口改成其他端口测试,如果可以正常访问,那就说明很可能受到CC攻击。
防御DDOS攻击:
<1>要有充足的网络带宽和稳定安全的机房:选择口碑好、服务好、安全防护好点的机房,网络带宽直接决定了能抗受攻击的能力。
<2>软硬设备的防护:硬件DDOS防火墙黑洞、冰盾都不错,软件如web服务器都有相应的ddos防护模块,iptables,做单IP的并发限制,流量限制,syn及部分攻击限制。
<3>网站架构优化,避免单点提供服务,集群,冗余,负载均衡、缓存技术的架设。
<4>服务器系统自身的优化及安全参数调配
<5>采用高性能的网络设备
17、如何查看占用80端口的进程,并清理该端口进程。
lsof -i :80
pkill 或 kill
18、如何查看当前用户的家目录是什么?
echo $HOME
19、如果设置 umask 为 001 , 那么用户默认创建的目录和文件的权限是什么样子的?
目录:776 文件:666
20、出于安全考虑,如何实现让别人ping不通你的在线的服务器。
有多种方法
防火墙上用ACL封ICMP协议或者在服务器上使用iptables封icmp
或者在服务器上修改内核参数:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
21、怎样防止他人在服务器前通过按下 ctrl+alt+del 强行重启系统(提示,仔细看/etc/inittab)
vim /etc/init/control-alt-delete.conf
exec /sbin/shutdown -r now "Control-Alt-Delete pressed" 这一项注释掉,保存退出
22、当在对服务器进行大负荷操作的时候,你不希望现在有普通用户登录上来,你该怎么做?不能剪网线。
touch /etc/nologin
创建一个nologin文件,此文件为特殊文件,创建之后所有普通用户不能登录;系统维护结束后删除此文件,用户可以恢复登录;只限于shell登录用户,本身shell为/sbin/nologin 的用户本身就无法登录shell,不受影响;
23、你新建了一批用户,出于安全考虑,要求这些用户在第一次登录的时候 就必须要更改密码,怎么实现?
查看密码和账户过期信息:chage -l username
将密码设置为过期,用户登陆必须要更改密码:chage -d0 username 或 passwd -e username
24、如何把一个目录下的所有文件(不含目录)权限改为644?
find ./ ! -type d -exec chmod 644 \;
25、请实现下面这个需求:只允许使用普通账户登陆,而普通账户登录后,可以不输入密码就能sudo切换到root账户,root是不允许远程登录的。
vim /etc/ssh/sshd_config
PermitRootLogin 设置为no,禁止root远程登录
/etc/init.d/sshd reload 重新加载sshd配置文件生效
visudo,添加一行:user ALL=(root) NOPASSWD: /bin/su
26、 如何使文件只能写不能删除? 如何使文件不能被删除、重命名、设定链接接、写入、新增数据?
chattr +a 只能向文件中添加数据,而不能删除
chattr +i 文件不能被删除、改名、设定链接关系,同时不能写入或新增内容
27、用ls 查看目录或者文件时,第二列的数值表示什么意思?如果一个目录的这列的值为3,那么这个3是如何得到的?
第二列的数值表示硬链接数,默认情况下,新建一个目录,该目录就会包含一个指向自身的目录“.”和指向其上一级目录的父目录“..”,该数值是2,若分别在新建的目录里建一个文件和一个目录,那么再次查询时,就会发现该数值变为了3,由此类推..