文件 / 目录权限怎么看
使用 ls -l 查看,输出格式如下:
plaintext
-rwxr-xr-x 1 root root 1234 Mar 31 15:00 script.sh
第一段 rwxr-xr-x 共 10 个字符:
-
第 1 位:文件类型( -= 文件,d= 目录,l= 软链接) -
第 2-4 位:所有者权限(u) -
第 5-7 位:所属组权限(g) -
第 8-10 位:其他用户权限(o)
1. chmod : 修改文件 / 目录的权限
Linux 权限分为所有者(user)、所属组(group)、其他用户(others) 三类,每类用户可拥有读(r)、写(w)、执行(x) 三种权限。
(1)权限的数字表示法
❝格式:chmod [3 位数字] [文件名]
每类权限对应一个数字值,通过组合数字可快速设置权限:
-
r(读):4 -
w(写):2 -
x(执行):1 -
无权限:0
组合方式:将三类用户的权限值相加,形成 3 位数字组合(如755):
-
第一位数字:所有者权限 -
第二位数字:所属组权限 -
第三位数字:其他用户权限
常见权限组合:
-
777: rwxrwxrwx所有人拥有读、写、执行权限(危险,不建议) -
755:rwxr-xr-x所有者全权限,所属组和其他用户可读、执行(常用于脚本、程序) -
644:rw-r–r–所有者可读、写,所属组和其他用户只读(常用于普通文件) -
700:rwx——仅所有者有全权限(常用于私密文件 / 目录)
示例(数字形式):
chmod 755 script.sh # 所有者:rwx,组和其他:r-x
chmod 644 document.txt # 所有者:rw-,组和其他:r--
chmod 700 ~/private/ # 仅所有者可访问private目录
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(2)权限的字母表示法
通过字母指定用户和权限
❝格式:
chmod [用户][操作][权限] 文件名
-
用户: u(所有者)、g(所属组)、o(其他用户)、a(所有用户) -
操作: +(添加权限)、-(移除权限)、=(设置权限,覆盖原有) -
权限: r(读)、w(写)、x(执行)
示例(字母形式):
chmod u+x file.sh # 给所有者添加执行权限
chmod g-rw document.txt # 移除所属组的读、写权限
chmod o=rx temp/ # 给其他用户设置读和执行权限(覆盖原有)
chmod a-w data.csv # 移除所有用户的写权限(保护文件不被修改)
chmod ug+x,o-r script.py # 同时给所有者和组添加执行权限,移除其他用户的读权限
(3)特殊权限:SUID / SGID / 粘滞位(Sticky)
SUID(4xxx):让执行者临时拥有文件所有者权限
-
仅对可执行文件生效 -
显示位置:所有者权限的 x 位变成 s
chmod u+s 文件名
# 或数字法
chmod 4755 文件名
+s:设置 SUID/SGID(执行文件时继承所有者 / 组权限,如passwd命令)
chmod u+s /usr/bin/passwd # 普通用户执行passwd时临时获得root权限
SGID(2xxx):目录内新文件继承目录的所属组
-
对目录最常用(团队共享) -
显示位置:组权限的 x 位变成 s
chmod g+s 目录名
# 或数字法
chmod 2775 目录名
粘滞位 Sticky(1xxx):仅文件所有者可删除自己的文件
-
仅对目录生效 -
显示位置:其他权限的最后一位变成 t
chmod +t 目录名
# 或数字法
chmod 1777 目录名
+t:粘滞位(仅目录所有者可删除其中文件,如/tmp)
chmod +t /shared/ # 防止共享目录中文件被非所有者删除
2. chown :修改文件 / 目录的所有者和所属组
chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。
❝格式:
chown [所有者][:所属组] 文件名
-
仅修改所有者: chown 新用户 文件名 -
仅修改所属组: chown :新组 文件名(或用chgrp 新组 文件名) -
同时修改所有者和组: chown 新用户:新组 文件名
常用参数:
-
-R,–recursive:递归修改目录及其中所有内容的所有者 / 组 -
-v, –verbose: 显示详细操作信息 -
-c, –changes: 只显示实际发生更改的文件 -
-f, –silent, –quiet: 抑制错误信息 -
–reference=文件: 使用参考文件的所有者和组设置 -
-h,–no-dereference: 影响符号链接本身,而不是链接指向的文件 -
–from=当前所有者: 只有当前所有者匹配时才更改
示例:
chown alice file.txt # 将file.txt的所有者改为alice
chown :dev team/ # 将team目录的所属组改为dev组
chown bob:dev project/ # 将project目录的所有者改为bob,所属组改为dev
chown -R root:/var/log # 递归将/var/log目录及内容的所有者改为root,组改为log组
3. su/sudo : 切换用户 & 提权执行
(1)su:切换用户
su # 切换到root(需要root密码)
su - root # 完全切换root环境(推荐)
su alice # 切换到alice用户
(2)sudo:以 root 权限执行命令
普通用户默认无系统级操作权限(如修改系统配置、安装软件),sudo允许授权用户临时使用 root 权限(需输入当前用户密码,默认 5 分钟内无需重复验证)。
常用场景:
sudo apt install nginx # 以root权限安装nginx(Debian/Ubuntu)
sudo systemctl restart sshd # 重启ssh服务(需root权限)
sudo vim /etc/passwd # 编辑系统用户配置文件(普通用户无权限)
sudo su # 切换到root用户(需sudo权限,谨慎使用)
sudo 配置(/etc/sudoers):
只有在/etc/sudoers文件中被授权的用户才能使用sudo,由 root 用户通过visudo命令编辑(安全的编辑方式,避免语法错误):
sudo visudo # 打开sudo配置文件
添加授权(例如允许alice用户执行所有 root 命令):
alice ALL=(ALL:ALL) ALL # 格式:用户名 主机=(可切换的用户:可切换的组) 允许执行的命令
4. chgrp : 专门修改文件或目录的所属群组
chgrp是修改文件所属组的专用命令,功能类似chown :组名,格式:
chgrp dev file.txt # 将file.txt的所属组改为dev
chgrp users file1.txt file2.txt file3.txt # 将file1.txt file2.txt file3.txt的所属组改为users
chgrp -R admin docs/ # 递归将docs目录及内容的所属组改为admin
chgrp -v dev file.txt #显示详细操作信息
5. 权限管理常见场景
-
保护敏感文件:
chmod 600 ~/.ssh/id_rsa # 仅自己可读写私钥文件
-
共享目录设置:
chmod 775 /shared/ # 所有者和组有全权限,其他用户只读/执行
chown -R :team /shared/ # 将共享目录所属组设为team,方便团队协作
-
脚本可执行权限:
chmod +x backup.sh # 给脚本添加执行权限,之后可直接用./backup.sh运行
文件权限与目录权限的区别(非常重要)
很多新手容易混淆,这里明确说明:
文件权限
-
r:可以查看文件内容 -
w:可以修改 / 保存 / 删除文件 -
x:可以执行文件(脚本 / 程序)
目录权限
-
r:可以列出目录内文件(ls) -
w:可以在目录内创建、删除、重命名文件 -
x:可以进入目录(cd) -
没有 x 权限,无法访问目录内任何文件
-
总结
-
要进入目录,必须有 x 权限 -
要修改目录内文件,必须有 w 权限
6.SUID / SGID / Sticky 详细说明
suid和sgid
SUID 让普通用户临时拥有程序所有者权限,SGID 则让用户在特定目录下创建的文件继承目录的组权限。
(1) suid(Set User ID):临时获取程序所有者权限
SUID 是一种文件特殊权限,仅对可执行文件有效。当普通用户执行带有 SUID 权限的程序时,会临时获得该程序所有者(通常是 root)的权限,执行完成后权限自动收回。
核心作用
-
解决普通用户执行特定高权限操作的需求,比如 passwd命令(普通用户需修改自己的密码,而密码文件/etc/shadow仅 root 可写)。 -
查看
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root ...
关键命令与案例
|
|
|
|
|---|---|---|
|
|
ls -l 文件名 |
ls -l /usr/bin/passwd,输出中-rwsr-xr-x的s在所有者权限位,代表有 SUID。 |
|
|
chmod u+s 文件名
chmod 4755 文件名 |
test.sh添加 SUID:chmod u+s test.sh,此时文件权限会显示为-rwsr-xr-x。 |
|
|
chmod u-s 文件名 |
test.sh的 SUID:chmod u-s test.sh,权限会恢复为-rwxr-xr-x。 |
注意事项
-
SUID 仅对可执行文件生效,给普通文件(如.txt)加 SUID 无意义。 -
谨慎给高权限程序(如 bash)加 SUID,可能导致权限泄露,被恶意利用获取 root权限。
(2) sgid(Set Group ID):继承目录的组权限
SGID 既可以作用于可执行文件,也可以作用于目录,日常使用中作用于目录的场景更常见。当用户在带有 SGID 权限的目录下创建文件 / 子目录时,新文件 / 子目录的组会自动继承该目录的组,而非创建者的默认组。
核心作用
-
方便团队协作:比如开发团队共享一个目录,所有人在该目录下创建的文件都属于 “dev” 组,确保团队成员都能访问。 -
设置:
chmod 2775 /shared
chmod g+s /shared
关键命令与案例
|
|
|
|
|---|---|---|
|
|
ls -ld 目录名 |
ls -ld /opt/dev,输出中drwxr-sr-x的s在组权限位,代表有 SGID。 |
|
|
chmod g+s 目录名
chmod 2755 目录名 |
/opt/dev添加 SGID:chmod g+s /opt/dev,目录权限变为drwxr-sr-x。 |
|
|
chmod g-s 目录名 |
/opt/dev的 SGID:chmod g-s /opt/dev,权限恢复为drwxr-xr-x。 |
注意事项:
-
作用于可执行文件时,用户执行程序会临时获得程序所属组的权限,类似 SUID 但针对 “组”。 -
若目录同时设置 SGID 和 “组可写”( g+w),需配合umask确保新文件默认有组写权限(如umask 002),否则协作仍会受影响。
(3)Sticky Bit 粘滞位
-
只对目录生效 -
作用:任何人都可以写,但只有自己能删自己的文件 -
典型: /tmp
设置:
chmod 1777 /tmp
chmod +t /shared
7.umask:默认权限掩码(新建文件 / 目录的默认权限)
umask指定在建立文件时预设的权限掩码。
umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
语法:
❝umask [-S][权限掩码]
参数说明:
以文字的方式来表示权限掩码。
示例:
-
文件默认权限:644 -
目录默认权限:755 -
由 umask 控制
查看:
umask #获取当前权限掩码
输出信息如下:
0022
置团队共享(新建文件默认为 664,目录 775),接下来,使用指令”mkdir”创建一个目录,并使用指令”ls”获取该目录的详细信息,输入命令如下:
$ mkdir test1 #创建目录
$ ls –d –l test1/ #显示目录的详细信息
执行上面的命令后,将显示新创建目录的详细信息,如下所示:
drwxr-xr-x 2 rootlocal rootlocal 4096 2011-9-19 21:46 test1/
注意:在上面的输出信息中,”drwxr-xr-x”=”777-022=755″。
8.权限管理实战场景(最常用)
① 给脚本加执行权限
chmod +x backup.sh
./backup.sh
② 团队共享目录
mkdir /shared
chmod 2775 /shared
chown -R :dev /shared
所有人可进入,同组可读写,文件自动继承 dev 组。
③ 保护 SSH 密钥(必须 600)
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh
④ 公共目录但禁止删除别人文件
chmod 1777 /public
快速查看权限
ls -l 文件名 # 看文件权限
ls -ld 目录名 # 看目录权限
stat 文件名 # 看详细权限(含数字)
想了解更多干货,可通过下方扫码关注

可扫码添加上智启元官方客服微信👇

17认证网








