目录
2.2.1 'useradd'或'adduser'命令创建用户
一、Linux中权限的概念
Linux权限是保证系统安全性的重要手段,也是Linux系统的基础之一。
- Linux权限是指对文件和目录所具有的操作权限,涉及到文件和目录的读(r)、写(w)和执行(x)权限。
- Linux文件访问者有三种,分别是所有者(User)、所属组(Group)和其他用户(Others)。
- 文件的访问者可以根据其角色和权限的不同进行分类,每个类别的访问者拥有不同的权限来访问或操作文件。这种分类和权限设置机制有助于提高文件的安全性和保护用户的隐私。
下面来详细介绍以上信息。
二、 Linux下的用户
2.1 用户的类型
在Linux系统中,每个用户都有一个唯一的用户名和用户ID(UID),用于标识和管理用户。Linux下的用户可以分为以下几种类型:
1. 超级用户(root):超级用户拥有系统中最高权限,并可以执行系统级别的管理任务。超级用户可以访问和修改系统的所有文件和设置。
2. 普通用户:普通用户是指一般的系统用户,它们是由管理员创建并分配给系统的普通用户账户。普通用户具有较低的权限,只能访问和修改自己的文件和一些共享的资源。
除了上述类型的用户之外,还可以有其他用户类型,如系统用户、组用户、FTP用户等,以满足特定的需求。
设置不同类型用户的好处:
通过为不同用户分配适当的权限,可以控制他们对系统资源的访问和操作范围,从而提高系统的安全性和管理效率。
注: 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。输入命令时要注意。
2.2 用户创建、切换和删除
在Linux系统中,可以使用'useradd'命令创建用户,'userdel'命令删除用户,'passwd'命令设置用户密码,'su'命令切换用户身份等来管理和操作用户。每个用户都有自己的家目录(Home Directory),用于存储其个人文件和配置信息。
2.2.1 'useradd'或'adduser'命令创建用户
root 用户执行: adduser user1 或 useradd -m user2
普通用户执行:sudo adduser user1 或 sudo useradd -m user2
useradd选项:
- -d: 指定用户的主目录
- -m: 如果目录存在不再创建,但是此目录并不属于新创建用户;
如果主目录不存在,则强制创建;- -M: 不创建主目录
执行 # sudo useradd -m user2 时需要输入普通用户的密码。
2.2.2 'passwd'命令设置用户密码
在root用户输入:passwd 用户名
接着会让你输入密码和确认密码,此时密码是不显示的,输入时要注意密码的正确。
2.2.3 'userdel'命令删除用户
在root用户输入:userdel [选项] 用户名
常用的选项是 -r,它的作用是把用户的主目录一起删除。
# userdel -r user1
此命令删除用户user1在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
2.2.4 'su'命令切换用户身份等来管理和操作用户
su是switch user的缩写,表示用户切换
例如,要从root用户切换到普通用户user1,使用 su user1。
要从普通用户user1切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码
2.3 注意事项
- 创建用户时要指定合适的用户名和密码,并设置适当的用户组和权限。通常情况下,应该为每个用户创建一个单独的帐户,并设置强密码以保证安全。
- 切换用户时要确保已经正确退出当前用户的所有进程和程序。否则,可能会导致权限问题或数据损坏等问题。使用su命令进行用户切换,在完成操作后应及时退出当前用户。
- 删除用户时要谨慎操作,并确保备份了该用户的数据和配置文件。一旦删除用户,其所有的数据和文件都将被永久删除,无法恢复。因此,在删除用户之前应该先备份重要数据和文件,并仔细考虑是否真的需要删除该用户。
- 用户密码的管理也是非常重要的。管理员应该鼓励用户使用强密码,并定期更换密码。同时,还可以设置密码策略来限制密码的长度、复杂度和有效期等,以提高系统的安全性。
- 定期清理:定期审查系统中的用户账户,删除已经不再需要的账户,以防止废弃账户被滥用。
三、权限的管理
3.1 文件类型和基本权限
在之前的练习中,不知道大家有没有注意到,.c文件编译生成可执行程序时,不用或者写错可执行程序的后缀也可以执行该程序。可执行程序改后缀名后仍可运行
这是因为Linux区分文件类型,与后缀无关,用文件属性中第一列的第一个字符来区分文件的类型,加上后缀是为了让用户区分。
文件的权限由一串符号表示,如drwxr-xr-x,其中第一个字符表示文件类型,后面的三组字符分别表示所有者、所属组和其他人的权限。
文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
基本权限
- 读 -r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写 -w:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行 -x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- “-”表示不具有该项权限
注:
- Linux区分文件类型与后缀无关,不代表gcc不根据后缀区分文件,为了保持一致性和便于区分文件类型,命名时推荐加上后缀。
- 需要注意的是,对于目录来说,执行权限有特殊含义。执行权限(x)对于目录来说表示能否进入该目录和访问其中的文件。因此,如果想要在一个目录下创建或删除文件,必须具有该目录的执行权限。
3.2 文件访问者的分类
前面讲到:
- Linux文件访问者有三种,分别是所有者(User)、所属组(Group)和其他用户(Others)。
- 文件的访问者可以根据其角色和权限的不同进行分类,每个类别的访问者拥有不同的权限来访问或操作文件。这种分类和权限设置机制有助于提高文件的安全性和保护用户的隐私。
- 所有者 -u(User):所有者是创建文件的用户或进程,拥有对文件的完全控制权(root用户拥有完全控制权)。所有者可以读取(r)、写入(w)和执行(x)文件,也可以更改文件的权限和属性。
- 所属组 -g(Group):所属组是指与文件相关联的用户组。所有属于该组的用户都被称为文件的所属组成员。所属组具有一定的权限来访问文件,权限可以是读取(r)、写入(w)或执行(x),具体权限由文件的权限设置决定。
- 其他用户 -o(Others):其他用户指的是既不是文件的所有者也不是文件的所属组成员的用户。其他人的权限也受到文件的权限设置的限制。同样,权限可以是读取(r)、写入(w)或执行(x)。
为什么要有所属组:
①方便共享资源。将多个用户归为一个组,可以方便地共享资源,如文件、目录等,避免重复创建和管理。
②方便管理和控制。将多个用户归为一个组,可以方便地管理和控制他们对某些文件或目录的访问权限,避免不必要的混乱和冲突。
③提高安全性。通过设置所属组的权限,可以限制某些用户对关键文件或目录的访问,提高系统的安全性。
注:
- 只有文件的所有者才能修改文件的权限和所有者。
- 一个组内可以只有一个人也可以有很多人,用组长的名字来对组的命名。
- 每个文件都有一个所有者和一个所属组,同时还有一组权限控制了不同类别的访问者对文件的访问权限。所有者可以设置文件和目录的读、写、执行权限,用来控制其他用户对这些文件和目录的访问。
总之,在Linux中,文件的访问者可以根据其角色和权限的不同进行分类,每个类别的访问者拥有不同的权限来访问文件。这种分类和权限设置机制有助于提高文件的安全性和保护用户的隐私。
3.3 文件权限值的表示方法
1、字符表示方法
Linux表示 | 说明 | Linux表示 | 说明 |
r-- | 只读 | -w- | 仅可写 |
--x | 仅可执行 | rw- | 可读可写 |
-wx | 可写和可执行 | r-- | 可读可执行 |
rwx | 可读可写可执行 | --- | 无权限 |
2、8进制数值表示方法
权限符号(读写执行) | 八进制 | 二进制 |
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 4 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
--- | 0 | 000 |
3.4 文件访问权限的相关设置方法
3.4.1 chmod命令来设置文件的访问权限
chmod命令可以通过数字模式或符号模式来设置权限。
1、数字模式(三位8进制数字):
命令格式:chmod [XYZ] fileName,其中XYZ是三个8进制数字,分别表示所有者、所属组和其他人的权限。
每个权限有一个对应的数字值,r(读取)= 4,w(写入)= 2,x(执行)= 1。
使用数字模式时,将各个权限的数字值相加即可得到所需的权限组合。
例如,将文件example.txt的所有者权限设置为读写(rw),所属组权限设置为读取(r),其他人权限设置为无(---),可以使用命令:chmod 640 example.txt
2、符号模式(+、-、=):
使用符号模式时,可以使用加号(+)和减号(-)来添加或移除权限,同时使用字母表示权限。
符号表示法由3部分组成:谁(u、g、o、a)做什么(+、-、=)和(权限字符)。
u表示所有者,g表示所属组,o表示其他人,a表示所有人。+表示添加权限,-表示移除权限,=表示设置权限为指定值。
例如,要将文件example.txt设置为所有者具有写权限,所属组和其他人具有执行权限,可以使用命令:chmod u+w,go+x example.txt
其中,u+w表示给所有者添加写权限,go+x表示给所属组和其他人添加执行权限。
3.4.2 chown修改文件或目录的所有者
功能:修改文件或目录的所有者。
格式:chown [参数] <用户名> <文件或目录>
使用-R选项来递归修改目录及其子目录中的所有文件的所有者
例如,要将文件file.txt的所有者修改为user2:
sudo chown -R user2 file.txt
还可以通过指定用户和组的组合来修改所有者,使用冒号(:)分隔:
例如 chown zzx:root file.txt
拥有者为zzx,所属组为root
3.4.3 chgrp修改文件或目录的所属组
功能:修改文件或目录的所属组。
格式:chgrp [参数] <所属组> <文件或目录>
使用-R选项来递归修改目录及其子目录中的所有文件的所属组
要将文件file.txt的所属组修改为group:
chgrp group file.txt
同样地,可以通过指定用户和组的组合来修改所属组:
chgrp user:group file.txt
递归修改目录及其子目录中的所有文件的所属组:
chgrp -R group directory/
注:只有root用户或文件的所有者才能使用chown和chgrp命令修改文件的所有者和所属组。此外,修改文件的所有者和所属组可能需要管理员权限。所以上面命令不能执行时要加上sudo。
3.4.4 umask查看或修改文件掩码
新建文件默认权限=0666,新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。
原因就是创建文件或目录的时候权限还要受到umask的影响。
权限掩码(umask)是一个用来设置新创建文件或目录默认权限的参数(三位八进制数)。
它决定了在创建新文件或目录时要屏蔽掉的权限位。
umask中的每一位对应一个权限位,如果对应位设置为1,则表示对应权限位被屏蔽,不会出现在新创建文件或目录的默认权限中。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
例如,如果umask值为022,则表示屏蔽掉组和其他用户的写权限。
那么,在创建新文件时,默认权限就会去掉写权限,即644(rw-r--r--);
在创建新目录时,默认权限会去掉写和执行权限,即755(rwxr-xr-x)。
注意:
- umask值只影响新创建的文件和目录的默认权限,不会影响已经存在的文件和目录的权限。
- 通过合理设置umask值,可以控制新创建文件和目录的默认权限,从而提高系统的安全性。
umask的使用
使用umask命令可以查看当前的umask值:
umask
使用umask命令可以设置新的umask值,例如将umask设置为022:
umask 022
最终权限值 = 默认权限值 & (~umask)
3.5 目录的权限
- -x 可执行权限: 目录没有可执行权限, 则无法cd到目录中.
- -r 可读权限: 目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
- -w 可写权限: 目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
注意:
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
一个文件一定是属于一个目录的,
一个文件属性能不能查看,是由目录是否具有r权限决定的.
一个文件能不能被创建或删除,由文件所属目录是否有w权限决定,与文件本身的权限无关。
一般而言,不同的账号是不会在同一个目录的,但是如果我们多个账号想互相协同,共享一些数据呢?那他们就有了目录的w权限,岂不是他们就可以随意在该目录里面新建和删除了吗?
答案是可以的。[root@localhost ~]# chmod 0777 /home/ [root@localhost ~]# ls /home/ -ld drwxrwxrwx. 3 root root 4096 11月 23 15:58 /home/ [root@localhost ~]# touch /home/root.c [root@localhost ~]# ls -l /home/ 总用量 4 -rw-r--r--. 1 root root 0 11月 23 15:58 abc.c drwxr-xr-x. 27 user1 user1 4096 11月 23 15:53 user1 -rw-r--r--. 1 root root 0 11月 23 15:59 root.c [root@localhost ~]# su - litao [user1@localhost ~]$ rm /home/root.c #user1可以删除root创建的文件 rm:是否删除有写保护的普通空文件 "/home/root.c"?y [user1@localhost ~]$ exit logout
为了解决这个不科学的问题, Linux引入了粘滞位的概念
3.6 粘滞位
功能:限制对目录的删除操作。
格式:chmod -t <目录>
当一个目录被设置为"粘滞位",则该目录下的文件只能由
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 11月 23 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
注意:
- 粘滞位只对目录起作用,对文件没有影响。因此,不能将粘滞位应用于文件。
- 粘滞位常常用于公共目录,如/tmp目录,以防止其他用户删除其他用户的文件。
3.7 普通用户使用sudo提权
前面在创建用户和修改文件时用到了sudo指令,下面来详细介绍。
sudo是linux系统管理指令,允许系统管理员让普通用户执行一些或者全部的root命令。
格式:sudo [命令]
实例:
$ sudo useradd -m user2
$ sudo chown -R user2 file.txt
- 当我们使用非root用户,且不在信任列表中,sudo命令进行提权,输入的是用户的密码,而不是root的密码。当没有添加用户到信任列表中,用户就无法进行sudo
添加用户到信任列表的步骤:
- 切换为root用户(需要知道root用户的密码)
- 执行命令vim /etc/sudoers
- 然后在一个配置文件目录下的信任列表文件里进行修改
- 按照相同格式添加用户,wq!强制保存退出。