本地安全



(一、)本地安全
hash  单向散列(1)把无穷集合变成有穷集合 (2)稳定 (3)不可逆
chage命令修改 /etc/shadow 文件的属性
authconfig-tui  验证配置命令
密码设置方式修改,把md5和shadow文件取消并使用 passwd 命令再次设置密码再看看/etc/passwd文件,你会发现密码已经加到/etc/passwd文件里了,并且加密方式也不同了。
传统Unix系统使用 DES加密 Linux系统中,若以 $1$ 开头就是MD5算法(打开/etc/shadow文件看看就知道了)

crypt.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char argv[])
{
    printf("%s/n",crypt(argv[1],argv[2]))
}

用 gcc -l crypt crypt.c -o crypt 进行编译

(二、)密码安全
(1)提高密码复杂度 ---> 防止暴力破解
(2)密码定期修改 ---> 防止黑客得出碰撞值(chage)
(3)使用shadow文件 ---> 权限限制不让其他用户访问(authconfig-tui)
(4)使用更加复杂的加密算法(默认MD5)

(三、)权限安全
|| --------------------> ||
subject           object
进程            文件
Linux把进程分为用户对象进行对文件进行反问控制

基本权限位(u,g,o)
chmod 755 dir
chmod o+x file
高级权限位(suid,guid,sticky) : suid对可执行文件,guid针对目录,sticky针对目录下的不同用户误删除别人文件问题

sudo
新建用户useradd neco
        passwd    neco
修改/etc/passwd文件  把gid,uid置为0
锁定root
    pass -l root
Sudo机制
    维护一个授权列表,而且此类用户只能运行少数系统命令。
    命令:
        visudo
                neco    ALL=(root)    NOPASSWD:/sbin/fdisk,PASSWD:/sbin/mkfs.ext3,PASSWD:/bin/bash
                                    (不需要输入密码)        (需要输入密码)

文件访问控制列表(getfacl,setfacl)
让用户zorro对文件有读写权限
setfacl -m u:zorro:rw  file
setfacl -x u:zorro:rw  file
getfacl a

setfacl -m g:zorro:rw  a
setfacl -x g:zorro:rw  a

文件系统属性(lsattr,chattr)
文件系统挂载参数中的权限设置
以同步只读的方式挂载
Mout -o r,sync /dev/sda5 /mnt
磁盘配额(quota)
专用 ---> selinux

(四、)IDS 、信息完整性检测(文件信息 data,metadata)

根据文件内容(data)找 :grep,awk,sed,md5sum
根据文件属性(metadata)找 : find

确定文件是否被别人读取 ---> 日志
确定文件是否被别人修改 ---> 备份加区分(diff)或 find,awk,sed混合使用
显示除root以外的超级管理员
awk -F: '$3==0 && $1 != "root" {print $1}' /etc/passwd
 
使用 md5sum监控文件内容是否被修改
[root@stu ~]# md5sum /etc/passwd
f0ae736aa3d4c58642f9c93170ec8af6  /etc/passwd
使用md5sum对目录下的文件求哈希值
find /etc/ -type f -exec md5sum {} /; > /tmp/etc/md5sum.log
修改目录下的文件(这里只是拿/etc/passwd做例子)
vim /etc/passwd
再求哈希值
find /etc/ -type f -exec md5sum {} /; > /tmp/etc/md5sum.log.1
比较
diff /tmp/etc.md5sum.log{,.1}

使用rpm -V 查看已经安装的包的哪些文件被修了
rpm -V httpd
S.5....T  c /etc/httpd/conf/httpd.conf

相应显示对应的意思:
S file Size differs
    M Mode differs (includes permissions and file type)
    5 MD5 sum differs
    D Device major/minor number mismatch
    L readLink(2) path mismatch
    U User ownership differs
    G Group ownership differs
    T mTime differs

显示系统已经安装的所有包的更改信息
rpm -Va
(五、)用户信息
显示当前用户所属组
[root@mail ~]# groups
root bin daemon sys adm disk wheel

