如果你已经管理过Windows一段时间,你可能有用户帐户管理、NTFS文件系统和设置权限的经验。如果是这样,请为Linux文件权限做好准备!在Linux中,文件系统是一个你必须学会的不同的东西,以成为一名熟练的Linux管理员。
这是我们从Windows管理员角度学习Linux的四部分系列的第二部分!如果你还没有阅读第一部分,一定要阅读。
与文件系统一起工作
让我们首先了解Linux如何通过文件系统存储和管理文件。
注意:所有示例将使用OpenSUSE Linux。
不再有驱动器字母
与Windows不同,可移动驱动器和其他设备在重新启动时不会自动获得驱动器字母并打开。在Windows中,每个驱动器都被挂载为一个驱动器字母:C:\,D:\等。Linux中驱动器字母是如何工作的呢?根本没有!
在Linux中,有一个名为root的文件夹。这个文件夹位于文件系统的根目录或简单地说是/
。第一个斜杠是系统中的其他所有文件之前的第一个斜杠。这个斜杠有点像基础C:\,尽管只有其他驱动器字母仅存在于C:\的子文件夹中。
根文件夹是核心系统文件所在的地方。其他所有内容,包括其他设备,都是这个中心文件夹的子文件夹。
Linux模糊了文件夹和文件系统之间的界限。Linux目录/home是所有用户“配置文件”的根目录,类似于Windows中的C:\Users文件夹。在这种情况下,/home是一个目录。但是,在Linux中,“目录”不一定是实际的目录。它们也可以是存储分区,甚至是一个完全独立的硬盘。这个概念类似于Windows的挂载点。
您可以在这篇文章中了解更多关于根文件夹的信息。
用户和主文件夹
如果您使用OpenSUSE,您可能会在桌面上看到一个Home文件夹,如下所示。这个文件夹是C:\users\<username>文件夹或“配置文件”的Linux版本。Linux的“users”文件夹默认位于您的安装磁盘的/home下。
在下面的示例中,用户称为homelab,其“配置文件”位于/home/homelab。

在Linux(和Windows)中,主文件夹(或Windows中的用户配置文件)的简写符号是一个波浪线(~)。如果您看到像
"~/Documents/blah.txt
这样的东西,实际上是指向您的/home/<username>/Documents/blah.txt
文件。
在Linux中,大小写很重要
Linux中的一切都是大小写敏感的。这个概念与Windows完全相反,几乎没有大小写敏感的情况。
例如,如果你有一个名为/home/homelab的目录,那么另一个完全不同的目录可以被命名为/home/Homelab。这个概念也适用于命令。运行cd /home/homelab
与CD /home/homelab
(应该失败)是不同的。
作为Windows用户,这个概念将在某个时候让你困扰。对于大小写要非常小心!你可以看到下面两个不同文件夹的例子。两者之间唯一的区别就是大小写:在Windows环境中,这是不可能的。

用户帐户
像Windows一样,Linux也有用户帐户的概念,但它们的行为有一些不同。首先,从你熟悉的Windows用户帐户的角度来思考Linux用户帐户。
Windows有一些内置用户帐户,如Administrator,隐藏的SYSTEM帐户,Guest等。Windows还有各种内置安全组,如Administrators,Guests等。
你可以通过运行lusrmgr.msc MMC插件查看所有Windows用户和组。

Windows SIDs
为了唯一标识用户和组,Windows使用称为SID的东西。在Windows中,你可以通过运行下面的一些PowerShell命令找到每个用户和组的SID。

每个Windows组SID在所有Windows计算机上都是相同的。Windows的内置用户 SID
是唯一的。在上面的截图中看到的管理员SID在每台Windows计算机上都应该是不同的。在Windows中创建的任何未来用户或组都将是唯一的。请注意下面的测试组。如果您在Windows计算机上创建一个测试组,其SID将是不同的。

