文件权限

时间:2019-04-29 03:17:28  来源:igfitidea点击:

管理Linux中的权限, 列出文件权限,权限类型,设置权限,chmod,Umask,SUID,SGID

文件权限

在本节中,我们将讨论用户、组和其他用户的文件权限。

正如我们在之前说的, ls -l命令以扩展或长格式显示所有文件:

$ ls -l /bin/ls

-rwxr-xr-x 1 root root 104508 Nov 19 22:25 /bin/ls

我们可以看到在输出的第一列中有一些-rwx信息。
第一列用于设置权限并标识我们是在处理文件还是目录。
第二列和第三列指示所有者和组。

基本上,Linux系统上的每个文件都由一个用户,一个组和其他人拥有。

用户-拥有文件的人的用户名。通常,创建文件的任何人都将成为默认用户。

-文件的所属用户组。属于该组的用户将对该文件具有相同的权限。组设置用于共享访问权限和拒绝用户访问。这样可以轻松安全地共享信息。

其他-这是给不是文件所有者且不属于文件组所有者的用户的名称。

3种类型的权限

Linux系统上有三种类型的访问权限。这些是读- r写- w执行- x。这些权限分别为所有者、组和其他用户设置。

:在常规文件上,读取权限表示。该文件可以打开和阅读上的目录,读取权限将允许您列出目录的内容。

:在一个普通的文件,此权限意味着你可以修改文件(写入数据文件)。在一个目录的写权限意味着可以在该目录中添加,删除和重命名文件。

执行:在常规文件上,此设置意味着您可以将其作为程序或脚本执行。在目录上,执行位表示您可以访问目录中的文件,但是,如果要列出该目录中的文件,则需要设置读取许可标志!


在下面的示例中,我们可以看到mydir是一个目录。因为第一列以d开头。该目录的所有者是用户itr,组所有者是john。前三个权限位设置为rwx,表示目录所有者itr对目录具有完全访问权限。用户itr能够访问,查看和修改该目录中的文件。

接下来的三位rx告诉我们,属于john组的所有用户都具有对该目录的读取和执行权限。这意味着他们可以进入目录,执行文件并查看其内容。但是,他们没有写权限来对目录内容进行任何更改。

最后三位rx表示所有不属于itr并且不属于john组的用户都具有目录的读取和执行权限。

drwxr-xr-x 2 itr john 4096 Jan 19 11:13 mydir
-rw-r----- 1 itr john  190 Jan 19 10:43 testfile1

在上面的示例中,我们有一个名为testfile1的文件。在这里,我们发现第一列以-开头。这表明用户itr拥有一组带有john的常规文件。前三个位rw-表示所有者拥有对该文件的读写访问权限。

信息r--的后三位表示john组中的任何用户都可以查看该文件。他们无法写入或执行此文件。

最后,信息---的最后三位表示没有其他人可以访问该文件。

到目前为止,我们已经看到第一个字符可以是目录的d或常规文件的-。然而,在使用linux系统时,还会遇到很多其他指标。下表说明了这一点:

标识符说明
-常规文件
d目录
c字符设备文件
b块设备文件
p管道
sSocket
l符号链接

示例:

drwxr-xr-x  3 root root           180 Jan 19 09:13 snd
brw-rw----+ 1 root cdrom      11,   0 Jan 19 09:13 sr0
lrwxrwxrwx  1 root root            15 Jan 19 09:13 stderr -> /proc/self/fd/2
crw-rw-rw-  1 root tty         5,   0 Jan 19 09:13 tty
srw-rw-rw-  1 root root             0 Jan 19 09:13 log

权限以及如何设置它们

在查看允许您修改用户和组文件权限的命令之前,查找有关您登录用户的信息将非常有用。假设您尚未使用su命令切换到另一个帐户,那么您将使用登录时使用的帐户。

whoami
执行whoami命令后,将在shell上向当前用户报告信息:

john@john-desktop:~$ whoami
john

执行groups命令时,将指示您是哪些用户组:

john@john-desktop:~$ groups
john adm dialout fax cdrom floppy tape dip video plugdev fuse lpadmin admin sambashare

id

另一个方便使用的命令是id命令,该命令将显示您的身份,您的uid(您的唯一ID)以及您与gid一起拥有的任何组成员身份(组ID号)。该命令还可以与其他用户标识一起使用,以查看它们属于哪些组:

设置权限

文件权限的设置可以由root用户和文件所有者执行。用于更改权限的命令是chmod。有两种不同的方式可以使用chmod命令。您可以使用符号方法或替代数字方法。使用这两种方法将获得相同的结果。