用户详细信息
[root@mail ~]# id
uid=0(root)gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

[root@mail ~]# finger root
Login: root                             Name: root
Directory: /root                        Shell: /bin/bash
On since Fri May 29 15:20 (CST) on :0 (messages off)
On since Fri May 29 15:20 (CST) on pts/1 from :0.0
No mail.
No Plan.

查看当前在线用户
who  w
查看最近登录用户
last  lastlog
系统登录日志
/var/log/secure

建立命名管道
[root@mail ~]# echo "my pp" > pp    处于阻塞(blocking)状态
[root@mail ~]# cat pp                解除上述阻塞状态
my pp

显示除root以外的超级管理员
awk -F: '$3==0 && $1!="root" {print $1}' /etc/passwd


(六、)pam模块
PAM的分层体系结构

应用程序层-------应用接口层(PAM  API 配置文件)----------鉴别模块

第二层:应用接口层有两类API接口:
(1)用于调用下层特定模块的接口
(2)提供下层模块与应用程序间通信的接口
     鉴别类接口:pam_authenticate()用于鉴别用户

查看是否支持pam模块
[root@mail ~]# ldd /usr/sbin/vsftpd |grep 'pam'
        libpam.so.0 => /lib/libpam.so.0 (0x00b9f000)

pam模块的存放路径
[root@mail ~]# ls /lib/security/

查看验证信息
[root@mail ~]# vim /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    include      system-auth
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    optional     pam_keyinit.so force revoke

以上是login程序的pam验证的信息
底层模块类型:
auth:用户名|密码相关信息的鉴别模块
account :非用户名密码相关信息(如时间或网段)--auth 和 account验证成功后即可登录
session :登录后限制当前使用资源的会话类模块
password :登录后更新密码时候验证


条件:
required :必要的,即使出错也不会马上报错,而是继续验证下去,但是验证已经失败了。
include :包含其他文件
optional :不会影响结果
sufficient : 如果成功则直接返回成功,若不成功则往下走
requisite : 如果成功则往下走,若不成功则直接报错

pam_securetty.so提供标准的Unix安全tty的检查, 除非PAM_TTY的值列在 /etc/securetty里, 否则对root的认证将会失败. 对所有其他用户, 则为成功.

可以编辑安全tty列表的值
vim  /etc/securetty

(七、)pam 实例应用
pam帮助文档
cd /usr/share/doc/pam-0.99.6.2/html/
firefox Linux-PAM_SAG.html
一、限制所有用户直通tty3登录
1. vim /etc/pam.d/login
在account    required     pam_nologin.so上加上一行验证:
account    required     pam_access.so
2.然后配置pam_access.so模块的配置信息
vim /etc/security/access.conf
-:ALL:ALL EXCEPT  tty3
以上配置的具体意思
 -:拒绝,ALL:所有用户,ALL:所有终端  EXCEPT : 除了之外。
举例: -:ty:ALL EXCEPT 192.168.0.  .ty.com
上面例子的意思限制ty只能从192.168.0.0/24 .ty.com登录

二、当多个应用都需要同一个模块作验证,但是他们要求的验证方式又不同的时候,我们可以分别指定配置文件:
1.vim /etc/pam.d/sshd
在account    required     pam_nologin.so上加上一行验证:
account    required     pam_access.so accessfile=/etc/sshdaccess.conf
指定配置文件存到哪里
2.vim /etc/sshdaccess.conf
-:ty:ALL EXCEPT 192.168.1.
限制ty只能从192.168.1.0/24网段ssh登录
--------------------------------------
+ : root : 192.168.1.18 192.168.1.17
- : root : ALL  
只允许192.168.1.18 192.168.1.17进行SSH访问

三、设置SSHD黑名单(pam_listfile.so)该模块目前只有RHLE支持
1.vim /etc/pam.d/sshd
在第一行前插入:
auth       required     pam_listfile.so file=/etc/sshdusers item=user sense=deny