Linux用户ID
另一方面,Linux类似地处理用户和组,但这次Linux不使用SID,而是用户ID(UIDs)和组ID(GIDs)。与Windows不同的是,用户和组是唯一的,但不是跨所有计算机唯一的。这意味着您在计算机A上的UID可能与计算机B上的完全相同的UID,即使不是同一个用户。
UID和GID都遵循一个简单的数字约定;每个UID和GID从0开始递增,范围从1到999用于内部系统帐户,从1000开始用于自定义用户帐户。
内置的根用户始终具有UID为0和GID为0。而且,像Windows隐藏的SYSTEM帐户一样,这个根帐户通常(取决于Linux发行版)被阻止登录。
内置的根用户类似于Windows的SYSTEM和管理员内置帐户,有点像两者合二为一。即使您在Windows中以管理员身份工作,仍然有一些内置保障措施防止您完全摧毁Windows。
而root用户则是绝对权限。如果你故意切换到root用户(你可以在命令行使用命令
sudo su
),试图删除整个操作系统,root会欣然接受,直到系统崩溃。
假设你创建了一个名为homelab的用户。那么homelab的UID可以被引用为1000或者homelab。该用户将自动成为内部组users的成员,你可以用组ID 100来引用。你可以通过运行下面的getent passwd
命令找到这些映射的列表:

getent passwd
inside the terminal你也可以用getent group
命令找到相同的组信息。

getent group
inside the terminalLinux文件权限
在Windows世界中,文件系统权限让人头疼。在NTFS中设置和管理权限有时会变成噩梦,包括ACE、ACLs、继承、传播等等。幸运的是,在Linux中,文件系统权限要简单得多。
在Linux中,你可以将三种类型的权限分配给一个文件:读、写和执行,具有三种访问类别:所有者、组、其他人。
- 所有者是拥有文件/文件夹的用户。每个文件或文件夹都有一个指定的所有者。
- 组是拥有文件/文件夹的组。这不必是所有者所属的相同组。每个文件或文件夹只能属于一个组。
- 其他人是……嗯……其他人。那些不属于所有者所在组或者不是指定所有者的人。
您可以允许或拒绝每个类别的每个选项。例如:您可以为所有者提供读取、写入、执行选项,并为组和其他人提供读取/执行选项。您可以在下面的屏幕截图中看到这一点。这意味着除了文件夹所有者之外的任何人都不能修改它。
就像Windows资源管理器一样,在Ubuntu中,您可以通过以下步骤查看此信息:
- 打开桌面上的“个人文件夹”。
- 导航到相关的文件/文件夹。
- 右键单击文件/文件夹,然后点击“属性”选项。
- 点击“权限”选项卡。
- 点击“高级权限”选项。
进入“高级权限”框后,您可以以图形方式查看分配给该文件或文件夹的所有权限。

下面是“高级权限”表格的含义。

文件所有权
与Windows一样,每个文件和文件夹都有一个所有者。在Windows中,您可以通过GUI或使用“takeown”命令来获取文件的所有权。在Linux中,您可以通过在命令行上运行“chown
与Windows类似,通常需要管理员权限才能使用sudo更改文件的所有权。sudo是Linux中与Windows用户账户控制(UAC)相当的工具。您可以使用sudo作为管理员来运行命令,而无需打开管理员命令行窗口。
让我们创建一个只有root拥有的文件夹来演示一些概念。
- 打开你的主文件夹,然后导航到文档
- 通过右键单击 -> 操作 -> 在此处打开终端,然后运行以下命令:

这个文件夹只对所有者具有读/写/执行权限。因为你使用管理员权限创建了该文件夹,所以当前所有者是root。
你还改变了权限,所以只有所有者有访问权限。拥有组和其他用户根本无法访问这个文件夹。实际上,你会注意到这个文件夹上有一个大锁,表示你没有权限访问。
下面你可以看到如何接管这个文件夹。
- 在同一个文件夹中打开另一个终端(或者使用你已经打开的终端)
- 运行
sudo chown homelab:users ./owned-by-root

现在你已经拥有了所有权,你也可以在资源管理器中使用属性窗口来更改文件权限。

你(通常)只想改变所有权,而不是文件权限。Linux非常擅长知道默认情况下文件应该具有的权限。如果没有了解到后果就进行’chmod’操作,你可能会把事情搞砸。
文件权限的数字表示法
如果你进行过任何 Linux 故障排除,你可能会看到在线上有人用数字方案解释文件权限。你可以在下面的截图中看到这一点:

Linux使用数字的简写表示法来表示这种访问系统,例如0600。第一个数字用于添加一些特殊属性,但大多数人通常会忽略它们。事实上,大多数人只使用三位数字来表示,忽略前导的第四位。
有关文件权限数字表示法的更多信息,请查看这篇文章。
总结
这就是我们《A Windows Guy in a Linux World》博客系列的第二部分的全部内容!记得继续关注第三部分!
Source:
https://adamtheautomator.com/linux-file-permissions/