ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 文件系统,第 3 部分:权限 > 原文:<https://github.com/angrave/SystemProgramming/wiki/File-System%2C-Part-3%3A-Permissions> ## 提醒我,权限再次意味着什么? 每个文件和目录都有一组 9 个权限位和一个类型字段 * r,读取文件的权限 * w,写入文件的权限 * x,执行文件的权限 chmod 777 | CHMOD | 7 | 7 | 7 | | --- | --- | --- | --- | | 01 | 111 | 111 | 111 | | d | RWX | rwx | rwx | | 1 | 2 | 3 | 4 | 1. 文件类型 2. 所有者权限 3. 组权限 4. 其他人的许可 `mknod`更改第一个字段,即文件的类型。 `chmod`接受一个数字和一个文件并更改权限位。 该文件有一个所有者。如果您的进程具有与所有者(或 root)相同的用户 ID,则第一个三元组中的权限将适用于您。如果您与文件位于同一组(所有文件也归组所有),则下一组权限位适用于您。如果以上都不适用,则最后一个三元组适用于您。 ## 如何更改文件的权限? 使用`chmod`(“更改文件模式位”的缩写) 有一个系统调用`int chmod(const char *path, mode_t mode);`,但我们将专注于 shell 命令。使用`chmod`有两种常用方法;使用八进制值或符号字符串: ``` $ chmod 644 file1 $ chmod 755 file2 $ chmod 700 file3 $ chmod ugo-w file4 $ chmod o-rx file4 ``` base-8('octal')数字描述了每个角色的权限:拥有该文件的用户,该组以及其他所有人。八进制数是给予三种权限类型的三个值的总和:read(4),write(2),execute(1) 示例:chmod 755 myfile * r + w + x =数字 * 用户有 4 + 2 + 1,完全权限 * group 具有 4 + 0 + 1,读取和执行权限 * 所有用户都有 4 + 0 + 1,读取和执行权限 ## 如何从 ls 读取权限字符串? 使用`ls -l'。请注意,权限将以“drwxrwxrwx”格式输出。第一个字符表示文件类型的类型。第一个字符的可能值: * ( - )常规文件 * (d)目录 * (c)字符设备文件 * (l)象征性联系 * (p)管道 * (b)阻止装置 * (s)插座 ## 什么是 sudo? 使用`sudo`成为机器上的管理员。例如通常(除非在'/ etc / fstab'文件中明确指定,否则您需要 root 权限才能挂载文件系统)。 `sudo`可用于以 root 身份临时运行命令(前提是用户具有 sudo 权限) ``` $ sudo mount /dev/sda2 /stuff/mydisk $ sudo adduser fred ``` ## 如何更改文件的所有权? 使用`chown username filename` ## 如何从代码中设置权限? `chmod(const char *path, mode_t mode);` ## 为什么有些文件'setuid'?这是什么意思? set-user-ID-on-execution 位在文件运行时更改与进程关联的用户。这通常用于需要以 root 身份运行但由非 root 用户执行的命令。这方面的一个例子是`sudo` set-group-ID-on-execution 更改运行进程的组。 ## 它们为什么有用? 最常见的用例是,用户可以在程序的持续时间内拥有 root(admin)访问权限。 ## sudo 运行的权限是什么? ``` $ ls -l /usr/bin/sudo -r-s--x--x 1 root wheel 327920 Oct 24 09:04 /usr/bin/sudo ``` 's'位表示执行和 set-uid;该进程的有效用户标识将与父进程不同。在这个例子中它将是 root ## getuid()和 geteuid()之间有什么区别? * `getuid`返回真实用户 ID(如果以 root 身份登录则为零) * `geteuid`返回有效的用户 ID(如果作为 root 用户,则为零,例如由于程序上设置的 setuid 标志) ## 如何确保只有特权用户才能运行我的代码? * 通过调用`geteuid()`检查用户的有效权限。返回值为零表示程序以 root 身份有效运行。 [转到文件系统:第 4 部分](https://github.com/angrave/SystemProgramming/wiki/File-System,-Part-4:-Working-with-directories)