解释:file= 是指定黑名单文件  item= 名单形式(可以是用户名也可以是IP)
sense= 权限(deny黑 allow 白)
2.编写黑名单
vim /etc/sshdusers
ty
haha


四、对sshd进行时间限制(pam_time.so)
1.vim /etc/pam.d/sshd
在account    required     pam_nologin.so上插入一行:
account    required     pam_time.so
2.编辑pam_time.so模块的配置文件
vim /etc/security/time.conf
*;*;*;MoTuWeThFr0900-1800
解释:工作日的9点到18点允许访问
sshd;*;root;!Al1400-1437
解释:14点到14点37分不可以ssh

五、利用pam_limits.so模块对系统资源限制
1.vim /etc/pam.d/sshd
在第一行前插入:
auth       required     pam_limits.so conf=/etc/security/limits.conf

2.vim /etc/security/limits.conf
apache  hard  nporc  3
解释:硬限制apache只能打开三个进程
iii   -    maxlogins  4
解释:限制登录用户iii的数量


(八、)tcp-wrappers
一、/etc/hosts.deny 文件的使用例子
vim /etc/hosts.deny
sshd:192.168.0.4 : spawn shutdown -h now
#当192.168.0.4来访问时就执行关机命令

ALL:ALL: spawn echo "`date` %a want acess my sshd!" >> /tmp/sshd.log
#把所有试图连接的用户信息记录到指定的文件里

sshd:ALL:severity local2.info
#把试图以sshd方式连接的拒绝掉,并且把他的日志对象定义为local2.info

定义local2.info日志信息的记录方式
vim /etc/syslog.conf
local2.info  /var/log/sshd.log

/etc/hosts.deny 与 /etc/hosts.allow 的帮助文件 man 5 hosts_access 、man 5 hosts_options
tcp-wrappers 传输层,pam 应用层,层次低的效率更高
(九、)chroot

---------------------------
实现: test 用户登录后只有rsync 可以使用 不能查看任何命令和文件 锁定于/chroot 目录

