FreeBSD 中文手册
FreeBSD 中文社区
  • FreeBSD 中文手册
  • 编辑日志
  • 译者说明
  • FreeBSD 中文手册
  • 概述
  • 前言
    • 致读者
    • 第四版
    • 第三版
    • 第二版(2004)
    • 第一版(2001)
    • 本书的组织结构
    • 本书中使用的一些约定
    • 致谢
  • 第一部分:快速开始
  • 第1章 简介
    • 1.1.概述
    • 1.2.欢迎来到 FreeBSD!
    • 1.3.关于 FreeBSD 项目
  • 第2章 安装 FreeBSD
    • 2.1.概述
    • 2.2.最低硬件要求
    • 2.3.安装前的准备工作
    • 2.4.开始安装
    • 2.5.使用 bsdinstall
    • 2.6.分配磁盘空间
    • 2.7.获取安装文件
    • 2.8.账户、时区、服务和安全
    • 2.9.故障排除
    • 2.10.使用 Live CD
  • 第3章 FreeBSD 基础
    • 3.1.概述
    • 3.2.虚拟控制台和终端
    • 3.3.用户和基本账户管理
    • 3.4.权限
    • 3.5.目录结构
    • 3.6.磁盘结构
    • 3.7.文件系统的挂载与卸载
    • 3.8.进程和守护进程
    • 3.9.Shell
    • 3.10.文本编辑器
    • 3.11.设备和设备节点
    • 3.12.手册页
  • 第4章 安装应用程序:软件包和 Ports
    • 4.1.概述
    • 4.2.软件安装的概述
    • 4.3.寻找所需的应用程序
    • 4.4.使用 pkg 管理二进制包
    • 4.5.使用 Ports
    • 4.6.使用 Poudriere 构建软件包
    • 4.7.安装后的注意事项
    • 4.8.如何处理损坏的 port
  • 第5章 X Window 系统
    • 5.1.概述
    • 5.2.安装 Xorg
    • 5.3.显卡驱动
    • 5.4.Xorg 配置
    • 5.5.在 X11 中使用字体
  • 第6章 FreeBSD 中的 Wayland
    • 6.1.简介
    • 6.2.Wayland 概述
    • 6.3.Wayfire 混成器
    • 6.4.Hikari 混成器
    • 6.5.Sway 混成器
    • 6.6.使用 Xwayland
    • 6.7.使用 VNC 进行远程连接
    • 6.8.Wayland 登录管理器
    • 6.9.实用工具
  • 第7章 网络
    • 7.1.概述
    • 7.2.设置网络
    • 7.3.有线网络
    • 7.4.无线网络
    • 7.5.主机名
    • 7.6.DNS
    • 7.7.故障排除
  • 第二部分:常见任务
  • 第8章 桌面环境
    • 8.1.概述
    • 8.2.桌面环境
    • 8.3.浏览器
    • 8.4.开发工具
    • 8.5.桌面办公应用
    • 8.6.文档阅读器
    • 8.7.财务
  • 第9章 多媒体
    • 9.1.概述
    • 9.2.设置声卡
    • 9.3.音频播放器
    • 9.4.视频播放器
    • 9.5.视频会议
    • 9.6.图像扫描仪
  • 第10章 配置 FreeBSD 内核
    • 10.1.概述
    • 10.2.为什么要构建定制内核
    • 10.3.浏览系统硬件
    • 10.4.配置文件
    • 10.5.构建并安装定制内核
    • 10.6.如果发生了错误
  • 第11章 打印
    • 11.1.快速入门
    • 11.2.连接打印机
    • 11.3.常见的页面描述语言(PDL)
    • 11.4.直接打印
    • 11.5.LPD(行式打印机程序)
    • 11.6.其他打印系统
  • 第12章 Linux 二进制兼容层
    • 12.1.概述
    • 12.2.配置 Linux 二进制兼容层
    • 12.3.Linux 用户空间
    • 12.4.高级主题
  • 第13章 WINE
    • 13.1.概述
    • 13.2.WINE 概述和概念
    • 13.3.在 FreeBSD 上安装 WINE
    • 13.4.在 FreeBSD 上运行第一个 WINE 程序
    • 13.5.配置 WINE 安装程序
    • 13.6.WINE 图形化用户管理界面
    • 13.7.多用户 FreeBSD 与 WINE
    • 13.8.FreeBSD 上的 WINE 常见问题
  • 第三部分:系统管理
  • 第14章 配置与优化
    • 14.1.概述
    • 14.2.配置文件
    • 14.3.管理 FreeBSD 中的服务
    • 14.4.Cron 和 Periodic
    • 14.5.配置系统日志
    • 14.6.电源和资源管理
    • 14.7.添加交换空间
  • 第15章 FreeBSD 的引导过程
    • 15.1.概述
    • 15.2.FreeBSD 的引导过程
    • 15.3.Device Hints
    • 15.4.关机流程
  • 第16章 安全
    • 16.1.概述
    • 16.2.简介
    • 16.3.账户安全
    • 16.4.入侵检测系统(IDS)
    • 16.5.安全等级
    • 16.6.文件标志位
    • 16.7.OpenSSH
    • 16.8.OpenSSL
    • 16.9.Kerberos
    • 16.10.TCP 封装器(TCP Wrapper)
    • 16.11.访问控制列表(ACL)
    • 16.12.Capsicum
    • 16.13.进程记账
    • 16.14.资源限制
    • 16.15.监控第三方安全问题
    • 16.16.FreeBSD 安全公告
  • 第17章 jail 与容器
    • 17.1.概述
    • 17.2.jail 的类型
    • 17.3.主机配置
    • 17.4.传统 jail(厚 jail)
    • 17.5.瘦 jail
    • 17.6.管理 jail
    • 17.7.更新 jail
    • 17.8.jail 资源限制
    • 17.9.jail 管理器与容器
  • 第18章 强制访问控制
    • 18.1.概述
    • 18.2.关键术语
    • 18.3.了解 MAC 标签
    • 18.4.规划安全配置
    • 18.5.可用的 MAC 策略
    • 18.6.用户锁定
    • 18.7.MAC Jail 中的 Nagios
    • 18.8.MAC 框架的故障排除
  • 第19章 安全事件审计
    • 19.1.概述
    • 19.2.关键术语
    • 19.3.审计配置
    • 19.4.使用审计跟踪
  • 第20章 存储
    • 20.1.概述
    • 20.2.添加磁盘
    • 20.3.调整和增加磁盘大小
    • 20.4.USB 存储设备
    • 20.5.创建和使用 CD
    • 20.6.创建和使用 DVD
    • 20.7.创建和使用软盘
    • 20.8.备份的基础知识
    • 20.9.内存盘
    • 20.10.文件系统快照
    • 20.11.磁盘配额
    • 20.12.加密磁盘分区
    • 20.13.加密交换分区
    • 20.14.高可用性存储(HAST)
  • 第21章 GEOM: 模块化磁盘转换框架
    • 21.1.概述
    • 21.2.RAID0——条带
    • 21.3.RAID1——镜像
    • 21.4.RAID3——带有专用奇偶校验的字节级条带
    • 21.5.软件 RAID 设备
    • 21.6.GEOM Gate 网络设备
    • 21.7.为磁盘设备添加卷标
    • 21.8.通过 GEOM 实现 UFS 日志
  • 第22章 Z 文件系统(ZFS)
    • 22.1.是什么使 ZFS 与众不同
    • 22.2.快速入门指南
    • 22.3.zpool 管理
    • 22.4.zfs 管理
    • 22.5.委托管理
    • 22.6.高级主题
    • 22.7.更多资源
    • 22.8.ZFS 特性和术语
  • 第23章 其他文件系统
    • 23.1.概述
    • 23.2.Linux® 文件系统
    • 23.3.Windows® 文件系统
    • 23.4.MacOS® 文件系统
  • 第24章 虚拟化
    • 24.1.概述
    • 24.2.使用 macOS® 上的 Parallels Desktop 安装 FreeBSD
    • 24.3.使用 macOS® 上的 VMware Fusion 安装 FreeBSD
    • 24.4.使用 VirtualBox™ 安装 FreeBSD
    • 24.5.在 FreeBSD 上安装 VirtualBox™
    • 24.6.使用 FreeBSD 上的 QEMU 虚拟化
    • 24.7.使用 FreeBSD 上的 bhyve 虚拟机
    • 24.8.基于 FreeBSD 的 Xen™ 虚拟机
  • 第25章 本地化——i18n/L10n 的使用和设置
    • 25.1.概述
    • 25.2.使用本地化
    • 25.3.寻找 i18n 应用程序
    • 25.4.特定语言的区域配置
  • 第26章 FreeBSD 更新与升级
    • 26.1.概述
    • 26.2.更新 FreeBSD
    • 26.3.更新 Bootcode
    • 26.4.更新文档
    • 26.5.追踪开发分支
    • 26.6.从源代码更新 FreeBSD
    • 26.7.多台机器的追踪
    • 26.8.在非 FreeBSD 主机上进行构建
  • 第27章 DTrace
    • 27.1.概述
    • 27.2.实现上的差异
    • 27.3.开启 DTrace 支持
    • 27.4.启用内核外部模块 DTrace
    • 27.5.使用 DTrace
  • 第28章 USB 设备模式/USB OTG
    • 28.1.概述
    • 28.2.USB 虚拟串行端口
    • 28.3.USB 设备模式网络接口
    • 28.4.USB 虚拟存储设备
  • 第四部分:网络通讯
  • 第29章 串行通信
    • 29.1.概述
    • 29.2.串行术语和硬件
    • 29.3.终端
    • 29.4.拨入服务
    • 29.5.拨出服务
    • 29.6.设置串行控制台
  • 第30章 PPP
    • 30.1.概述
    • 30.2.配置 PPP
    • 30.3.PPP 连接的故障排除
    • 30.4.使用以太网 PPP(PPPoE)
    • 30.5.使用 ATM 上的 PPP (PPPoA)
  • 第31章 电子邮件
    • 31.1.概述
    • 31.2.邮件组件
    • 31.3.DragonFly 邮件代理(DMA)
    • 31.4.Sendmail
    • 31.5.修改邮件传输代理
    • 31.6.邮件用户代理
    • 31.7.高级主题
  • 第32章 网络服务器
    • 32.1.概述
    • 32.2.inetd 超级服务器
    • 32.3.网络文件系统(NFS)
    • 32.4.网络信息系统(NIS)
    • 32.5.轻型目录访问协议(LDAP)
    • 32.6.动态主机设置协议(DHCP)
    • 32.7.域名系统(DNS)
    • 32.8.零配置网络(mDNS/DNS-SD)
    • 32.9.Apache HTTP 服务器
    • 32.10.文件传输协议(FTP)
    • 32.11.用于 Microsoft® Windows® 客户端的文件和打印服务(Samba)
    • 32.12.用 NTP 进行时钟同步
    • 32.13.iSCSI target 和 initiator 的配置
  • 第33章 防火墙
    • 33.1.概述
    • 33.2.防火墙的概念
    • 33.3.PF
    • 33.4.IPFW
    • 33.5.IPFILTER(IPF)
    • 33.6.Blacklistd
  • 第34章 高级网络
    • 34.1.概述
    • 34.2.网关和路由
    • 34.3.虚拟主机
    • 34.4.无线高级身份验证
    • 34.5.无线自组织(Ad-hoc)模式
    • 34.6.USB 网络共享
    • 34.7.蓝牙
    • 34.8.桥接
    • 34.9.链路聚合与故障转移
    • 34.10.使用 PXE 进行无盘操作
    • 34.11.共用地址冗余协议(CARP)
    • 34.12.VLAN
  • 第五部分:附录
  • 附录 A.获取 FreeBSD
    • A.1.镜像站
    • A.2.使用 Git
    • A.3.使用 Subversion
    • A.4.光盘
  • 附录 B.书目
    • B.1.FreeBSD 相关书籍
    • B.2.安全性参考文献
    • B.3.UNIX 历史
    • B.4.期刊与杂志
  • 附录 C.网络资源
    • C.1.网站
    • C.2.邮件列表
    • C.3.Usenet 新闻组
  • 附录 D.OpenPGP 密钥
    • D.1.官方成员
  • 术语表
  • 后记