使用符号方法设置文件权限

首先,您必须确定我们将要更改的权限。是否要为用户u或组g或其他o或所有三个a设置权限。

确定要设置的权限后,您需要传递+来添加权限,或者传递-来删除权限。您可能希望清除以前使用=选项设置的所有权限。

接下来,决定是否将 read(r),write(w),execute(x)或none(-)赋予哪个部分。

可以自己创建一个名为testfile的文件,然后尝试以下一些示例命令:

我们将执行的第一个命令是将user,group和其他字段设置为read(r)的值。chmod a = r testfile
这将给我们以下结果:-r--r--r-- 1 john john 0 Jan 19 19:46 testfile

接下来,我们将对组添加execute(x)权限。chmod g + x testfile
现在,这将给我们:-r--r-xr-- 1 john john 0 Jan 19 19:46 testfile

现在,我们向其添加write(w)和execute(x)权限用户部分。chmod u + wx testfile
现在,我们设置了以下权限:-rwxr-xr-- 1 john john 0 Jan 19 19:46 testfile

最后,我们从用户和组部分中删除了execute(x)权限。chmod ug-x testfile
现在,该测试文件的权限设置应该为:-rw-r--r-- 1 john john 0 Jan 19 19:46 testfile

以数字方式设置文件权限

如前所述,有两种使用chmod命令设置文件权限的方法。在第一部分中,我们研究了符号方法。现在,我们将使用数值方法。

如我们先前所见,我们拥有权限read(r),write(w),execute(x)和none(-)。使用数字方法,我们将字母替换为数字(3位八进制数字):

4 =读(r)
2 =写(w)
1 =执行(x)
0 =无(-)

rwxrwxrwx等效于用户= 4 + 2 + 1 =(7)+组= 4 + 2 + 1 =(7)+ Other = 4 + 2 + 1 =(7)
现在我们可以看到user =(7),group =(7)和other =(7)的权限,

现在我们可以构造chmod命令: chmod 777 testfile

现在让我们尝试rwxr-xr-x:首先分解每个部分。用户= 4 + 2 + 1 =(7)+组= 4 + 0 + 1 =(5)+其他= 4 + 0 + 1 =(5)
因此,现在我们有用户= 7组= 5其他= 5

现在,我们的chmod命令将如下所示:chmod 755 testfile

Umask-文件创建掩码

由进程创建文件时,将自动为其分配给定的权限。最初使用0666值创建文件,然后减去umask值。通常,这将减少某些权限。

用于显示umask设置的命令是umask。要获取您的umask的非数字视图,请
执行以下umask -S。您的umask设置现在将显示。

john@john-desktop:~/test_examples$ umask
0002
john@john-desktop:~/test_examples$ umask -S
u=rwx,g=rwx,o=rx

因此,在当前系统上,我的用户ID的umask为0002。为了简化起见,我们将忽略前导0。这给我一个值002。记住我们说过所有文件都是用666创建的,然后减去umask值。

john@john-desktop:~/test_examples$ touch testfile
john@john-desktop:~/test_examples$ ls -l
total 0
-rw-rw-r-- 1 john john 0 Jan 19 22:05 testfile

因此,如果文件原来是666,那么现在的值为664!

6 6 6
0 0 2  -
-----
6 6 4

不仅文件必须遵守umask。创建目录权限时,将根据umask计算目录权限。
唯一的区别是目录以初始值777(rwxrwxrwx)开始。但是,一旦应用了umask,它通常会降低。

john@john-desktop:~/test_examples$ mkdir testdir
john@john-desktop:~/test_examples$ ls -l
total 4
drwxrwxr-x 2 john john 4096 Jan 19 22:17 testdir

umask 002已从777的初始值中减去。

7 7 7
0 0 2  -
-----
7 7 5

尽管我的umask设置为002,但另一个非常流行的值是022。我研究过的大多数企业系统都使用022。

什么是SUID,SGID和粘性位?

如前所述,可以为文件的所有者,组和其他人设置权限。但是,这些不是唯一可以设置的权限位。还有一些许可位,称为粘性位SUIDSGID

粘性位

最初,粘滞位指示特定程序或应用程序在执行时应保留在内存中。这种标记程序和应用程序的方法允许多个用户更快地初始化程序,因为它们已经加载到内存中了。粘滞位起源于Unix系统的早期,当时快速磁盘和大量内存不可用。在当今的现代技术世界中,粘性钻头已不再真正满足其原始目的。今天,粘性位主要用于修改目录权限。

Linux文件权限中的t是什么意思

一旦在目录上设置了粘性位,则只有其中的文件创建者才能删除其文件。

