Unix系统中的每个用户都分配了一个用户名和一个整数用户id号。

Unix系统中的用户也可以属于组,组是一组用户。

在Unix系统中,可以在终端上使用groupadd命令创建组。命令

执行命令groupadd test

创建名为test的新组。要将用户添加到组中,使用usermod命令,带-a选项添加用户,带-G选项指定用户组。例如,

sudo usermod -a -G test

将用户Joe添加到测试组。

文件的赢博体育权

Unix系统中存储在每个文件中的一个重要元数据是拥有该文件的用户的身份。它被存储为创建文件的用户的整数用户id。此外,赢博体育文件还具有组赢博体育权,其中列出了拥有该文件的组的组id。

用户id是在用户创建文件或目录时自动设置的。

该用户id可以通过chown命令修改。例如:命令

Sudo chown root myfile.txt

将myfile.txt文件的赢博体育者改为root用户。您也可以使用chown命令来设置文件的组赢博体育权:

Sudo chown root:test myfile.txt

文件权限

Unix文件系统在与文件关联的索引节点中存储的一项重要元数据是文件的权限位。该数据的目的是指示谁有权对文件执行常见操作,包括读取文件和写入文件。而且,由于Unix中的几乎赢博体育内容都是文件,因此这些权限也会影响Unix系统中赢博体育程序可执行文件、目录和其他对象的行为。

权限位中列出的每个权限都以简单的yes/no开关的形式出现。操作系统使用单个比特来表示每个不同的权限,值0表示拒绝该权限,值1表示授予该权限。权限也被组织成三组,称为三元组。第一个三元组owner适用于所讨论的文件的赢博体育者。第二个三元组group适用于属于特定用户组的用户。第三个特征,other,适用于不属于前两类的赢博体育用户。

每个三元组都包含三个不同的权限:读、写和执行。读取权限授予打开文件进行读取的权限。写权限授予打开文件进行写操作的权限。执行权限在不同的情况下有不同的含义。执行权限最常见的用途是赢博体育于程序可执行文件和脚本,并授予运行程序或脚本的权限。执行权限也适用于目录。如果用户没有特定目录的执行权限,则该用户将无法通过cd终端命令进入该目录,并且他们将无法访问存储在该目录中的任何文件或目录。

附加许可位

除了上面提到的位之外,文件还有另外三个可以设置的位:setuid位、setgid位和sticky位。同样,这些位对于不同类型的文件有略微不同的解释。

当赢博体育于可执行文件时,setuid位将使程序以文件赢博体育者的特权运行,而不是以执行文件的用户的特权运行。最常见的用例是当根用户拥有一个可执行文件,并且该可执行文件的执行位在另一个三元组中设置为1。在此场景中,任何用户都可以运行该程序,并且程序在运行时将root作为其有效用户,从而赋予该程序root用户的赢博体育访问权限。

类似地,在可执行文件上设置setgid位会导致程序在运行时将其组设置为拥有该文件的组,而不是启动该程序的用户所属的组。

setgid位在赢博体育于目录时有不同的解释。设置了setgid位的目录将导致在该目录中创建的任何文件和目录继承该目录的组。

粘性部分则更加模糊。在目录上设置粘附位限制了该目录,因此只有文件的赢博体育者、目录的赢博体育者或根用户可以重命名或删除该目录中的任何文件。

使用ls查看权限

ls命令用于列出目录下的文件信息。使用-l开关显示列出的每个文件的扩展信息。

drwxr-xr-x 2 joe joe 4096 2月26日13:11桌面drwxr-xr-x 16 joe joe 4096 1月18日12:23文档drwxr-xr-x 4 joe joe 4096 3月1日09:05下载-rw-rw-r- 1 joe joe 31681 2月6日20:26 notes.txt

设置权限位

可以在终端中使用chmod命令设置各种权限位。chmod命令可以使用数字代码或字母代码。

数字代码将赢博体育的权限位编码为4个8位进制数字。四位数字依次表示特殊位、赢博体育者三位一体、组三位一体和其他三位一体。以8为基数是合适的,因为以8为基数的数字有三个位,对应于每个集合中的三个位。

下面是一些例子:

Chmod 0777 myfile.txt

以8为基数的数字7的三个位都设为1。在本例中,将为每个三元组打开读、写和执行权限,而不将任何特殊位设置为1。

Chmod 0660 myfile.txt

此示例授予赢博体育者和组读写权限,其他人不授予权限。

Chmod 0755 myscript.sh

此示例向脚本的赢博体育者授予读、写和执行权限,而只向组和其他人授予读和执行权限。

字母形式用于打开或关闭单个权限。下面是一些例子

Chmod g+w myscript.sh

将脚本的组三元组中的写权限位打开。

Chmod oga+x myscript.sh

为赢博体育者、组和其他人(全部)打开执行权限。命令

Chmod +x myscript.sh

有同样的效果。

Chmod a-x myscript.sh

移除另一个三元组的执行权限。

由程序创建的文件

当赢博体育程序使用open()系统调用创建文件并指定O_CREAT标志时,程序应该为open()提供第三个参数,该参数指定新创建文件的文件权限:

open("output.txt", o_create | O_WRONLY,0660);

将授予赢博体育者和组读和写权限,而不授予其他权限。

这些权限可以通过赢博体育程序的umask进一步限制。umask是一组位,用于指定赢博体育程序创建文件时在赢博体育情况下都要显式拒绝的权限。通过调用umask()系统调用来设置umask:

umask (0033);

设置一个umask值,拒绝对赢博体育程序创建的任何文件的group和other的写和执行权限。即使程序试图在open()调用中授予这些特权,也适用此限制。