由 GitBook 提供支持

FreeBSD 中文社区

在本页
  • 3.4.1. 符号权限(Symbolic Permissions)
  • 3.4.2. FreeBSD 文件标志(File Flag)
  • 3.4.3. setuid、setgid 和 sticky 权限

这有帮助吗?

在GitHub上编辑
导出为 PDF
  1. 第3章 FreeBSD 基础

3.4.权限

上一页3.3.用户和基本账户管理下一页3.5.目录结构

最后更新于6天前

这有帮助吗?

在 FreeBSD 中,每个文件和目录都有一组相关的权限,并提供了多种工具用于查看和修改这些权限。了解权限的工作机制是非常必要的,它可以确保用户能够访问他们需要的文件,同时无法不当地访问操作系统使用的文件和其他用户拥有的文件。

本节讨论的是 FreeBSD 中使用的传统 UNIX® 权限。若需更细粒度的文件系统访问控制,另见 。

在 UNIX® 中,通过三种访问类型来分配基本权限:读(read)、写(write)和执行(execute)。这些访问类型用于决定文件的所有者、所属组和其他人(所有其他人)对该文件的访问权限。读、写和执行权限可以分别用字母 r、w 和 x 表示。它们也可以用二进制数字表示,因为每个权限只能是开或关(0 表示关闭)。在数字表示法中,顺序始终是 rwx,其中 r 的开值为 4,w 为 2,x 为 1。

