1. linux安全性
 linux的安全性主要通过3A安全机制来实现,分别为authentication(认证)、authorization(授权)、audition(审计)。
1.1 /etc/passwd 文件
 passwd文件主要用来存放账户的特定信息,以下为示例:
 [root@localhost ~]# tail -1 /etc/passwd
 test:x:500:500::/home/test:/bin/bash
 解析:上述为passwd文件最后一条账户信息,没个字段以:进行分割,含义为:
  test:用户名
  x:密码,为了确保安全,实际密码通过加密的方式存储于 /etc/shadow中
  500:用户UID编号,在centos6及以下linux系统中,1-499为系统账户UID,500以上为用户UID,centos7及一下1-999为系统UID,1000及以上为用户UID
  500:用户组GID编号,编号规则等同于UID。
  空格:这个字段为用户信息字段,用于存放用户的地址、电话等备注信息
  /home/test:为用户的家目录路径
  /bin/bash:用户的默认shell

1.2 /etc/shadow 文件
 shadow文件为passwd文件的一个补充,主要用于存放账户密码,有效期,过期时间等一些信息,仅供指定程序访问。以下为示例:
 [root@localhost ~]# head -1 /etc/shadow
 root:$6$Y9zrpEAs$Gom54hm/CfGzTO07.2RmxeKGk4TwClaNRER9y6WM:17326:0:99999:7:::
 解析:上述为shadow文件第一行root用户的账户密码相关信息,以:进行分割,含义依次为:
  root:用户名
  $开头的字符串:加密的密码
  17326:自上次修改密码后过去的天数(自1970年1月1日开始计算)
  0:多少天后才能更改密码,0表示可以立即更改
  99999:多少天后必须更改密码,表示密码的有效期
  7:密码过期前7天提醒用户更改密码
  空格:密码过期多少天后禁用账户
  空格:用户账户被禁用的日期(自1970年1月1日至当天的日期数表示)
  空格:预留字段给将来用
 单向加密机制:提取数据指纹
  md5:128bits
  sha1:安全哈希算法,160bits
  sha224:224bits
  sha256:256bits
  sha384:384bits
  sha512:512bits
  
1.3 linux安全上下文
 进程运行时会以发起者的身份运行,进程所有访问的资源取决于发起者的权限。

2. linux用户管理和组管理
2.1 用户管理
 useradd命令
 说明:添加用户可以使用useradd命令来添加,useradd命令添加命令时会读取/etc/default/useradd文件来设定用户默认值。
 
 /etc/default/useradd 文件解析:(可以通过cat文件或useradd -D来查看默认参数)
 [root@localhost ~]# cat /etc/default/useradd  
 # useradd defaults file    
 GROUP=100        #新用户会被添加到GID为100的公共组
 HOME=/home     #新用户的家目录会放置于/home下
 INACTIVE=-1     #新用户账户过期后不会被禁用
 EXPIRE=      #新用户未设置过期日期
 SHELL=/bin/bash    #新用户默认的shell
 SKEL=/etc/skel    #在创建新用户时,系统会将/etc/skel目录复制到新用户家目录下
 CREATE_MAIL_SPOOL=yes #在创建新用户时,系统会在mail用户下创建一个接受邮件的文件。
 
 参数:
  -c “COMMENT”:给用户添加注释信息
  -d home_dir:为用户指定一个用户家目录,一般不想使用默认时可以使用此选项
  -e YYYY-MM-DD:为用户指定账户过期日期
  -f inactive_days:指定账户密码过期后多少天账户会被禁用,0表示过期立即禁用,1表示禁止此功能
  -g GID:指定用户所属基本组,可为组名,也可为GID
  -G GROUP1,GROUP2,GROUP3......为用户指明附加组,附加组必须事先存在
  -u UID:为用户指定UID
  -s SHELL:指定用户默认的shell,可用列表在/etc/shells文件中
  -r:创建系统用户,centos6 ID号小于500,centos7 ID号小于1000
 
 练习:创建用户test,附加组为test1和test2,默认shell为/bin/csh,注释信息为“This is test”
  [root@localhost ~]# groupadd test1;groupadd test2
  [root@localhost ~]# useradd test -G test1,test2 -s /bin/csh -c "This is test"
 
 修改用户
  usermod命令:修改用户指定字段和所属组和附加组等passwd文件中的大部分字段。
  参数:
   -u UID:指定新的UID
   -g GID:指定新的基本组
   -G GROUP1,GROUP2,GROUP3......:指定新的附加组,原来的福建组将被覆盖,如果要保留需同时使用-a选项,表示append
   -s SHELL:新的默认SEHLL
   -c “COMMENT”:指定新的注释信息
   -d HOME_DIR:指定新的家目录,原家目录文件不会移动到新的家目录中,若要移动,则同时使用-m选项
   -l login_name:指定新的登录名
   -e YYYY-MM-DD:修改过期日期
   -L:锁定指定用户
   -U:解锁指定用户
   -p:修改指定账户密码
   -f INACTIVE:设定账户非活动期限
  
  passwd:passwd user可以用来修改指定账户的密码,直接使用passwd可以修改当前登录的账户的密码。
  用法:
   passwd USER_NAME:用于修改指定账户的密码
   passwd:用于修改当前登录账户的密码
  
  chpasswd:这个命令主要用于批量修改密码,它可以使用重定向命令将含有userid:passwd对的文件作为参数传递给它实现批量修改的目的。
  用法:
   chpasswd < users.txt
  
  chsh:修改指定用户的默认登录shell
   用法:
    chsh -s /bin/bash test:修改test的默认shell为bash
  
  chfn:用于修改passwd文件中的注释字段
   用法:
    chfn:依次修改当前用户的注释字段
    chfn USER_NAME:依次修改指定用户的注释字段
  
  finger:查看用户的注释字段,一般系统为了安全不自带该命令,可自行安装。
  
  chage:管理用户的有效期
   参数:
    -d:设置上次修改密码到现在的天数
    -E:设置密码过期的日期
    -I:设定密码过期锁定账户的天数
    -m:设置修改密码之间需要多少天
    -W:设置密码过期前多久开始提醒
    设置时间的两种方式:
     从1970年1月1日开始多少天
     YYYY-MM-DD格式的日期
 
 删除用户:
  userdel USER_NAME:删除用户
  userdel -r USER_NAME:删除用户的同时删除用户的家目录和邮件目录
  
