文件权限
管理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 | 管道 |
s | Socket |
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和粘性位?
如前所述,可以为文件的所有者,组和其他人设置权限。但是,这些不是唯一可以设置的权限位。还有一些许可位,称为粘性位
,SUID
和SGID
。
粘性位
最初,粘滞位指示特定程序或应用程序在执行时应保留在内存中。这种标记程序和应用程序的方法允许多个用户更快地初始化程序,因为它们已经加载到内存中了。粘滞位起源于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设置。新文件系统对象可能会或可能不会由组营销的其他成员读取,写入或执行。