一、为什么要引入用户机制
在介绍“用户”之前,需要先对Linux的文件系统有所了解。文件系统是对文件进行组织和管理的模式,是一种数据的抽象。它能够将数据表现为一个个单独的个体,让用户逐一访问。
如果在同一台计算机上,Tom 创建了文件 a.txt,那么 Jerry 也可以访问该文件。但是出于安全性考虑,Tom的文件并不希望被Jerry访问到。于是就需要引入一种机制――用以识别文件的编号,这就是用户。
二、理解用户
用户包括:
用户名:供人使用,可以是任意字符
用户ID:供计算机使用,是唯一的识别标志。
通常操作系统会建立一个用户信息库,用以成对的存放用户名和用户ID,例如:
{roo,0} //root 即为用户名,0即是root 用户的ID
{centos,500}// centos 即为用户名,500即是centos 用户的ID
当用户登陆时,计算机就会在信息库中查找用户名所对应的用户ID,然后将资源按需分配给登陆的用户。
Linux是多用户多任务的系统,不同的用户可以创建不同的文件。在Linux中,用户可以分为以下两类:
1. 管理员用户:通常为 root 用户,ID 为 0
2. 普通用户,可以分为两类:
a)人为登陆的用户
b)只允许运行某些程序,但从来不允许登陆的用户,其目的在于实现某些管理功能,此类用户称为系统用户。
所有的非0用户都是普通用户,其中系统用户的ID号为 1-499,500 以上的所有ID号都是可登陆用户。
三、系统调用
系统调用也称为模式转换,它有两种模式:
当内核在cpu上运行,就叫做系统运行在内核模式下;
当用户的程序在cpu上运行,就叫做系统运行在用户模式下。
例如当我们执行以下命令:
# mkdir /tmp/a.txt
该命令虽然是用户发出的,但需要操作硬盘,即向硬盘写入数据,因此会发生系统调用,于是会从用户模式进入到内核模式。
四、什么是权限
权限管理在Linux系统中起占据着相当重要的地位,它主要是指修改文件的属主、属组以及文件的使用权限等操作。
站在用户的角度,Linux中权限主要分为以下三类:
读取:read,用r表示
写入:write,用w表示
执行:execute,是能被内核所识别的标识,用x表示。
站在文件类别的角度,Linxu中权限可以分为以下两类:
a)文件权限:默认情况下,文件(非目录)默认都没有执行权限;
b)目录权限:
只读:目录的只读(r)权限指的是可以对目录执行 ls 命令以查看,但不能使用 -l 选项以查看文件的相关属性,也不能使用cd 命令切换到目录中;
写入:目录的写(w)权限是指可以在目录中创建新文件,注意,对目录的写权限不包含删除命令,但是删除命令可以作用到目录本身,而不是其中的文件,因为这些文件可能属于其他用户。
执行:目录的执行(x)权限是指可以对目录执行ls -l 命令,并且能够使用cd命令切换到目录中,因此通常情况下目录都有x权限,但是文件没有。
四、文件的属主(owner)和属组(group)
文件的属主(owner)即为文件的拥有者;
文件的属组(group)即为文件所属的组。
这里我们需要理解组的概念。组可以看成一个容器,它一次性完成了权限设置,用来映射用户群和访问权限,也被称为角色(role),进入组的用户自动继承了组的权限。
例如,如果文件a.txt所属的组为mygroup,而mygroup对a.txt具有全部的访问权限,那么若用户jerry属于mygroup组,则Jerry自动获得了该文件a.txt的访问权限。
五、跟用户和组相关的文件
只要能够存放信息,都可以用来保存用户和密码,我们称之为信息库,通常可以充当信息库的可以是文本文件,如Linux系统中/etc 目录下的相关文件;可以是LDAP(轻量级信息访问协议);可以是数据库,如mysql,nosql等。
在Linux中和用户相关的信息主要存放在以下两个文件中:
/etc/passwd: 存放用户的属性信息,可以被任何用户访问;
/etc/shadow: 影子口令,用来保存密码相关的信息,只能被管理员访问。
我们可以用ls -l 命令来查看这两个文件的使用权限:
# ls -l /etc/passwd
# ls -l /etc/shadow
和组相关的信息则存放在以下两个文件中:
/etc/group: 用来存放组的属性信息;
/etc/gshadow:用来存放组的密码相关信息。
组的密码作用在于让用户使用该组。如果某用户不在该组中,但想使用该组的权限,就可以切换到该组中,这时就需要组的密码.
五、什么是进程
在window的操作系统中,我们可以通过Ctrl+Alt+Delete 组合键打开任务管理器查看进程(process);在Linux操作系统中,同样也有进程,可以使用以下命令来查看当前正在运行的进程:
# ps -aux | less
我们可以将进程和程序加以对比,来帮助我们理解进程。程序可以看做是存放在硬盘上的二进制码,是死的数据;而进程可以看成是正在执行过程中的程序。
进程有自己的生命周期,即从程序启动到运行结束;如果站在操作系统的角度看,进程实际上是资源分配的单位;而从用户的角度看,进程是用户的代理,用户通过进程完成对计算机的操作。
六、进程的类别
进程可以分为以下三类:
1. 守护进程(deamon):是后台进程,用来完成操作系统的基本任务,如运行GUI界面所需的进程;
2. 交互式进程(interactive):是用户进程,即用户手动发起的进程;
3. 实时进程(real time),此处不加赘述,后文将详细介绍该类进程。
七、进程的权限管理
进程和文件一样,也有属组和属主。判断某一进程是否有权限访问资源,取决于发起进程的用户是否有权限访问资源。
例如,当用户Tom试图运行命令:
# touch /tmp/b.txt
那么touch 命令发起的进程就属于Tom 用户。
进程的判断顺序通常是:①首先判断属主--->②然后判断属组