2.2 组管理
 组的类别:
  用户的基本组称为主组
  用户的额外组称为附加组
 
 /etc/group文件
  示例:
   [root@localhost ~]# tail -1 /etc/group
   test:x:502:
   解析:
    test:组名
    x:组密码,加密存放至gshadow文件中
    502:GID
    空:属于该组的用户列表
    
 创建组:groupadd命令
  groupadd GROUP_NAME:新建组
  usermod GROUP_NAME USER_NAME:将指定用户添加到指定组中
 
 修改组:groupmod命令
  groupmod -g GID GROUP_NAME:修改组GID
  groupmod -n OLD_GROUP_NAME NEW_GROUP_NAME:修改组名
  groupmod -r :创建系统组,centos6 GID<500,centos7 GID<1000
 
 删除组:groupdel GROUP_NAME
 
 组密码管理:gpasswd
  格式:gpasswd [option] GROUP
  参数:
   -a user:将user添加到自动组中
   -d user:删除用户user的以当前组为组名的附加组
   -A user1,user2......:这是有管理权限的用户列表
 
 临时切换基本组:newgrp命令
  如果用户不属于此组需临时切换到该组则需要密码
 
2.3 其他用户和组相关知识
 查看用户相关信息:id命令
  id USER_NAME:查看用户相关的信息
 
 切换用户或其他用户身份执行命令:su
  su USER_NAME:非登录切换,即不会读取目标用户的配置文件
  su - USER_NAME:登录切换,会读取目标用户的配置文件,属于完全切换
   root使用su切换到其他用户无需密码,非root用户切换时需要输入密码
  su [-] USER_NAME -c 'COMMAND':使用USER_NAME的身份来执行COMMAND
  su -l USER_NAME:和su - USER_NAME功能一样。

3. 权限管理
 文件权限解析:
  文件权限对象定义:
   owner:属主,u
   group:属组,g
   other:其他,o
  文件权限定义:
   r:可读
   w:可写
   x:可执行
  目录权限定义:
   r:可查看目录的文件列表
   w:可在目录中新建、添加或删除文件
   x:可查看文件列表,也可使用cd命令进入此文件
  文件权限对应的数字编号
  ---:0
  --x:1
  -w-:2
  r--:4
  r-x:5
  rw-:6
  rwx:7
 ls -l 文件列表解析示例:
  [root@localhost ~]# ls -l
  total 52
  -rw-------. 1 root root  2392 Oct 27  2014 anaconda-ks.cfg
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Desktop
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Documents
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Downloads
  -rw-r--r--. 1 root root 12581 Oct 27  2014 install.log.syslog
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Music
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Pictures
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Public
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Templates
  drwxr-xr-x. 2 root root  4096 Oct 27  2014 Videos
  以ls -l的结果第二行为例解析:
   第一字段-:
    d:目录
    -:文本文件
    l:软连接文件
    c:字符设备文件
    t:套接字文件
    b:块设备文件
    n:网络设备文件
   rwx:属主权限,对应数字编号7,可列列表,可cd,可修改
   r-x:属组权限,对应数字编号5,可读列表,可cd,不可修改
   r-x:其他用户权限,对应数字编号5,可读列表,可cd,不可修改
   1:硬链接次数
   root:所属用户为root
   root:所属组为root
   2392:容量大小,以bit为单位
   Oct 27 2014:最后一次修改时间
   Desktop:文件夹名
 默认权限:umask
  示例详解:
  [root@localhost ~]# umask
  0022
  由上可以看出直接输入umask命令可查看当前创建文件夹和文件时的默认权限
   文件夹权限:
    0:粘着位
    022:代表初始文件夹的权限,文件夹的满权限为rwxrwxrwx,对应数字为777,777-022=755,755对应权限为rwxr-xr-xr-x,所以默认文件夹权限为755
     [root@localhost ~]# mkdir test1
     [root@localhost ~]# ls -ld test1
     drwxr-xr-x. 2 root root 4096 Jun 16 05:24 test1
   
   文件权限:由于系统考虑到有些风险需要去除,所以满权限为rw-rw-rw-,对应数字为666
    0:粘着位
    022:666-022=644,对应权限为rw-r--r--
     [root@localhost ~]# touch test1
     [root@localhost ~]# ls -l test1
     -rw-r--r--. 1 root root 0 Jun 16 05:29 test1
  umask 026:重新设置默认权限为0026,对应默认创建文件权限为640,对应默认创建文件夹权限为751
  
