原文: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 |
-
文件类型
-
所有者权限
-
组权限
-
其他人的许可
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,完全权限
- 当前组具有 4 + 0 + 1,读取和执行权限
- 其它用户都有 4 + 0 + 1,读取和执行权限
使用`ls -l'。请注意,权限将以“drwxrwxrwx”格式输出。第一个字符表示文件类型的类型。第一个字符的可能的取值:
- (-)常规文件
- (d)目录
- (c)字符设备文件
- (l)链接
- (p)管道
- (b)块设备
- (s)网络设备
使用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);
set-user-ID-on-execution是为了在文件运行时更改与进程关联的用户。这通常用于需要有root权限才行,但由非root用户执行的该命令。这个时候就用到sudo
set-group-ID-on-execution 更改运行进程的组。
最常见的用例是,用户可以在程序的持续时间内拥有 root(admin)访问权限。
$ 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
返回真实用户 ID(如果以 root 身份登录则为零)geteuid
返回有效的用户 ID(如果作为 root 用户,则为零,例如由于程序上设置的 setuid 标志)
- 通过调用
geteuid()
检查用户的有效权限。返回值为零表示程序以 root 身份有效运行。