用户身份与能力
Linux是一个多用户、多任务的操作系统,具有很好的稳定性与安全性,在幕后保障Linux系统安全则是一系列复杂的配置工作。
Linux系统的管理员之所以是root,并不是因为它的名字叫root,而是因为该用户的身份号码即UID(User IDentification)的数值为0。在Linux系统中,UID相当于我们的身份证号码一样具有唯一性,因此可以通过用户的UID值来判断用户身份。
管理员UID为0:系统的管理员
系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户
需要注意的是UID是不能冲突的,而且管理员创建的普通用户的UID默认是从1000开始的(即使前面有闲置的号码)。
为了方便管理同一组用户,Linux系统中还引入用户组的概念。通过使用用户组号码(GID),我们库把多个用户加入到一个组中,从而方便为组中的用户统一规划权限或指定任务。
另外,在Linux系统中创建每个用户时,将自动创一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳其他用户组,则这个其他用户组被称为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。
useradd命令
useradd命令用于创建新的用户,格式为“useradd【选项】用户名”
可以使用useradd创建用户账户,使用该命令创建用户账户时,默认的用户家目录会被保存在/home目录中
默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组,这些默认设置可以根据表中的useradd命令参数自行修改
参数 | |
-d | 指定用户的家目录(默认/home/username) |
-e | 账户到期时间,格式为YYYY-MM-DD |
-u | 指定该用户的默认UID |
-g | 指定一个初始的用户基本组 |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认Shell解释器 |
下面我们创建一个普通用户并指定家目录的路径、用户的UID以及Shell解释器,在下面命令中,请注意/sbin/nologin,他是终端解释器的一员,与Bash解释器有天壤之别。一旦用户的解释器被设置成nologin,则代表该用户不能登陆到系统中:
groupadd命令
groupadd命令用于创建用户组,格式为:“groupadd【选项】群组名”
为了能够更加高效地指派系统中的各个用户的权限,在工作中常常会把几个用户加入到同一个组中,这样便可以针对一类用户统一安排权限。创建用户组的步骤非常简单,例如使用下面命令创建一个用户组SanKoucun
usermod命令
usermod命令用于修改用户的属性,格式为“usermod 【选项】用户名”
参数 | 作用 |
-c | 填写用户账户的备注信息 |
-d -m | 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为:YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登陆系统 |
-U | 解锁用户,运行其登陆系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
我们先查看ShangQiang的默认信息,然后将他加入到root用户组中去,再次查看ShangQiang的信息,这样扩展组列表中则会出现root用户组的字样,而基本组不会收到影响
再来试试用-u参数修改ShangQiang的用户UID号码。除此之外,我们还可以用-g参数修改用户的基本组ID,用-G参数修改用户扩展组ID
passwd命令
passwd命令用于修改密码,过期时间,认证信息等,格式为:“passwd【选项】【用户名】”
普通用户只能修改自己的密码,root管理员则有权限修改其他所有人的密码。更强的是,root修改其他人的密码不需要验证旧密码。
参数 | 作用 |
-l | 锁定用户,禁止其登陆 |
-u | 解锁锁定,允许用户登陆 |
--stdin | 允许通过标准输入修改用户密码,如 echo '123456' | passwd --stdin Username |
-d | 使该用户可用空密码登陆系统 |
-e | 强制用户在下次登陆时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法全称 |
接下来,我们尝试修改root和普通用户的密码
userdel命令
userdel命令用于删除用户,格式为“userdel 【选项】用户名”
参数 | 作用 |
-f | 强制删除用户 |
-r | 同时删除用户及其用户目录 |
尝试一下
文件权限与归属
尽管在Linux系统中一切都是文件,但每个文件的类型不尽相同,因此Linux系统使用了不同的字符加以区分,常见的字符如下所示:
在Linux系统中,每个文件都有所属的所有者和所有组,并且规定了文件的所有者,所有组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。对与一般文件来说,权限比较容易理解:
“可读”表示能够读取文件的实际内容
“可写”表示能够编辑,新增,修改,删除文件的实际内容
“可执行”表示能够运行一个脚本程序
但是,对应目录文件来说,理解其权限设置来就不那么容易。
对于目录文件来说:
”可读“表示能够读取目录内的文件列表
”可写“表示能够在目录内新增,删除,重命名文件
”可执行“表示能够进入该目录
文件的读、写、执行权限可以简写成 rwx,也可以分别用数字表示 4,2,1.文件所有者,所属组及其他用户权限之间无关联
文件权限的数字法表示基于字符表示(rwx)的权限计算而来,其目的是简化权限表示。
例如,某个文件的权限为7则代表可读,可写,可执行(4+2+1)
若权限为6则代表可读、可写,不可执行(4+2)
文件的特殊权限
在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID,SGID,SBIT的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
SUID
SUID是一种对二进制程序进行设置的特殊权限。可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。
例如:
所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它默认权限是000,也就是说除了root管理员外,所有用户都没有查看或编辑这个文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。
我们先简单介绍一个特殊权限,内容太多不好消化,下篇继续。