下面介绍的是服务与安全管理的tcp_wrapper、sudo、nsswitch、pam


一、tcp_wrapper

1、tcp_wrapper基础 --------------------tcp封装器

 tcp_wrapper依赖的库文件:libwrap.so

(1)、判断是否受tcp_wrapper访问控制:动态链接(libwrap.so库文件)、静态链接(strings命令)

  动态链接至libwrap.so库的应用程序:# ldd /PATH/TO/APP_FILE | grep libwrap

  静态库文件应用程序:# strings COMMAND

(2)、常见的基于tcp_wrapper访问控制的服务:sshd,vsftpd

  几种服务:openssh、http、mysql、vsftpd、nfs、samba


2、tcp_wrappers的配置文件 ----------------------/etc/hosts.allow、/etc/hosts.deny

  格式:daemon_list : client_list [[[: option] : option] ...]


(1)、daemon_list --------------应用程序文件名(/usr/sbin/*)

  daemon_list的三种方式:单个程序文件名、多个程序文件名(逗号隔开)、所有应用程序(ALL)


(2)、client_list ------------3种方式

  单个IP地址或主机名、网络地址、访问控制列表

  client_list的四种访问控制列表:ALL、KNOWN、UNKNOWN、PARANOID


(3)、: option --------------3类选项

  option的三类选项为:deny、allow、spawn

  spawn:%c -------------------客户端信息

         %s -------------------服务端信息


例:

daemon_list:ALL -------------所有的应用程序(进程)

client_list:172.16.0.0/255.255.0.0

             172.16.

             ALL ------------所有的主机

             KNOWN ----------能正常访问的主机

             UNKNOWN ---------不能正常访问的主机

: option:deny:拒绝访问规则,hosts.allow文件中

          allow:允许访问规则,hosts.deny文件中

          spawn:生成、发起、执行


例:

vsftpd : 172.16.0.0/16 : allow ---------------/etc/host.allow(默认允许)

vsftpd : ALL EXCEPT 172.16. EXCEPT 172.16.67.1 ------------------/etc/hosts.deny(默认拒绝)


例:针对sshd、vsftpd服务进行记录

sshd, vsftpd : ALL : spawn /bin/echo $(/bin/date) %c attempt login %s >> /var/log/tcpwrapper.log



二、sudo

1、sudo基础 ---------------以root用户身份执行

 sudo的授权配置文件:/etc/sudoers


2、配置文件内容 ---------------/etc/sudoers

 /etc/sudoers内容有两类:、别名的定义、用户规格(授权)

(1)、别名定义 --------------别名全大写

  格式:Alias_Type ALIASNAME = item1, item2, ...

  Alias_Type:User_Alias、Host_Alias、Runas_Alias、Cmnd_Alias:

  Alias_Type -------------使用驼峰式

  ALIASNAME -------------使用全大写 

  例:User_Alias USERADMINUSERS = tom, jerry, centos, suse, %myclass -----------------“%”在别名定义中,表示组。

      Cmnd_Alias USERADMINCOMMANDS = /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root, /usr/sbin/usermod


(2)、用户规格(授权项): -----------------编辑/etc/sudoers,每行只有一个授权

  格式为:who  where=(whom)  what

  格式各部分解释如下:

  who ----------授权的目标用户(5种方式)

      username ---------------单个用户名称

      #uid ------------单个用户UID

      %groupname ------------指定组内的所有账户

      %#gid -----------指定知道的GID的组,其内的所有用户账户

      user_alias -------------定义过的别名

  

  where --------------授权的客户端主机(3种)

      ip/hostname ------------单个主机

      Network Address --------------网络地址

      host_alias -------------定义过的别名


  whom -----------------真实身份,一般为root


  what -------------授权运行的命令

      command -------------单个命令

      directory ------------目录下的所有命令

      sudoedit ---------------授权可以执行sudo命令的用户

      cmnd_alias ----------定义过的别名


例:little ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root 

例:little ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/su ! /usr/bin/su root


注:visudo命令:-----------------编辑/etc/sudoers文件,具有【语法纠错】功能


(3)、sudo命令:----------------用户授权

  格式:sudo [option]... command

  常用选项:

  -u user --------------指定用户身份

  -l[l] [command] ------------------显示能以sudo运行的所有命令


(4)、授权中的标签

  PASSWD --------------要有密码

  NOPASSWD -------------可以没有密码


  例:Cmnd_Alias USERADMINCOMMANDS = NOPASSWD: /usr/sbin/useradd, PASSWD: /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root, /usr/sbin/usermod


sudo的特殊命令:passwd、su、sudo、sudoedit



三、nsswitch

1、nsswitch基础 ---------------名称服务开关

 名称解析:将自然语言,解析为机器语言的数字符号。

 解析:根据关键字查找存储库,找出与关键字相关的信息。

 通用框架:应用程序的调用接口

 Linux中实现名称解析的通用框架:库(/lib64/libnss*, /usr/lib64/libnss*)


2、解析库应用程序的配置文件 ----------/etc/nsswitch.conf

  格式:db: store_format1 store_format2 ....


  查找键的返回状态:(4种)success、notfound、unavail、tryagain

  状态返回值的响应:return、continue

3、getent命令 ------------从名称服务器得到响应

  格式:getent database [key]



四、pam

1、pam基础 --------------通用的认证框架

  Linux中实现pam的通用框架:库(/lib64/security/*)


2、配置文件 -------------/lib64/security/*

 pam的配置文件有两种:全局配置文件、专用配置文件。其中,全局配置文件已经废弃。

(1)、全局认证配置文件 -------------------/etc/pam.conf

  格式:application   type  control   module-path   module-arguments


(2)、专用配置文件 ------------------/etc/pam.d/*APP_NAME*

  格式:type  control   module-path   module-arguments

  type:

    auth ---------------认证、授权

    account ------------账号管理,与认证无关

    password ------------用户修改密码时,密码的复杂度

    session -------------附加操作


  control:

    required ----------------没有被满足,认证一定失败,认证过程并不中断

    requisite ---------------没有被满足,认证一定失败,立即中断

    sufficient ------------条件被满足,认证成功,立即中断

    optional -------------不影响认证

    include ----------------其他的配置文件包含到当前位置,类似复制

    substack ---------------复制,并在子栈运行,不影响主栈


  module-path ---------------可以是相对路径、绝对路径


  module-arguments ------------默认模块参数


例:auth required pam_shells.so --------------------pam_shells.so模块的认证

      

3、pam_limits.so模块 -------------限制用户会话过程中对各种系统资源的使用情况

  格式:pam_limits.so [ change_uid ] [ conf=/path/to/limits.conf ] [ debug ] [ utmp_early ] [ noaudit ]

  

  配置文件: --------------/etc/security/limits.conf、 /etc/security/limits.d/*

  格式:

  doemain: ----------------用户名/组名

    username ---------------单个用户名称

    %groupname/@groupname ------------指定组内的所有账户

  

  type: ----------------软/硬限制,不同于磁盘配额中的软限制和硬限制

    hard:------------硬限制

    soft:------------软限制

    -:--------------任意


  item:

    core:-------------文件大小 (KB)

    date:--------------最大数据大小(KB) 

    fsize:---------------最大文件大小(KB)

    memlock:-------------最大可用内存空间(KB)

    nofile:---------------最大可以打开的文件数量 

    rss:--------------最大可驻留空间(KB) 

    stack:-----------------最大堆栈空间(KB)

    cpu:-----------------最大CPU使用时间(MIN)

    nproc:-----------------最大运行进程数

    as:--------------地址空间限制

    locks:--------------最大锁定文件数目

    nice:--------------nice值

    maxlogins:--------------用户可以登录到系统最多次数 


  value:-----------------具体值


例:-------------/etc/security/limits.conf

    @student hard nproc 20

    @faculty soft nproc 20

    @faculty hard nproc 50

    ftp hard nproc 0

    @student - maxlogins 4


4、pam_listfile.so模块 ------------------------实现基于用户/组、主机名/IP、终端的访问控制

  格式:pam_listfile.so  item=[tty|user|rhost|ruser|group|shell]  sense=[allow|deny]  file=/path/filename onerr=[succeed|fail] [ apply=[user|@group] ] [ quiet ]

  常用选项:

  item=[tty|user|rhost|ruser|group|shell]:----------------对哪些列出的目标或者条件采用规则  

  sense=[allow|deny]:----------在配置文件中找到符合条件的项目时的控制方式。如果没有找到符合条件的项目,则一般验证都会通过  

  file=/path/filename:--------------------指定配置文件的全路径名称

  onerr=[succeed|fail]:-------------------当出现错误时的缺省返回值 

  apply=[user|@group]:----------------规则适用的用户类型(用户或者组)

  quiet 


例:auth required pam_listfile.so \ 

         onerr=succeed item=user sense=deny file=/etc/ftpusers

例:auth required pam_listfile.so \

         onerr=fail item=user sense=allow file=/etc/loginusers


5、pam_time.so模块 -------------------提供基于时间的控制,用户只能在某个时间段内才能登录

  格式:pam_time.so [ debug ] [ noaudit ]

  常用选项:

  debug:

  noaudit:

  

  配置文件:/etc/security/time.conf

  格式:services;ttys;users;times


例:login ; tty* & !ttyp* ; !root ; !Al0000-2400

例:games ; * ; !waster ; Wd0000-2400 | Wk1800-0800

例:

# vim /etc/security/time.conf

login ; tty3 ; user1 ; al0100-0200   user1      1点到2点才能登录

login ; tty3 ; user1 ; all

sshd ; * ;  *  ;  al0100-0200