[root@liufeng ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5 (Tikanga)
Kernel /r on an /m

[root@liufeng ~]#useradd test
[root@liufeng ~]#export _DIR=/chroot
[root@liufeng ~]#export _USER=test

拷贝文件
[root@liufeng ~]#mkdir -pv $_DIR/{etc,bin,dev/pts,lib,home/$_USER,proc}
[root@liufeng ~]#/bin/mknod -m 644 $_DIR/dev/tty1 c 4 1
[root@liufeng ~]#/bin/mknod -m 644 $_DIR/dev/tty2 c 4 2
[root@liufeng ~]#/bin/mknod -m 644 $_DIR/dev/tty3 c 4 3
[root@liufeng ~]#/bin/mknod -m 644 $_DIR/dev/tty4 c 4 4
[root@liufeng ~]#/bin/mknod -m 644 $_DIR/dev/tty5 c 4 5
[root@liufeng ~]#/bin/mknod -m 644 $_DIR/dev/tty6 c 4 6
[root@liufeng ~]#/bin/mknod -m 444 $_DIR/dev/urandom c 1 9
[root@liufeng ~]#/bin/mknod -m 666 $_DIR/dev/zero c 1 5
[root@liufeng ~]#/bin/mknod -m 666 $_DIR/dev/null c 1 3
mknod -m 666 /dev/ptmx c 5 2
[root@liufeng ~]#mount devpts $_DIR/dev/pts -t devpts
[root@liufeng ~]#mount proc $_DIR/proc -t proc

拷贝要执行的文件
bash false pwd rsync true
看你的需要。我只需要这些
cp 到 $_DIR/bin/

还要拷贝这些执行文件所需要的lib
[root@liufeng ~]# ls /chroot/lib/
ld-2.5.so      ld-lsb.so.3 libacl.so.1      libattr.so    libattr.so.1.1.0 libc.so.6     libdl.so.2           libnss_files.so.2 libpthread-2.5.so librt-2.5.so libtermcap.so.2
ld-linux.so.2 libacl.so    libacl.so.1.1.0 libattr.so.1 libc-2.5.so       libdl-2.5.so libnss_files-2.5.so libpopt.so.0       libpthread.so.0    librt.so.1   

可以用ldd 命令查看你要拷贝的lib

[root@liufeng ~]# ldd /bin/bash
linux-gate.so.1 => (0x00469000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x00426000)
libdl.so.2 => /lib/libdl.so.2 (0x00368000)
libc.so.6 => /lib/libc.so.6 (0x00229000)
/lib/ld-linux.so.2 (0x0020c000)
以上列出的这些都要拷贝到 $_DIR/lib/ 否则会有 error while loading shared libraries: xxx: cannot open shared object file: No such file or directory这样的错误

配置文件
[root@liufeng ~]#echo "$_USER    $_DIR" >>/etc/security/chroot.conf
[root@liufeng ~]#echo "session      required     pam_chroot.so" >>/etc/pam.d/sshd
[root@liufeng ~]#echo "session    required     pam_chroot.so" >>/etc/pam.d/login
[root@liufeng ~]#grep "root:/|$_USER" /etc/passwd > $_DIR/etc/passwd
[root@liufeng ~]#grep "root:/|$_USER" /etc/group > $_DIR/etc/group
[root@liufeng ~]#chown -R root:root $_DIR
[root@liufeng ~]#chown -R $_USER:$_USER $_DIR/home/$_USER

最后
[root@liufeng ~]#/etc/init.d/sshd restart


chroot深入应用,将apache设定工作在chroot模式下
http://www.linuxtone.org/html/07/t-3307.html
http://www.faqs.org/docs/securing/chap29sec254.html
---------------------------------
#!/bin/bash
USER=$1
useradd $USER
export _DIR=/home/$USER
export _USER=$USER
echo "123" | passwd --stdin $USER
mkdir -pv $_DIR/{etc,bin,dev/pts,lib,home/$_USER,proc}
/bin/mknod -m 644 $_DIR/dev/tty1 c 4 1
/bin/mknod -m 644 $_DIR/dev/tty2 c 4 2
/bin/mknod -m 644 $_DIR/dev/tty3 c 4 3
/bin/mknod -m 644 $_DIR/dev/tty4 c 4 4
/bin/mknod -m 644 $_DIR/dev/tty5 c 4 5
/bin/mknod -m 644 $_DIR/dev/tty6 c 4 6
/bin/mknod -m 444 $_DIR/dev/urandom c 1 9
/bin/mknod -m 666 $_DIR/dev/zero c 1 5
/bin/mknod -m 666 $_DIR/dev/null c 1 3
/bin/mknod -m 666 $_DIR/dev/ptmx c 5 2
mount devpts $_DIR/dev/pts -t devpts
mount proc $_DIR/proc -t proc
cp -a /etc/security/ $_DIR/etc/
cp /etc/environment $_DIR/etc/
cp -p /bin/bash $_DIR/bin/bash
cp -p /bin/su   $_DIR/bin/su
cp -p /bin/ls   $_DIR/bin/ls
cp -p /bin/pwd  $_DIR/bin/pwd
cp -p /bin/cat  $_DIR/bin/cat
cp -p /bin/vi  $_DIR/bin/vi
for i in bash su ls pwd cat vi 
do
     for j in `ldd /bin/$i | grep '/'  | awk -F"/lib/" '{ print  "/lib/"$2}' | sed 's/(.*)//'`
     do
                cp -p  $j  $_DIR/lib/
     done
done
#/etc/pam.d/sshd
#session     required     pam_chroot.so
#
echo "$_USER    $_DIR" >>/etc/security/chroot.conf
grep "root:/|$_USER" /etc/passwd > $_DIR/etc/passwd
grep "root:/|$_USER" /etc/group > $_DIR/etc/group

chown -R root:root $_DIR
chown -R $_USER:$_USER $_DIR/home/$_USER
chmod 755 /home/$_USER
/etc/init.d/sshd restart

------------------











  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值