linux常用命令:权限管理17认证网

正规官方授权
更专业・更权威

linux常用命令:权限管理

文件 / 目录权限怎么看

使用 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目录
数字
权限
rwx
二进制
7
读 + 写 + 执行
rwx
111
6
读 + 写
rw-
110
5
读 + 执行
r-x
101
4
只读
r–
100
3
写 + 执行
-wx
011
2
只写
-w-
010
1
只执行
–x
001
0
000

(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 ...

关键命令与案例

操作目标
命令
案例说明
查看文件是否有 SUID 权限
ls -l 文件名
执行ls -l /usr/bin/passwd,输出中-rwsr-xr-xs在所有者权限位,代表有 SUID。
给文件添加 SUID 权限
chmod u+s 文件名

 或 chmod 4755 文件名
test.sh添加 SUID:chmod u+s test.sh,此时文件权限会显示为-rwsr-xr-x
移除文件 SUID 权限
chmod u-s 文件名
移除test.sh的 SUID:chmod u-s test.sh,权限会恢复为-rwxr-xr-x

注意事项

  1. SUID 仅对可执行文件生效,给普通文件(如.txt)加 SUID 无意义。
  2. 谨慎给高权限程序(如bash)加 SUID,可能导致权限泄露,被恶意利用获取 root权限。

(2) sgid(Set Group ID):继承目录的组权限

SGID 既可以作用于可执行文件,也可以作用于目录,日常使用中作用于目录的场景更常见。当用户在带有 SGID 权限的目录下创建文件 / 子目录时,新文件 / 子目录的组会自动继承该目录的组,而非创建者的默认组。

核心作用

  • 方便团队协作:比如开发团队共享一个目录,所有人在该目录下创建的文件都属于 “dev” 组,确保团队成员都能访问。
  • 设置:
chmod 2775 /shared
chmod g+s /shared

关键命令与案例

操作目标
命令
案例说明
查看目录是否有 SGID 权限
ls -ld 目录名
执行ls -ld /opt/dev,输出中drwxr-sr-xs在组权限位,代表有 SGID。
给目录添加 SGID 权限
chmod g+s 目录名

 或 chmod 2755 目录名
/opt/dev添加 SGID:chmod g+s /opt/dev,目录权限变为drwxr-sr-x
移除目录 SGID 权限
chmod g-s 目录名
移除/opt/dev的 SGID:chmod g-s /opt/dev,权限恢复为drwxr-xr-x

注意事项:

  1. 作用于可执行文件时,用户执行程序会临时获得程序所属组的权限,类似 SUID 但针对 “组”。
  2. 若目录同时设置 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认证网 » linux常用命令:权限管理
分享到:0

评论已关闭。

400-663-6632
咨询老师
咨询老师
咨询老师