4. 改变安全性设置
4.1 改变权限
 chmod:改变目录和文件的安全性设置
 格式:chmod [OPTION] ... MODE,MODE ...FILE...
 使用方式:
  八进制:
   [root@localhost ~]# ls -l test1
   -rw-r--r--. 1 root root 0 Jun 16 05:43 test1
   [root@localhost ~]# chmod 777 test1
   [root@localhost ~]# ls -l test1
   -rwxrwxrwx. 1 root root 0 Jun 16 05:43 test1
   通过上述示例可看出可直接通过修改权限的八进制来修改权限。
  增加或删除某一类或几类用户权限:
   [root@localhost ~]# ls -l test1
   -rwxrwxrwx. 1 root root 0 Jun 16 05:43 test1
   [root@localhost ~]# chmod o-wx test1
   [root@localhost ~]# ls -l test1
   -rwxrwxr--. 1 root root 0 Jun 16 05:43 test1
   通过上述示例可以看出通过o-wx参数来取消了其他用户对此文件的写和执行权限,也可以通过o+来增加权限,以此类推。
  指定或修改某一类或几类用户的权限
   [root@localhost ~]# ls -l test1
   -rwxrwxr--. 1 root root 0 Jun 16 05:43 test1
   [root@localhost ~]# chmod ug=rw test1
   [root@localhost ~]# ls -l test1
   -rw-rw-r--. 1 root root 0 Jun 16 05:43 test1
   通过上述示例可看到可以通过u=,g=,o=或ug=,uo=,go=或a=来指定权限。

4.2 改变属主和属组
 chown:改变文件的属主和属组
  chown OWNER FILE_NAME:改变文件的属主
  chown .GROUP FILE_NAME:改变文件的属组
  chown OWNER.GROUP FILE_NAME:改变文件的属主和属组
 参数:
  -R:可配合通配符递归修改匹配文件的权限
  -h:可以修改文件所属符号连接文件的所属关系
 
 chgrp:可以修改文件的默认属组
  参数:
   -R:递归

5. 特殊权限设置
 SUID:SUID仅对于二进制可执行文件生效,当用户启动此可执行文件为进程时,改进程的属主为原程序文件的属主。用户对SUID生效有以下限制与功能:
  文件为可执行的二进制文件;
  执行者对文件有可执行权限;
  执行者在执行此二进制程序文件时具备该文件owner权限;
  该权限仅只此二进制程序执行时有效;
 权限设定:
   chmod u+s FILE......:为该文件增加S权限
   chmod u-s FILE......:去掉该文件的S权限
 
 SGID:SGID可针对于文件和目录生效,具备一下限制条件和功能:
  文件:
   文件需为二进制可执行文件;
   执行者需具备可执行权限;
   执行者在运行此二进制文件为进程时具备了该文件属组的权限;
   该执行权限仅此二进制程序执行时生效;
  目录:
   执行者必须具备此文件夹的rx权限;
   如果执行者对该目录有w权限时,在此目录下创建的文件夹或目录的属组为该目录的属组
 权限设定:
  chmod g+s DIR......:为该文件夹增加S权限
  chmod g-s DIR......:为该文件夹去除S权限
 
 Sticky:设置了sticky的文件夹,用户仅能删除、移动、重命名自己创建的文件夹
  Sticky使用时的限制条件和功能:
   用户对该目录需有wx权限;
   仅管理员和用户自己可以删除、移动、重命名自己创建的文件和目录;
 权限设定:
  chmod o+s DIR......:为文件夹增加S权限
  chmod g-s DIR......:为该文件夹去除S权限
   
 限位映射:
  SUID:user,占据属主的执行权限位
   s:属主拥有x权限
   S:属主没有x权限
  SGID:group,占据group的执行权限位
   s:group拥有x权限
   S:group没有x权限
  Sticky:other,占据other的执行权限位
   t:other拥有x权限
   T:other没有x权限