表 4.1 总结了可能的数字与字母组合方式。在阅读“目录列表”一栏时,- 表示该权限被关闭。

表 2:UNIX® 权限

值
权限说明
目录列表表示

0

无读、无写、无执行权限

---

1

无读、无写、有执行权限

--x

2

无读、有写、无执行权限

-w-

3

无读、有写、有执行权限

-wx

4

有读、无写、无执行权限

r--

5

有读、无写、有执行权限

r-x

6

有读、有写、无执行权限

rw-

7

有读、有写、有执行权限

rwx

使用 的 -l 参数可以查看包含权限信息的详细目录列表。例如,在某个目录中运行 ls -l 可能显示如下内容:

% ls -l

输出可能类似如下:

total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt

我们来看 myfile 这一行,最左边的第一个字符表示这个文件的类型,比如常规文件、目录、特殊字符设备、套接字或其他特殊伪文件设备。本例中的 - 表示一个常规文件。接下来的三个字符 rw- 表示该文件所有者的权限。再接下来的三个字符 r-- 表示该文件所属用户组的权限。最后的三个字符 r-- 表示其他所有用户的权限。- 表示该权限被关闭。本例中,该文件的权限设置为:所有者可读写,组用户可读,其他用户也可读。根据上表,这个文件的权限可以表示为 644,每一位数字分别代表该文件权限的三个部分。

