访问权限基础:chmod
, chown
, umask
1. 访问权限的概念
当你在 Linux 中处理文件或目录时,可能需要管理它们的访问权限。想象一下,你把自己的袜子放在大家都能看到的地方,现在家里的每个人都可以用它们!Linux 中的访问权限可以防止“未经授权使用袜子”(或者更重要的东西,比如你的脚本)。让我们开始了解吧。
Linux 中的每个文件(和目录)都有三组访问权限,它们决定了谁可以读取、写入或执行这些文件:
- 读取 (r): 允许查看文件内容或目录中的文件列表。
- 写入 (w): 允许修改文件内容或在目录中新建/删除文件。
- 执行 (x): 允许将文件作为程序执行(或进入某个目录)。
三层模型
每个权限适用于三组用户:
- 所有者 (owner): 创建文件的人。
- 组 (group): 被分配到文件的组中的用户。
- 其他人 (others): 系统中剩余的所有用户。
文件的访问权限示例:
-rwxr-xr--
解析如下:
- 第一个字符
-
表示这是一个文件(目录的话是d
)。 - 前三个字符
rwx
— 所有者的权限(读取、写入、执行)。 - 接下来的三个字符
r-x
— 组的权限(读取、执行)。 - 最后三个字符
r--
— 其他人的权限(只读)。
2. 命令 chmod
:管理访问权限
符号格式表示法
命令chmod
修改文件和目录的访问权限。符号格式表示法如下:
chmod [谁][操作][权限] 文件名
- 谁:
u
(拥有者),g
(组),o
(其他人),a
(所有人)。 - 操作:
+
(增加权限),-
(移除权限),=
(精确设置权限)。 - 权限:
r
(读取),w
(写入),x
(执行)。
例子:
# 给所有人设置执行权限
chmod a+x script.sh
# 只给组添加写入权限
chmod g+w file.txt
# 移除其他人的读取权限
chmod o-r document.txt
八进制格式表示法
八进制格式(或称数字格式)更紧凑,但需要理解“数字魔法”。在这种格式中,每种权限组合表示为一个数字:
r = 4
w = 2
x = 1
权限叠加计算:
rwx = 7
(4 + 2 + 1)rw- = 6
(4 + 2)r-- = 4
格式书写方式:
chmod [数字][数字][数字] 文件名
例子:
# 设置拥有者rwx权限,组r-x权限,其他人r--权限
chmod 754 file.sh
3. 更改文件所有者:命令 chown
如果你需要将文件交给其他用户(或组),chown
命令可以帮上忙。
格式:
chown [用户]:[组] 文件名
示例:
# 转让所有权给用户 user1
chown user1 myfile.txt
# 转让所有者和组
chown user1:group1 myfile.txt
# 仅更改组
chown :group2 myfile.txt
4. 默认掩码: umask
当你创建一个文件时,它的访问权限是由系统决定的。例如,权限可能是rw-r--r--
。但这些权限从哪来的呢?答案是: 来自命令umask
。
什么是umask
?
umask
定义了哪些权限不会被设置给新创建的文件。
例如:
- 文件的基本权限:
666
(无执行权限)。 - 掩码:
022
。 - 最终权限:
644
(666 - 022
)。
命令:
- 查看当前掩码:
umask
- 设置新掩码:
umask 0022
示例:
# 设置掩码,使新文件具有 rw-rw-r--
umask 0002
5. 管理员权限和 sudo
什么是 sudo
?
sudo
("superuser do" 的缩写)是 Linux 和类似 Unix 系统中的一个命令,允许用户以 超级用户(root)或具有更高权限的用户身份执行命令。
sudo
系统提供了一个临时访问管理员功能的方式,无需一直以 root 账户工作,从而降低了意外或恶意更改系统的风险。
简单来说,sudo 就是写在需要用管理员权限执行的命令前面。
sudo 是如何工作的?
执行命令:
当你输入带 sudo
的命令时,系统会检查你的用户是否有使用高权限执行命令的权利。
例如:
sudo apt update
认证:
在当前会话中首次使用 sudo
时,系统会要求输入当前用户的密码(不是 root 的密码)。
成功输入密码后,系统会在短时间内(通常是 5-15 分钟)记住认证状态,避免每次都需要输入密码。
执行命令:
如果用户拥有配置文件 sudo
中指定的权限,该命令将以超级用户的权限执行。
sudo 的主要功能和命令
以权限运行命令:
sudo <命令>
例如:
sudo apt install nginx
以其他用户身份运行命令: 使用标志 -u
:
sudo -u <用户名> <命令>
例如:
sudo -u user1 ls /home/user1
获取管理员终端: 启动 root 权限的 shell:
sudo -i
或者:
sudo su
查看 sudo
配置:
sudo -l
显示当前用户可以执行的命令。
编辑 sudo
配置:
sudo visudo
此命令会打开 /etc/sudoers
配置文件,提供一个安全的编辑环境。
6. 示例
来试着在实践中应用我们的知识。
任务 1: 使用 chmod
管理权限
创建一个文件:
touch myfile.txt
为拥有者设置读取、写入和执行权限:
chmod u+rwx myfile.txt
为其他人仅添加读取权限:
chmod o+r myfile.txt
检查权限:
ls -l myfile.txt
任务 2: 使用 chown
更改文件拥有者
创建一个文件:
touch ownedfile.txt
将拥有者更改为用户
user1
(需要管理员权限):sudo chown user1 ownedfile.txt
检查更改:
ls -l ownedfile.txt
任务 3: 使用 umask
的实验
检查当前的掩码:
umask
设置掩码为
027
:umask 027
创建一个新文件:
touch newfile.txt
检查新文件的权限:
ls -l newfile.txt
7. 常见错误和特点
- 忘记在更改所有者时使用
sudo
: 只有管理员可以更改文件的所有者。如果你收到 "Operation not permitted" 错误,试试加上sudo
。 chmod
命令顺序错误: 改了错误的对象权限。确保你选择了正确的文件或目录。umask
只影响新文件: 如果你试图用umask
更改已有文件的权限,是行不通的。请用chmod
。
你知道吗,Linux 中的权限非常灵活,你甚至可以创建一个文件,只有全宇宙中唯一一个人可以看到它?俗话说,权利越大,责任越大!现在,掌握了 chmod
, chown
和 umask
,你已经准备好让你的 Linux 系统不仅方便,还超级安全啦。
GO TO FULL VERSION