加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

鸟哥:Linux 的文件权限

发布时间:2022-12-17 14:06:00 所属栏目:Linux 来源:未知
导读: 5.1 使用者与群组
Linux 最优秀的地方之一就在于他的多人多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。 Linux 一般将文件可存取的身份分为三个

5.1 使用者与群组

Linux 最优秀的地方之一就在于他的多人多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。 Linux 一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有read/write/execute 等权限。

文件拥有者

当你将你的e-mail 情书转存成文件之后,放在你自己的目录,你总不希望被其他人看见自己的情书吧? 这个时候,你可疑把该文件设定成『只有文件拥有者才能看与修改这个文件的内容』。

群组概念

群组最有用的功能之一,就是当你在团队开发资源的时候啦! 举例来说,假设有两组专题在我的主机里面,第一个专题组别为projecta,里面的成员有class1, class2, class3 三个;第二个专题组别为projectb,里面的成员有class4, class5, class6。每组的组员之间必须要能够互相修改对方的数据, 但是其他组的组员则不能看到本组的文件内容。

另外,如果teacher 这个账号是projecta 与projectb 这两个专题的老师, 他想要同时观察两者的进度,因此需要能够进入这两个群组的权限时,你可以设定teacher 这个账号, 『同时支持projecta 与projectb 这两个群组!』,也就是说:每个账号都可以有多个群组的支持!

Linux 用户身份与群组记录的文件

在我们 Linux 系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root 的相关信息,都是记录在/etc/passwd 这个文件内的。至于个人的密码则是记录在/etc/shadow 这个文件下。此外,Linux 所有的组名都纪录在/etc/group 内!

5.2 Linux 文件权限概念

5.2.1 Linux 文件属性

在你以dmtsai 登入系统,然后使用su - 切换身份成为 root后, 下达『 ls -al 』:

[dmtsai@study ~]$ su - # 先来切换一下身份看看
Password:
Last login: Tue Jun 2 19:32:31 CST 2015 on tty2
[root@study ~]# ls -al
total 48
dr-xr-x---. 5  root root 4096 May 29 16:08 .
dr-xr-xr-x. 17 root root 4096 May 4  17:56 ..
-rw-------. 1  root root 1816 May 4  17:57 anaconda-ks.cfg
-rw-------. 1  root root 927  Jun 2  11:27 .bash_history
-rw-r--r--. 1  root root 18   Dec 29 2013  .bash_logout
-rw-r--r--. 1  root root 176  Dec 29 2013  .bash_profile
-rw-r--r--. 1  root root 176  Dec 29 2013  .bashrc
drwxr-xr-x. 3  root root 17   May 6  00:14 .config <=范例说明处
drwx------. 3  root root 24   May 4  17:59 .dbus
-rw-r--r--. 1  root root 1864 May 4  18:01 initial-setup-ks.cfg <=范例说明处
[ 1 ]   [ 2 ]  [ 3 ] [ 4 ]   [ 5 ]       [ 6 ]     [ 7 ]
[权限] [连结][拥有者][群组][文件容量][ 修改日期 ] [ 檔名 ]

ls 是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有的文件详细的权限与属性(包含隐藏文件,就是文件名第一个字符为『. 』的文件)。

第一栏代表这个文件的类型与权限(permission):

linux 发邮件权限_linux权限_linux如何获得root权限

第一个字符代表这个文件是『目录、文件或链接文件等等』:

接下来的字符中,以三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。如果没有权限,就为减号[ - ]。

第二栏表示有多少档名连结到此节点(i-node):

每个文件都会将他的权限与属性记录到文件系统的i-node 中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个 i-node 啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node 号码去就是了。关于 i-node 的相关资料我们会在第七章谈到文件系统时再加强介绍的。

第三栏表示这个文件(或目录)的『拥有者账号』

第四栏表示这个文件的所属群组

在 Linux 系统下,你的账号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta 这个群组,假设某个文件所属的群组为projecta,且该文件的权限(-rwxrwx---),则 class1, class2, class3 三人对于该文件都具有可读、可写、可执行的权限。但如果是不属于 projecta 的其他账号,对于此文件就不具有任何权限了。

第五栏为这个文件的容量大小,默认单位为bytes;

第六栏为这个文件的建档日期或者是最近的修改日期

第七栏为这个文件的档名

这个字段就是档名了。比较特殊的是:如果档名之前多一个『. 』,则代表这个文件为『隐藏档』,例如上表中的.config 那一行,该文件就是隐藏档。你可以使用『ls』及『ls -a』这两个指令去感受一下什么是隐藏档!

5.2.3 目录与文件之权限意义:

权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。权限对于文件来说,他的意义是这样的:

在Windows 底下一个文件是否具有执行的能力是藉由『扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在Linux 底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的!

权限对目录的重要性

目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦!

r (read contents in directory):

表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。你可以利用ls 这个指令将该目录的内容列表显示出来!

w (modify contents of directory):

这个可写入的权限对目录来说, 他表示你具有异动该目录结构列表的权限,也就是:

总之,目录的w 权限就与该目录底下的文件名异动有关就对啦!

x (access directory):

目录的执行权限有啥用途?目录的x 代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux 时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰!

能不能进入某一个目录,只与该目录的x 权限有关!