系统是如何控制设备权限的呢?FreeBSD 将大多数硬件设备视为一个文件,程序可以打开它、读写它。这些特殊的设备文件存储在 /dev/ 目录中。

如果要列出目录内容,该目录必须具有读权限。如果要删除一个已知名称的文件,则必须对该文件所在的目录具有写权限 和 执行权限。

3.4.1. 符号权限(Symbolic Permissions)

符号权限使用字符而不是八进制值为文件或目录分配权限。符号权限采用 (对象)(操作)(权限) 的语法格式,其中可用的值如下:

选项
字母
代表含义

(对象 who)

u

用户(User)

(对象 who)

g

所属组(Group owner)

(对象 who)

o

其他用户(Other)

(对象 who)

a

所有人(All,“world”)

(操作 action)

+

添加权限

(操作 action)

-

移除权限

(操作 action)

=

明确设定权限

(权限 perms)

r

读取权限(Read)

(权限 perms)

w

写入权限(Write)

(权限 perms)

x

执行权限(Execute)

(权限 perms)

t

粘滞位(Sticky bit)

(权限 perms)

s

设置 UID 或 GID(Set UID/GID)

% chmod go= FILE

如果要对文件进行多项权限变更,可以使用逗号分隔的列表。例如,以下命令移除 FILE 的组用户和“其他用户”的写权限,并为所有用户添加执行权限:

% chmod go-w,a+x FILE

3.4.2. FreeBSD 文件标志(File Flag)

除了文件权限之外,FreeBSD 还支持使用“文件标志”(file flag)。这些标志为文件(但不是目录)提供了更高层次的安全性和控制。通过文件标志,即使是 root 用户也可能被阻止删除或修改文件。

# chflags sunlink file1

要关闭该系统不可删除标志,在 sunlink 前加上 no:

# chflags nosunlink file1
# ls -lo file1
-rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

