主机安全【2】 - Linux文件权限

简介: 记录linux文件权限相关知识

大多数现在操作系统都有权限控制机制,来限制用户对某个文件或目录可以执行的操作。
参考:https://zhuanlan.zhihu.com/p/398795694
参考:https://blog.csdn.net/wh8_2011/article/details/50825340

普通权限表示方法

使用ls -l命令可以查看文件或目录的权限:

debian1@debian1:~$ ls -l test
-rwxr-xr-x 1 root root 2353862  6月 11 15:33 test
debian1@debian1:~$ ls -al
总用量 2400
drwxr-xr-x 6 debian1 debian1    4096  6月 11 15:33 .

执行结果的第一列即文件权限,一共10个字符表示。

  • 第一个字符用d或-字符表示是目录(d)还是文件(-)
  • 后面的九个字符分为三组,分别表示文件的owner,文件所在的group,和other对文件的访问权限。
  • 对文件的访问权限分为三种:可读(r)、可写(w)、可执行(x),某类用户的权限除了用rwx三个字符表示外,还可以用一个数字表示,可读为4,可写为2,可执行为1,多个权限用对应权限的和表示,例如可读可写可执行用数字7(=4+2+1)表示。

普通权限修改

在linux和macOS中,可以使用chmod系统调用来修改文件和目录的权限。命令原型如下:

chmod [-cvfR] [--help] [--version] mode file...

参数:
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

其中mode可以使用字符表示法,可以单独设置每类用户的每类权限。

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  • +表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

实例:

# 修改文件owner为root
chown root file
# 修改文件group为root组
chgrp root file
# 为该文件增加所有人的可执行权限
chmod a+x file   
# 删除other的执行权限,新增group的读权限,owner设置为可读可写可执行
chmod o-x,g+w,u=rwx file

mode也可以用数字表示法,数字表示法只能一次性重新修改文件的所有权限
可读为4,可写为2,可执行为1,多个权限用对应权限的和表示
实例

# 设置文件file的权限为所有人可读可写可执行
# 与chmod a=rwx file 等效
chmod 777 file  
# 设置文件file的权限为owner可读可写可执行,即7=4+2+1
# 用户所在组的其他成员,可读可写,即5=4+2,其他人同理 
# 与chmod a=rw,u+x file
chmod 766 file

高级权限设置

在类 Unix 操作系统上,文件和目录的所有权是基于文件创建者的默认 uid(user-id)和 gid(group-id)的。启动一个进程时也是同样的情况:它以启动它的用户的 uid 和 gid 运行,并具有相应的权限。这种行为可以通过使用特殊的权限进行改变。

setuid

当使用 setuid (设置用户 ID)位时,之前描述的行为会有所变化,所以当一个可执行文件启动时,它不会以启动它的用户的权限运行,而是以该文件所有者的权限运行。所以,如果在一个可执行文件上设置了 setuid 位,并且该文件由 root 拥有,当一个普通用户启动它时,它将以 root 权限运行。显然,如果 setuid 位使用不当的话,会带来潜在的安全风险。

使用 setuid 权限的可执行文件的例子是 passwd,我们可以使用该程序更改登录密码。我们可以通过使用 ls 命令来验证:

ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27768 Feb 11 2017 /bin/passwd

setuid 位是用 s 来表示的,代替了可执行位的 x。小写的 s 意味着可执行位已经被设置,否则你会看到一个大写的 S。大写的 S 发生于当设置了 setuid 或 setgid 位、但没有设置可执行位 x 时。它用于提醒用户这个矛盾的设置:如果可执行位未设置,则 setuid 和 setgid 位均不起作用。setuid 位对目录没有影响。

setgid 位

与 setuid 位不同,setgid (设置组 ID)位对文件和目录都有影响。在第一个例子中,具有 setgid 位设置的文件在执行时,不是以启动它的用户所属组的权限运行,而是以拥有该文件的组运行。换句话说,进程的 gid 与文件的 gid 相同。

当在一个目录上使用时,setgid 位与一般的行为不同,它使得在所述目录内创建的文件,不属于创建者所属的组,而是属于父目录所属的组。这个功能通常用于文件共享(目录所属组中的所有用户都可以修改文件)。就像 setuid 一样,setgid 位很容易识别(我们用 test 目录举例):

ls -ld test
drwxrwsr-x. 2 egdoc egdoc 4096 Nov 1 17:25 test

这次 s 出现在组权限的可执行位上。

sticky 位

sticky (粘连)位的工作方式有所不同:它对文件没有影响,但当它在目录上使用时,所述目录中的所有文件只能由其所有者删除或移动。一个典型的例子是 /tmp 目录,通常系统中的所有用户都对这个目录有写权限。所以,设置 sticky 位使用户不能删除其他用户的文件:

$ ls -ld /tmp
drwxrwxrwt. 14 root root 300 Nov 1 16:48 /tmp

在上面的例子中,目录所有者、组和其他用户对该目录具有完全的权限(读、写和执行)。sticky 位在可执行位上用 t 来标识。同样,小写的 t 表示可执行权限 x也被设置了,否则你会看到一个大写字母 T

如何设置特殊权限位

就像普通的权限一样,特殊权限位可以用 chmod 命令设置,使用数字或者 ugo/rwx 格式。在前一种情况下,setuid、setgid 和 sticky 位分别由数值 4、2 和 1 表示。例如,如果我们要在目录上设置 setgid 位,我们可以运行:

$ chmod 2775 test

通过这个命令,我们在目录上设置了 setgid 位(由四个数字中的第一个数字标识),并给它的所有者和该目录所属组的所有用户赋予全部权限,对其他用户赋予读和执行的权限(目录上的执行位意味着用户可以 cd 进入该目录或使用 ls 列出其内容)。

另一种设置特殊权限位的方法是使用 ugo/rwx 语法:

$ chmod g+s test

要将 setuid 位应用于一个文件,我们可以运行:

$ chmod u+s file

要设置 sticky 位,可运行:

$ chmod o+t test

在某些情况下,使用特殊权限会非常有用。但如果使用不当,可能会引入严重的漏洞,因此使用之前请三思。

相关文章
|
3月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
217 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
4月前
|
安全 Linux C++
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
202 0
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
|
5月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
368 10
|
5月前
|
安全 Linux iOS开发
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
550 0
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
7月前
|
安全 Linux iOS开发
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
158 1
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
670 0
Vanilla OS:下一代安全 Linux 发行版
|
存储 安全 Linux
|
8月前
|
Ubuntu Linux 网络安全
如何在Linux中更改主机名?修改主机名最新方法
本期教程将指导您如何在Linux系统中更改主机名。主机名是Linux系统的常用功能,用于识别服务器,帮助区分不同服务器,并与网络进程和其他应用程序协同工作。教程涵盖显示当前主机名的方法(通过`hostname`命令),以及在CentOS 7、Debian 9和Ubuntu 16.04及以上版本中更改主机名的步骤(使用`hostnamectl set-hostname`命令)。对于其他Linux版本,可编辑`/etc/hostname`文件实现更改。记得重启相关服务或服务器以使更改生效!
2097 12
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
1174 78
|
10月前
|
人工智能 Linux iOS开发
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
486 12
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描

热门文章

最新文章