P2DR模型
 

# nmap -sS -P0 -O www.uplooking.com
# curl -I http://www.uplooking.com


http://www.up4g.com/plus/view.php?aid=16
http://www.up4g.com/cqjy/105.html

真实UID
 用户UID是什么,程序执行的时候用该UID
有效UID
 程序执行过程中所用的有效身份


# useradd -s /sbin/nologin -d /dev/null mysql
 -f, -e

 

rootkit

 
用户的登录过程
 login ---> 执行shell(默认/bin/bash)---> ~/.bash_profile ---> ~/.bashrc --> /etc/bashrc

 
 ~/.bash_history
 图形界面使用终端的时候,或者直接在文本终端logout之后,才会记录历史命令
 升级bash,使用bash-4.1以上版本


sudo
 减少root登录次数。
 减少root误操作的机率
 把管理权限细分到不同的帐号
  把网络相关的管理命令授权给某个帐号
  把文件系统的管理命令授权给别的帐号
 日志形式记录了所有具体的操作。

与su区别:
 执行管理操作的时候,不需要root密码。


sudo使用
 /etc/sudoers

# visudo  <---支持语法检测,保证该文件只有一个用户在编辑

bean     ALL=/bin/chown,/bin/chmod
 <--允许bean在所有机器上(ALL)以root帐号的身份执行chown,chmod指令(绝对路径)


$ sudo -u root chown tom:tom /tmp/bingdu
口令:  <---bean密码
$ sudo -u root chmod 777 /tmp/bingdu

 《--查看日志/var/log/secure  关键字sudo


 

bean    ALL=/bin/chown,(tom)/bin/chmod
 <--允许bean在所有机器上(ALL)以root帐号的身份执行chown,以tom身份执行chmod指令(绝对路径)

bean    ALL=/bin/chown,(ALL)/bin/chmod
 <--允许bean在所有机器上(ALL)以root帐号的身份执行chown,以任意身份执行chmod指令(绝对路径) 


练习
sudo实现:
 允许tom查看任何人的家目录的文件列表
 允许bean删除tom的文件

tom  ALL=/bin/ls
bean ALL=(tom)/bin/rm


sudo完整的语法格式:
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]....


例子2:不需要输入密码就能实现sudo的操作
bean    dev.upl.com=(root)PASSWD:/bin/chown,(tom)NOPASSWD:/bin/chmod

bean$ sudo -l
User bean may run the following commands on this host:
    (root) /bin/chown
    (tom) NOPASSWD: /bin/chmod

 


例子3:使用别名,灵活定义规则

Host_Alias      WEBSERVERS = dev.upl.com,node2.upl.com
User_Alias      WEBADMIN = tom,bean
Cmnd_Alias      NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping

WEBADMIN        WEBSERVERS = NETWORKING


$ sudo -u root /sbin/route del -net 169.254.0.0 netmask 255.255.0.0


=============================================================
Pam
 
 pam配置文件/etc/pam.d/*
 模块的路径/lib/security/*

四个管理模块
auth 
 判断用户是否存在,密码是否正确
 |
 \/
account
 判断帐号是否过期,是否允许登录
 |
 \/
password
 控制密码策略,修改密码的复杂度,时间间隔。
 |
 \/
session
 登录成功,到退出登录之前的过程
 
 每个模块都可以有多条规则,规则从上往下判断

 

pam规则的语法:

管理模块 控制标记 具体的模块路径(第三方判断程序)


标记有哪些?
 required 
  必要条件,该条件的规则必须满足,否则后面的规则就算全部都满足,最终也会判断失败。如果该条件满足,该模块的判断还需要参考后面同一个模块的剩余的规则判断。如果该条件不满足,不会马上回返失败的结果,而是把该模块剩下的所有规则判断完毕才会返回失败结果。

 requisite
  必要条件,该条件的规则必须满足,否则后面的规则就算全部都满足,最终也会判断失败。如果该条件满足,该模块的判断还需要参考后面同一个模块的剩余的规则判断。如果该条件不满足,马上回返失败的结果,不会把该模块剩下的所有规则判断完毕才会返回失败结果。

 sufficient
  充分条件,该条件满足,就可以完成整个阶段判断,不管后面还有多少条规则,是否都失败,都不影响。如果该条件判断返回失败的结果,变成optional的条件。
 
 optional
  可选,不管判断结果如何,都不会影响整个模块的判断结果


查看模块的帮助信息
 man pam_env
 man 模块的名字

 


例子1:禁止所有普通帐号登录系统,root只能在tty1登录

# ldd /bin/login | grep pam
# man pam_securetty
# vim /etc/pam.d/login
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so  <---限制root的功能
...

account    required     pam_nologin.so  <---禁止普通帐号登录


# vim /etc/securetty
tty1  《---其他删除

# touch /etc/nologin


例子2:限制用户的登录时间,只能在规定的时间登录系统
# vim /etc/pam.d/login
account    required     pam_nologin.so
account    required     pam_time.so  <---
account    include      system-auth

语法
#       services;ttys;users;times

# vim /etc/security/time.conf

login;tty2;bean;!Al1600-1700
login;tty2;tom;Al1600-1700 《---指定时间tom可以在tty2登录,其他终端不受影响。

例子3:控制用户的资源使用限制值

# ulimit -a  <--查看都是当前终端的临时设定
# ulimit -SHn 204800   《--当前终端下该用户能够打开204800个文件

# vim /etc/pam.d/system-auth
session     required      pam_limits.so

# vim /etc/security/limits.conf 

apache  soft    nproc   1600
apache  hard    nproc   1600
apache  soft    nofile  65535
apache  hard    nofile  65535
  <---重启电脑,或者重启xiwindow

# vim /etc/httpd//conf/httpd.conf
<IfModule prefork.c>  #进程模式
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      1500
MaxClients       1500  <---最多打开1500个进程
MaxRequestsPerChild  4000
</IfModule>

# service httpd restart

 

ab -c 300 -n 20000 http://ip/