3.4.3. setuid、setgid 和 sticky 权限

除了前面讨论过的权限,还有三种特定的设置是所有管理员都应了解的。它们分别是 setuid、setgid 和 sticky 权限。

这些设置对某些 UNIX® 操作而言非常重要,因为它们提供了普通用户通常无法获得的功能。要理解这些设置,必须理解“真实用户 ID(real UID)”与“有效用户 ID(effective UID)”之间的区别。

可以通过给用户添加 s 权限的方式符号性地设置 setuid 权限,如下所示:

# chmod u+s suidexample.sh

也可以通过在权限值前加上数字 4 来设置 setuid 权限:

# chmod 4755 suidexample.sh

此时 suidexample.sh 的权限会变为:

-rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh

提示

在终端 A 中:

Changing local password for trhodes
Old Password:

在终端 B 中:

# ps aux | grep passwd

输出示例:

trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd

setgid 权限与 setuid 的作用类似,只不过它影响的是组设置。当某个程序或工具以该权限执行时,它将获得基于文件所属组的权限,而不是发起进程的用户的组。

要用符号方式设置某文件的 setgid 权限,可为组添加 s 权限,例如:

# chmod g+s sgidexample.sh

或使用 chmod 时在权限数字前加上 2:

# chmod 2755 sgidexample.sh

以下示例中,可以看到 s 出现在组权限的位置:

-rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh

注意

setuid 和 setgid 权限可能降低系统安全性,因为它们允许权限提升。第三种特殊权限 sticky bit 则可以增强系统安全。

当目录设置了 sticky bit 后,只有文件的所有者才能删除该文件。这在公共目录(如 /tmp)中非常有用,可防止非文件所有者的用户删除文件。要设置该权限,可以添加 t 模式:

# chmod +t /tmp

或直接设置完整权限为 1777:

# chmod 1777 /tmp

此权限将以 t 的形式显示在权限字符串的最后:

# ls -al / | grep tmp
drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp

目录也被当作文件处理。它们也有读、写和执行权限。目录的可执行位与文件略有不同。当一个目录被设置为可执行时,表示可以使用 命令切换进入该目录。这也意味着可以访问该目录中的文件,当然前提是文件本身的权限允许访问。

还有一些额外的权限位,主要用于特殊场景,例如 setuid 可执行文件和 sticky 目录。关于文件权限的更多信息及设置方法,请参见 。

这些值可与 命令结合使用,但用字母而非数字。例如,以下命令将阻止文件 FILE 的所属组成员及其他所有用户访问该文件:

可以使用 命令修改文件标志。例如,要在 file1 上启用系统不可删除标志,可以执行以下命令:

要查看文件的标志,可使用带 -lo 选项的 命令:

某些文件标志只能由 root 用户添加或移除。在其他情况下,文件所有者也可以设置其文件标志。更多信息请参阅 和 。

真实用户 ID 是指拥有或启动某进程的 UID;而有效用户 ID 则是指进程实际以哪个用户 ID 身份运行。例如,当用户更改自己的密码时, 以该用户的真实 UID 运行。然而,为了更新密码数据库,该命令实际以 root 的有效 UID 运行。这样用户就可以修改自己的密码,而不会遇到 Permission Denied 错误。

注意,文件所有者的执行位已被 s 替代,表示启用了 setuid。这对于需要权限提升的工具(如 )来说非常关键。

使用 nosuid 挂载选项(见 )会导致这类二进制程序在没有提示的情况下静默失败。该选项并非绝对可靠,因为 nosuid 的限制可能被绕过。

可以通过以下方法实时观察此现象:打开两个终端。在一个终端中以普通用户身份输入 passwd,在等待新密码的同时,在另一个终端中查看进程表,观察 的用户信息。

尽管 是由普通用户运行的,但它使用的是 root 的有效 UID。

尽管这些示例中的 shell 脚本是可执行文件,但它们不会以不同的有效 UID 运行。这是因为 shell 脚本无法访问 系统调用。

访问控制列表(Access Control Lists)
ls(1)
cd(1)
chmod(1)
chmod(1)
chflags(1)
ls(1)
chflags(1)
chflags(2)
passwd(1)
passwd(1)
mount(8)
passwd(1)
passwd(1)
setuid(2)