一:文件权限
- 用户组:是具有相同特征用户的逻辑集合。基于用户组管理权限比直接基于用户管理权限效率要高。
- 用户组的作用:允许一组用户共享对文件的访问控制,而无需将所有用户都设置为文件的所有者。这在团队协作中尤其有用,因为团队成员可以被添加到同一个组中,从而共享对某些文件的访问权限。 为了保障系统的安全性和文件的隐私性,一个文件针对不同权限的账户有着不同的权限,如下图
如图所示,文件权限是由一个字符串所表示,其所代表的含义为
文件类型
- d:表示目录(Directory)。目录是一种特殊的文件,用于存储其他文件和目录。
- -:表示普通文件(Regular File)。这是最常见的文件类型,包含用户数据,如文本文件、二进制文件等。
- l:表示符号链接(Symbolic Link)。符号链接类似于Windows中的快捷方式,它指向另一个文件或目录。
- b:表示块设备文件(Block Device)。这是系统用来访问如硬盘驱动器、光驱等的设备接口。
- c:表示字符设备文件(Character Device)。这些文件代表串行端口设备,如键盘和鼠标,它们以字符为单位进行数据传输。
权限
权限由三组字符(每组三个)组成,分别表示文件所有者(user)、所属组(group)和其他用户(others)的权限。每组字符中的r
、w
、x
分别代表读(Read)、写(Write)和执行(eXecute)权限。如果某个用户类别没有某个权限,则用-
表示。
- r(读):允许用户读取文件内容或列出目录中的文件和子目录。
- w(写):允许用户修改文件内容或在目录中创建、删除文件。
- x(执行):允许用户执行文件作为程序,或进入目录(对于目录而言)。
目录的x权限
对于目录来说,x
权限尤为重要,因为它允许用户进入目录并读取其中的内容。如果目录没有x
权限,则用户无法列出目录中的文件或进入该目录,即使他们有读(r
)权限也是如此。
隐藏文件
在Linux中,如果文件名以.
开头,那么该文件被视为隐藏文件。隐藏文件在默认情况下不会通过ls
命令列出,但可以通过ls -a
命令查看,该命令会显示包括隐藏文件在内的所有文件。
二:用户和用户组
2.1:分类
超级用户:root
普通用户
2.2:查看用户信息
当前系统中的用户组信息
vim /etc/group
或者
cat /etc/group
注意:
-
当该组内只有一个用户,并且用户名和组名相同时,在组列表中,包含用户一列可以为空
-
系统中root分组的组编号一定为0
-
组号1~499为系统预留的组编号,一般是预留给系统安装的软件或者服务的编号,越早安装的软件或者服务的组编号约早。用户手动创建的用户组编号从500开始
-
组密码占位符,无一例外,全部用x表示
当前系统中用户组的密码信息
vim /etc/gshadow
注意:
-
如果组密码处为“*” “!”或者为空时候,则该组没有密码
-
如果组管理者为空,则表示该组内所有成员都可以管理该组
当前系统中所有的用户信息
/ect/passwd
注意:在linux中,超级管理员root的用户编号一定为0
当前系统中所有用户的密码信息
/ect/shadow
注意:密码是一个单向加密过的字符串
2.3:用户出操作
2.3.1:创建用户
命令格式
useradd [参数] 用户名
参数:
-
-d:设置该用户的home目录,默认在home/用户名
例如:useradd -d /home/helloworld hello //新建hello用户,并且将其home目录设置为/home/helloworld
-
-u:设置其userid,默认自动生成
例如:useradd -u 668 hello //新建一个hello用户,将他的id设置为668
-
-g:设置其主组,默认自动添加一个同名的用户组
例如:useradd -g root hello //新建一个hello用户,并将其加入root组
-
-m:生成home目录的文件夹
2.3.2 修改用户信息
命令格式:
usermod [参数] 用户名
参数:
-
-l :修改新用户名
例如:usermod -l helloworld hello 将hello用户名改为helloworld,但其home目录不改变
-
-u :修改用户的userid
例如:usermod -u 888 hello 将hello的userid改为888
-
-d :修改用户的home目录,不声明,默认在/home/用户名
-
-g :修改用户的主用户组,不声明,创建同名的用户组
-
-L :锁定用户,使其不能登录
-
-U :解除锁定
2.3.3 删除用户
命令格式:
userdel [参数] 用户名
参数:
-
-r 删除用户的同时将其home目录也删掉
2.3.4 设置密码
passwd 用户名
然后系统会提醒你输入并确认密码
2.3.5 切换用户
su 用户名
2.4 用户组操作
2.4.1:创建用户组
groupadd 组名
2.4.2:修改用户组
groupmod -n 新组名 旧组名 //修改组名
groupmod -g 新组id 旧组id //修改组id
2.4.3:删除用户组
groupdel 组名
三、权限管理
3.1:权限概述
在Linux系统中,权限是指特定用户或用户组对系统资源(如文件、目录等)的使用权力。这些权力包括读(r)、写(w)和执行(x)三种基本权限。权限的设置是为了保护系统资源不被未授权的用户访问或篡改。
3.2:文件访问者分类
在Linux中,文件和目录的访问者通常分为三类:
- 文件所有者(Owner):文件或目录的创建者,默认拥有该文件或目录的所有权限。
- 所属组(Group):文件或目录所属的用户组,组内的成员可以拥有该文件或目录的特定权限。
- 其他人(Others):除了文件所有者和所属组成员之外的所有用户。
3.3:权限的表示方法
-
例如,
-rw-r--r--
表示文件所有者有读写权限,所属组有读权限,其他人也有读权限。- 读(r):用字符
r
表示,数字表示为4。 - 写(w):用字符
w
表示,数字表示为2。 - 执行(x):用字符
x
表示,对于目录来说表示可以进入目录,数字表示为1。 - 如果没有相应权限,则用
-
表示。-
八进制数值表示法:
将读、写、执行权限分别用数字4、2、1表示,然后将每种身份(所有者、所属组、其他人)的权限值相加,得到一个三位数的八进制数。例如,
755
表示文件所有者有读(4)+写(2)+执行(1)=7的权限,所属组和其他人都有读(4)+执行(1)=5的权限 。
-
- 读(r):用字符
3.4:权限设置方法
Linux提供了多种命令来设置文件和目录的权限,包括chmod
、chown
、chgrp
和umask
等。
-
所有者(u) ,组(g) ,其他用户(o) ,全部(a)
-
新增(+), 撤销(-)
- chmod:用于修改文件或目录的权限。
- 字符形式:
chmod u+x,g+w file
(给所有者增加执行权限,给所属组增加写权限)。 - 八进制形式:
chmod 755 file
(设置文件权限为所有者读写执行,所属组和其他人读执行)。
- 字符形式:
- chown:用于修改文件或目录的所有者。
- 语法:
chown username file
(将文件的所有者更改为指定用户)。
- 语法:
- chgrp:用于修改文件或目录的所属组。
- 语法:
chgrp groupname file
(将文件的所属组更改为指定组)。
- 语法:
- umask:用于设置文件创建时的默认权限掩码。
- umask的值是一个八进制数,它决定了新创建的文件或目录的默认权限。例如,umask值为022时,新创建的文件默认权限为644(rw-r--r--),新创建的目录默认权限为755(rwxr-xr-x)。
chmod例子:
# 文件所有者新增写的权限
chmod u+w 1.txt
# 文件所有者撤销写的权限
chmod u-w 1.txt
# 其他用户新增读的权限
chmod o+r 1.txt
# 所有都新增读的权限
chmod a+r 1.txt
# 所有者执行权限,组写权限,其他用户写执行权限
chmod 123 1.txt
chmod 755 1.txt
chmod 777 1.txt
chown例子:
注意:change owner 的缩写。
改变文档所有者,可使用参数 -R使得其子目录也同时修改
chown username 文件名
# 同时修改文档或目录的拥有者和所在组
chown username:group 文件名
chgrp例子:
change group的缩写
改变文档所有组,可使用参数 -R使得其子目录也同时修改
chgrp 组的名字 文件名
umask例子:
假设你的umask
是022:
- 对于文件,权限将是666 - 022 = 644(rw-r--r--)
- 对于目录,权限将是777 - 022 = 755(rwxr-xr-x)
3.5:特殊权限
Linux还提供了几种特殊权限,用于增强文件和目录的安全性或灵活性。
- SUID(Set User ID):只对二进制文件有效,让执行程序的用户临时获取所有者的权限。
- SGID(Set Group ID):对二进制文件,可以让执行者临时拥有所有属组的权限;对目录,可以让目录内新建的文件自动继承该目录原有用户组的名称。
- SBIT(Sticky Bit):可以保障用户只能删除自己的文件,而不能删除其他人的文件。对目录设置SBIT权限后,该目录中的文件只能被所有者删除。
3.6:总结
Linux权限管理是系统安全的重要组成部分,通过合理的权限设置,可以保护系统资源不被未授权的用户访问或篡改。Linux提供了多种权限设置方法和特殊权限,以满足不同场景下的需求。管理员和用户应该熟悉这些权限设置方法和规则,以确保系统的安全性和稳定性。
四:sudo命令
如果系统中没有 sudo
,需要先安装。
# Debian
apt install sudo -y
# Centos
yum install sudo -y
4.1:sudo命令的概述
Linux中的sudo
命令是一个非常重要的系统管理指令,全称为“SuperUser Do”,意为“以超级用户身份执行”。它允许系统管理员授权普通用户执行一些或全部通常需要root权限才能执行的命令,如halt、reboot、su等。这样做不仅减少了root用户的登录和管理时间,还提高了系统的安全性。以下是关于sudo
命令的详细介绍:
4.2:sudo的特性
- 权限管理:sudo能够限制用户只在某台主机上运行某些命令。
- 日志记录:sudo提供了丰富的日志,能够详细记录每个用户通过sudo执行了哪些操作,并且这些日志可以被传送到中心主机或日志服务器。
- 时间戳文件:sudo使用时间戳文件来执行类似的“检票”系统。用户输入密码后,会获得一张默认存活期为5分钟的“入场券”,超时后需要重新输入密码。
4.3:sudo的配置
- 配置文件:sudo的配置文件是
/etc/sudoers
,它允许系统管理员集中地管理用户的使用权限和使用的主机。该文件通常只有超级用户才能修改,并且建议使用visudo
命令来编辑,因为它能在保存时进行语法检查。 - 配置示例:
- 允许用户以root身份执行任何命令:
用户名 ALL=(ALL) ALL
- 允许用户以特定用户身份执行特定命令:
用户名 主机名=(目标用户) 命令列表
- 无需密码执行命令:
用户名 主机名=NOPASSWD: 命令列表
- 允许用户以root身份执行任何命令:
4.4:sudo的使用
一般用在非root用户下,临时提升非root用户的权限。
普通用户使用 sudo 命令需要输入 password 确认是否执行特权命令,而 root 用户使用 sudo 命令不需要输入 password, 因为在 /etc/sudoers 文件中默认配置,允许 root 用户可以在系统任何地方执行任何命令。
- 基本语法:
sudo [选项] [命令]
- 常用选项:
-b
:在后台执行指令。-h
:显示帮助。-H
:将HOME环境变量设为新身份的HOME环境变量。-k
:结束密码的有效期限,即下次执行sudo时需要再次输入密码。-l
:列出当前用户可以执行与无法执行的指令。-p
:改变询问密码的提示符号。-u<用户>
:以指定的用户作为新的身份执行命令。-v
:延长密码有效期限5分钟。-V
:显示版本信息。
例子:
# 查看版本信息
sudo -V
# 以root身份使用useradd命令创建cat用户
sudo -u root useradd cat
# 更改用户密码:
sudo passwd user
# 更改用户组:
sudo usermod -G group user
# 更改用户主目录的权限:
sudo chown -R user:group /home/document
# 更改文件所有者和所属组
sudo chown user:group /home/file
# 更改文件权限
sudo chmod -R 755 /home/file
4.5:普通用户
普通用户不能直接使用
# 方法1:使用 root 用户编辑 /etc/sudoers 文件,将用户名添加到 %wheel 组中。
# 例如:%hzk ALL=(ALL) ALL
%用户名 ALL=(ALL) ALL
# 方法2:使用 root 用户编辑 /etc/sudoers 文件,将用户添加到 %wheel 组中,设置不需要密码。
# 例如:%hzk ALL=(ALL) NOPASSWD: ALL
%用户名 ALL=(ALL) NOPASSWD: ALL
4.6:注意事项
- 使用sudo时,用户必须输入自己的密码,而不是目标用户的密码。
- 未经授权的用户尝试使用sudo会收到警告,并且系统可能会向管理员发送邮件。
- sudo的配置和管理需要谨慎进行,错误的配置可能导致系统安全问题。
通过以上介绍,可以看出sudo
命令在Linux系统管理中的重要性。它不仅是一个强大的权限管理工具,还能通过详细的日志记录为系统管理员提供审计依据。