此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x 的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r 或w 的权限。

很多朋友在架设网站的时候都会卡在一些权限的设定上,他们开放目录数据给因特网的任何人来浏览,却只开放 r 的权限,那样的结果就是导致网站服务器软件无法到该目录下读取文件(最多只能看到文件名), 最终用户总是无法正确的查阅到文件的内容(显示权限不足啊!)。要注意:要开放目录给任何人浏览时,应该至少也要给予r 及x 的权限,但w 权限不可随便给:

假设有个账号名称为dmtsai,他的家目录在/home/dmtsai/,dmtsai 对此目录具有[rwx]的权限。 若在此目录下有个名为the_root.data 的文件,该文件的权限如下:

-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data

请问dmtsai 对此文件的权限为何?可否删除此文件?

如上所示,由于dmtsai 对此文件来说是『others』的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个文件的内容就是了。

但是由于这个文件在他的家目录下, 他在此目录下具有rwx 的完整权限,因此对于the_root.data 这个『档名』来说,他是能够『删除』的!

例:假设两个档名,分别是底下这样:

假设你现在在系统使用 dmtsai 这个账号,那么这个账号针对/dir1, /dir1/file1, /dir2 这三个档名来说,分别需要『哪些最小的权限』才能达成各项任务?

linux 发邮件权限_linux如何获得root权限_linux权限

上面的表格当中,很多时候/dir1 都不必有r 。只是,没有r 的话,使用[tab] 时,他就无法自动帮你补齐档名了!

要读一个文件时,你得要具有『这个文件所在目录的x 权限』才行!所以,通常要开放的目录, 至少会具备rx 这两个权限!

5.2.2 如何改变文件属性与权限

chgrp :改变文件所属群组

这个指令就是change group 的缩写!不过,请记得,改变后的组名必须要在/etc/group 文件内存在才行,否则会显示错误!

[root@study ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
范例:
[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group: `testing' <== 发生错误讯息啰~找不到这个群组名~

改变文件拥有者, chown

改变拥有者就是change owner,那就是chown 这个指令的用途,要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。

chown 还可以顺便直接修改群组的名称!

[root@study ~]# chown [-R] 账号名称 文件或目录
[root@study ~]# chown [-R] 账号名称:组名 文件或目录
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
范例:将 initial-setup-ks.cfg 的拥有者改为bin 这个账号:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例:将 initial-setup-ks.cfg 的拥有者与群组改回为root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg

什么时候要使用chown 或chgrp 呢?最常见的例子就是在复制文件给你之外的其他人时:

假设你今天要将.bashrc 这个文件拷贝成为.bashrc_test 档名,且是要给bin 这个人:

[root@study ~]# cp .bashrc .bashrc_test
[root@study ~]# ls -al .bashrc*
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test <==新文件的属性没变

由于复制行为(cp)会复制执行者的属性与权限。.bashrc_test 还是属于root 所拥有, 如此一来,即使你将文件拿给bin 这个使用者了,那他仍然无法修改的。

改变权限, chmod

权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

数字类型改变文件权限

Linux 文件的基本权限就有九个,分别是owner/group/others 三种身份各有自己的read/write/execute 权限,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

r:4,w:2,x:1

当权限为: [-rwxrwx---] 分数则是:

所以等一下我们设定权限的变更时,该文件的权限数字就是770 啦!变更权限的指令chmod 的语法是这样的:

[root@study ~]# chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

符号类型改变文件权限

linux如何获得root权限_linux权限_linux 发邮件权限

假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时:

[root@study ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格符!
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 644 .bashrc # 测试完毕得要改回来喔!

5.2.4 Linux 文件种类与扩展名

文件种类

普通文件(regular file ):

在由ls -al 所显示出来的属性方面,第一个字符为[ - ],例如[-rwxrwxrwx ]。依照文件的内容,又大略可以分为:

目录(directory):

第一个属性为[ d ],例如[drwxrwxrwx]。

连接文件(link):

就是类似Windows 系统底下的快捷方式啦! 第一个属性为[ l ](英文L 的小写),例如[lrwxrwxrwx]

设备与装置文件(device):

与系统外设及储存等相关的一些文件linux权限, 通常都集中在/dev 这个目录之下!通常又分为两种:

套接字(sockets):

这种类型的文件通常被用在网络上的数据连接。我们可以启动一个程序来监听客户端的请求, 而客户端就可以透过这个socket 来进行数据的通信。其第一个属性为[ s ]。

管道(FIFO, pipe):

FIFO 也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO是first-in-first-out 的缩写。第一个属性为[p] 。

Linux 文件扩展名:

基本上,Linux 的文件是没有所谓的『扩展名』的。在Linux 底下,只要你的权限当中具有x 的话,例如[ -rwxr-xr-x ] 即代表这个文件可以被执行!

不过,可以被执行跟可以执行成功是不一样的。举例来说,在root 家目录下的initial-setup-ks.cfg 是一个纯文本档,如果经由修改权限成为-rwxrwxrwx 后,这个文件能够真的执行成功吗? 当然不行,因为他的内容根本就没有可以执行的数据。

虽然如此,不过我们仍然希望可以藉由扩展名来了解该文件是什么东西。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!