今天我们聊用户和权限的管理,听着感觉很简单,实则是有很多重要的知识。
用户和权限的管理,那就先来聊一下用户的基础操作吧,基础操作包含了用户的基础概念、相关的配置文件、相关的命令三大块。
用户的基础操作:
用户的基础概念:
Linux用户分为三类:管理员、系统用户、普通用户。管理员用户每个系统只有一个,其拥有最高权限、可执行任何操作,在我们使用光盘镜像创建虚拟机的过程中就有提示让我们编辑它的密码。如果没有编辑,那就默认没有密码,后期可以在终端通过命令:passwd来更改。
Linux系统中,我们可以通过uid来区分用户是什么用户,uid=0就是管理员用户也就是root用户,家目录为/root。
uid大于500的为普通用户,也是我们在使用Linux时通过命令:useradd创建的用户,这些用户的权限就比较低了,只能在自己的家目录执行操作,每个普通用户的家目录都在/home下自己名字命名的目录。比如创建一个qw的普通用户,那它的家目录就在/home/qw。
uid在1-500的为系统用户,这类用户比较特殊,它们不是用来登录系统的,也没有各自的家目录,它们是用来运行一些特定程序,比如mail
用户可能被用来运行邮件服务,sshd
用户可能被用来运行SSH服务。这些服务是在后台运行的,不需要用户交互,因此它们通常由系统用户启动和管理。
相关配置文件:
/etc/passwd /etc/shadow /etc/group /set/skel
四个配置文件,各司其职
/etc/passwd文件内容:
为了方便各位阅读者更容易区分,我给上图中的代码加了些空格、改了颜色、尽量对齐,可以看到每行都是以:分隔成了7段7列:红色一段一列、“x”一段一列、两段数字两列、“tom jack”和“空白”一段一列一列、“蓝色一段”一列、“/bin”一段一列
zz1 : x : 1017 : 1018 : : /opt/zz : /bin/bash
centos : x : 1018 : 1019 : : /users/centos : /bin/bash
admin : x : 4004 : 0 : : /home/admin : /bin/bash
tom : x : 2003 : 2003 : tom jack : /home/tom : /bin/tcsh
openstack : x : 4005 : 4005 : : /home/openstack : /bin/bash
每行7段,每列的意思都一样,第一段红色是用户名、第二段x是密码或者密码占位符、第三段深红数字是用户的uid、第四段黑字是用户的gid,gid也就是用户所在组的组id、第五段是用户的描述信息,可以空着、第六段蓝色是用户的家目录、第七段“/bin”是用户的shell类型。
最后一段shell类型决定了用户能否登录系统,“/bin/bash”和“/bin/sh”的shell类型可以登录系统。
/etc/shadow文件内容:
/etc/shadow
是 Linux 系统中用于存储加密用户密码的重要系统文件,只有系统管理员 root
用户可以访问,防止未经授权的用户查看或修改该文件1。
在这个文件中,每一行代表一个用户(包括系统用户)的用户密码信息。每一行的内容包含九个字段,这些字段是以冒号 (":") 分隔的。第二个字段就是加密密码的部分。
加密密码的字段可能为空,在这种情况下,无需密码即可作为指定的用户进行身份验证。一些应用程序如果密码字段为空,读取 /etc/shadow
文件可能根本不允许任何访问。如果用感叹号 "!" 开头的密码字段表示密码已锁定,该用户将不能登录。行中剩余的字符代表密码被锁定之前的密码字段。
总的来说,/etc/shadow
文件的第二列是加密后的密码部分。
/etc/group文件内容:
/etc/group
文件是 Linux 系统中用于存储用户组信息的配置文件。它的主要作用是记录用户组的相关信息,如组名、组密码、组 ID 和组成员等。
/etc/group
文件的每一行代表一个用户组,其内容由四个字段组成,每个字段之间通过冒号 :
分隔。这四个字段分别是:
组名:用户组的名称,由字母或数字构成,不应与其他组的组名重复。
组密码:这里通常是一个 x
,表示该用户组设置了密码,真正的加密后的组密码存储在 /etc/gshadow
文件中。
组 ID:一个整数,被系统内部用来标识组,也被称为 GID。
组内用户列表:属于这个组的所有用户的列表,不同用户之间用逗号 ,
分隔。这个用户组可能是用户的主组,也可能是附加组。
/etc/group
文件主要用于系统管理员对用户和用户组的管理。Linux 系统中,每个用户都属于某个用户组,一个组中可以有多个用户,一个用户也可以属于不同的组。当一个用户同时是多个组中的成员时,在 /etc/passwd
文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
例如,假设你在 /etc/passwd
文件中看到一个用户的主组 ID 是 502,但你不知道这个组名是什么,就可以通过查询 /etc/group
文件找到这个组名。如果 /etc/group
文件中有一行显示 GID 是 502 的组名为 "lamp",那么这个用户就属于 "lamp" 用户组。
总的来说,/etc/group
文件是 Linux 系统中对用户进行管理及控制访问权限的重要工具。
/etc/skel文件:
这个配置文件是个目录文件,里面的文件都是隐藏文件,所以不能直接阅读文件内容。
这个目录在 Linux 系统中扮演着重要的角色,主要用于存放新用户配置文件。当我们添加新用户时,/etc/skel
目录下的所有文件会自动被复制到新添加的用户家目录下。
/etc/skel
目录下的所有文件都是隐藏文件(以.点开头的文件)。通过修改、添加、删除 /etc/skel
目录下的文件,可以为新创建的用户提供统一、标准的、初始化用户环境。
例如,你可以在这个目录下创建一个使用通知文件,然后在添加新用户时,这份通知文件会自动出现在新用户的用户目录下。这样做的好处是,无论何时添加新用户,他们都能立即获得必要的配置文件,从而快速开始工作或学习。
需要注意的是,新用户家目录下会自动拷贝 /etc/skel/
下的文件的原因是受 /etc/default/useradd
文件控制的。如果你希望创建新用户时不从 /etc/skel/
文件下拷贝,可以修改此文件。
总的来说,/etc/skel
目录的主要作用是为新用户提供统一的初始化配置文件,以便他们在首次登录时就能拥有必要的工作环境。
相关命令:
id useradd userdel passwd groupadd groupdel su
id:查看指定用户是否存在
使用格式:id 用户名
useradd:新建用户
使用格式:useradd 选项 用户名
选项:
-o:通常和-u一块使用,实现uid的复用 -u X:指定用户的uid
-g X:指定用户的gid -s /bin/bash:指定用户的shell类型
-d /home/aaaa:指定用户的家目录 -r:创建一个系统用户
-M:不创建用户家目录
userdel:删除用户
使用格式:userdel 选项 用户名 选项:-r 删除用户的时候,将用户的家目录一块删除
passwd:修改密码
使用格式:改自己密码:passwd,回车 改他人密码:passwd 用户名 (只有root用户可以更改其他用户密码)
groupadd:新建用户组 groupdel:删除用户组
使用格式:groupadd 组名 使用格式:groupdel 组名
su:切换用户
使用格式:su 用户名 (exit返回上个用户)
权限基础操作:
权限基础概念:
权限类别:
r w x -
4 2 1 0
读权限 写权限 执行权限 无任何权限
权限的对象:
u g o a
属主用户 属组用户 其他用户 全部用户
控制权限:
+:在原来的权限基础上,增加新的权限
-:在原来的权限基础上,减掉某个权限
=:直接设置最终权限
ls -l可查看文件权限:
权限一共11位:-rw-r--r--
第一位:表示的是文件的类型 -:表示这个文件是一般文件
d:表示这个文件是目录文件 第二位-第四位:表示的是文件的属主具有的权限
第五位-第七位:表示的是文件的属组用户具有权限
第八位-第十位:表示的是文件的其他用户具有权限
权限管理命令:chmod
使用格式:chmod 选项 权限 文件名 选项:-R 递归修改目录和目录下的子文件的权限
给属组用户添加上写权限:chmod g+w 文件名
将属主的权限设置为可写:chmod u=w 文件名
将所有用户读权限都去掉:chmod a= 文件名 / chmod ugo= 文件名
用数值方式表示文件的权限
---------x 001 ------x--x 011 ---x--x--x 111 ---x--x--- 110
---x-w---- 120 ---x-wx--- 130 ---xr----- 140 ---xr-x--- 150
---xrw---- 160 ---xrwx--- 170
修改文件属主、属组:chown
使用格式:chown 选项 属主:属组 文件名 选项:-R 递归修改目录和目录下的子文件的权限
特殊权限
特殊权限位通常是指在操作系统如Linux中,为了实现某些特殊功能而设置的权限位,主要有三种类型:SUID、SGID和STICKY。
SUID
SUID(Set UID)是一种特殊权限,允许程序以拥有者的身份运行。这意味着,如果一个程序被设置为SUID,那么无论哪个用户运行这个程序,都会以程序拥有者的身份运行。这主要用于那些需要特定权限才能运行的程序,例如passwd
命令,它需要root权限来修改密码文件,因此passwd
命令就被设置为SUID。
SGID
SGID(Set GID)也是一种特殊权限,类似于SUID,但是它针对的是用户组。当一个文件或目录设置为SGID时,任何用户在执行这个程序或访问这个目录时,都会成为这个程序或目录所在组的成员。这主要用于那些需要特定组权限才能运行的程序或访问的目录。
STICKY
STICKY是一种特殊权限,主要用于限制文件或目录的删除操作。当一个目录被设置为STICKY时,只有该目录的所有者和root用户能够删除目录下的文件。这主要用于临时目录,如/tmp
目录,防止其他用户删除不属于他们的文件。
以上三种特殊权限位都可以通过chmod
命令来设置,例如,chmod u+s filename
用于为filename
文件添加SUID权限,chmod g+s dirname
用于为dirname
目录添加SGID权限,chmod o+t dirname
用于为dirname
目录添加STICKY权限。
设置特殊权限方法:
设置suid:chmod u+s 文件名 chmod u-s 文件名
用户授权
在实际场景中,用户登录系统的时候,都是用普通用户登录,因为权限很低,无法完成日常工作,因此需要对普通用户进行授权
方法1:su 方法2:sudo
su:可以实现用户身份的切换 存在两个问题
1:无法控制控制用户可以执行的命令 2:会导致root泄露
sudo:sudo可以为用户进行授权,可以明确指定用户可以进行的操作有哪些
visudo打开sudo的配置文件,对用户进行授权
jerry ALL=(root) /sbin/useradd,/1 usr/bin/touch
jerry是用户名
ALL=(root) 授权用户可以以root身份去执行命令 /sbin/useradd 可以以root身份执行的命令列表
在普通用户的会话中可以查看授权信息:sudo -l
需要输入自己的密码 密码有效期是5分钟
普通用户使用授权进行操作的时候,必须在前面加上sudo
sudo useradd d008
需要输入自己的密码 密码有效期是5分钟
今天就到这里,谢谢各位阅读,下篇见