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/