一个实际的例子就是/tmp目录。在这里,任何人都可以将文件写入此临时位置,但是,只有创建文件的用户才能删除它。请记住,即使该文件没有写权限,也可以删除已设置写权限的目录中的文件。因此,对于/tmp区域,粘性位非常有用。以下是设置了粘性位的/tmp目录的示例。请注意,粘性位是使用t权限定义的:

 john@john-desktop:~$ ls -ld /tmp
drwxrwxrwt 17 root root 20480 Jan 20 11:28 /tmp

现在让我们看一下如何在目录上设置粘性位。在这里,我们将使用符号和数字格式的熟悉的chmod命令来创建和删除粘性位:

john@john-desktop:~/test_examples$ ls -l
total 4
drwxr-xrwx 2 john john 4096 Jan 20 11:46 testdir
john@john-desktop:~/test_examples$ chmod o+t testdir
john@john-desktop:~/test_examples$ ls -l
total 4
drwxr-xrwt 2 john john 4096 Jan 20 11:46 testdir
john@john-desktop:~/test_examples$ chmod o-t testdir
john@john-desktop:~/test_examples$ ls -l
total 4
drwxr-xrwx 2 john john 4096 Jan 20 11:46 testdir
john@john-desktop:~/test_examples$ chmod +t testdir
john@john-desktop:~/test_examples$ ls -l
total 4
drwxr-xrwt 2 john john 4096 Jan 20 11:46 testdir
john@john-desktop:~/test_examples$ chmod -t testdir
john@john-desktop:~/test_examples$ ls -l
total 4
drwxr-xrwx 2 john john 4096 Jan 20 11:46 testdir
john@john-desktop:~/test_examples$ chmod 1757 testdir
john@john-desktop:~/test_examples$ ls -l
total 4
drwxr-xrwt 2 john john 4096 Jan 20 11:46 testdir

SUID

Linux文件权限中的s是什么意思

在Linux系统上,我们使用SUID位来允许可执行文件和脚本以特殊权限执行。例如,可执行程序passwd由root拥有,但是,任何用户都可以运行该程序来更改其密码并更新passwd文件。让我们找到passwd文件并查看其权限:

john@john-desktop:~$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/bin/X11/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1ssl.gz /usr/share/man/man1/passwd.1.gz
john@john-desktop:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 41284 Sep 12 23:29 /usr/bin/passwd
john@john-desktop:~$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1905 Jan 17 20:15 /etc/passwd
john@john-desktop:~$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1352 Jan 17 20:16 /etc/shadow

如果我们查看ls -l /usr/bin/passwd文件的输出,则可以看到该程序设置了suid。一旦在用户部分rwsr-xr-x下设置了此粘性位,这将允许任何用户以root用户身份运行passwd命令。粘滞位的原因是允许用户更新/etc /passwd和/etc /shadow文件,而通常只有root用户才能执行。如果未设置粘性位,则用户将无法更改密码,因为他们将无法更新passwd /shadow文件。

设置SUID

要在可执行文件上设置suid权限,我们将使用chmod命令。可以使用chmod以常规方式设置权限:
chmod u + s testfile将在文件testfile上设置suid位。您也可以使用与chmod 4775 testfile等效的数值

john@john-desktop:~/test_examples$ ls -l

total 0
-rwxrwxr-x 1 john john 0 Jan 20 12:45 test.sh
john@john-desktop:~/test_examples$ chmod u+s test.sh
john@john-desktop:~/test_examples$ ls -l
total 0
-rwsrwxr-x 1 john john 0 Jan 20 12:45 test.sh
john@john-desktop:~/test_examples$ chmod -s test.sh
john@john-desktop:~/test_examples$ ls -l
total 0
-rwxrwxr-x 1 john john 0 Jan 20 12:45 test.sh
john@john-desktop:~/test_examples$ chmod 4775 test.sh
john@john-desktop:~/test_examples$ ls -l
total 0
-rwsrwxr-x 1 john john 0 Jan 20 12:45 test.sh

在目录上设置SGID

如果目录设置了sgid,则任何文件系统对象都将继承目录的组。当您有不同的用户在一个位置创建文件时,此功能将非常有用。

root@john-desktop:~# mkdir /home/shared
root@john-desktop:~# chgrp marketing /home/shared
root@john-desktop:~# chmod g+s /home/shared

上述结构将允许市场营销组中的用户在目录/home/shared内创建文件和目录。还将自动为该文件分配营销的组所有权。您可能需要考虑使用此设置的用户umask设置。新文件系统对象可能会或可能不会由组营销的其他成员读取,写入或执行。