道阻且长,行则将至。埋头苦干,不鸣则已,一鸣惊人!加油骚年
鸟哥的Linux私房菜:“Linux最优秀的地方之一,就在于它的多用户,多任务环境。而为了让各个用户具有较保密的文件数据,因此文件的权限管理就变得很重要了。”
本文为自己认真阅读《鸟哥的Linux私房菜》对应内容后,总结记录所得。如果有误,还望指正!谢谢
Linux一般将文件可存取访问的身份分为3个类别,分别是:owner、group、others,且三种身份各有read、write、execute等权限。
用户及用户组的基本概念,以实际中一个家庭为例,假设有一家人,家里只有三兄弟,分别是王大毛、王二毛、王三毛这3个人,家庭的户主是王大毛。简要分析如下:
用户、用户组、其他这几个类别的特征是什么呢?
在Linux系统下,是有一个默认的路径,默认文件来存放用户和用户组的相关信息,分别如下:
需要特别注意的是:这三个文件是Linux系统里面账号、密码、用户组信息的集中地,一定不要随便删除这三个文件。
当我们在Linux系统下,使用 ls -l 命令查看目录文件时,会发现有很多的内容,我刚开始的时候了解的也不是很深入,只是知道个大概,今天认认真真看了看书,做一个总结。
关于Linux下 ls 命令的相关参数,可以参考菜鸟教程 - ls,部分命令参数截图如下:
我参考自己的Ubuntu,拿如下几个文件举例:
列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 |
---|---|---|---|---|---|---|
drwxrwxrwx | 2 | zhaoc | zhaoc | 4096 | 10月 16 22:50 | Music |
drwxr-xr-x | 2 | root | root | 4096 | 3月 24 21:50 | vim |
-rw-r–r-- | 1 | root | root | 438 | 3月 15 15:49 | exports |
ls -l --full-time
有几个常用的更改文件属性、文件权限的命令。先列出来,在一一分析:
更改文件/目录所属用户组,一般我们较为常用的就是使用 chgrp 命令。其实这个命令就是英文 change group 的缩写;
需要注意的是,要被改变的组名必须要在 /etc/group 文件内存在才可以,否则就会报错。
基本的命令格式如下:
chgrp [-R] [所属群组] [文件或目录]
[-R]:进行递归的持续更改,即修改此目录及其下属所有文件/目录的群组。
更为详细的信息可以参考:菜鸟教程 - chgrp,里边有更为详尽的解释及示例。
更改文件/目录的所有者,一般常用的命令就是 chown 命令,也就是英文 change owner 的缩写;
同样需要注意的是,用户必须是已经存在于系统中的账号,也就是在 /etc/passwd 这个文件中有记录的用户名称才能改变。
基本的命令格式如下:
chown [-R] [账号名称] [文件或目录]
[-R]:进行递归的持续更改,即修改此目录及其下属所有文件/目录的群组。
如果需要同时更改文件的所有者和用户组,可以使用如下命令:
chown root:root filename
需要同时更改文件所有者及用户组时,推荐使用冒号 “:” ;如果需要单纯的修改用户组怎么办?可以使用如下命令:
chown .root filename
此种情况下,可以使用英文的小数点 “.”
这个命令,可以说是在实际使用中,最常用的一个命令之一。
基本的命令格式如下:
chmod [-R] [xyz] [文件或目录]
[-R]:进行递归的持续更改,即修改此目录及其下属所有文件/目录的群组。
而这个命令,稍微大点来说,有两种不同的用法,下边分开描述。
通过直接使用数字方法,改变文件权限,在实际中是较为常用的方法。简单的来说,一个文件/目录,有三种不同的身份,每种身份有三种不同的权限,按照二进制来划分如下:
r | w | x | r | w | x | r | w | x |
---|---|---|---|---|---|---|---|---|
4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
同样,拿上述三个文件,做个分析
列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 |
---|---|---|---|---|---|---|
drwxrwxrwx | 2 | zhaoc | zhaoc | 4096 | 10月 16 22:50 | Music |
drwxr-xr-x | 2 | root | root | 4096 | 3月 24 21:50 | vim |
-rw-r–r-- | 1 | root | root | 438 | 3月 15 15:49 | exports |
如果我要将 Music 设置为当前权限(rwxrwxrwx),应该怎么做,分析,此文件拥有全部的权限,如果要设置为此权限类型,应该使用如下命令:
chmod 777 Music
同理,如果要将 exports 设置为当前权限(rw-r–r--),设置命令如下:
chmod 644 exports
总结一下经验就是,使用数组类型改变文件权限时,将对应位权限转换为二进制数值,通过此命令设置文件权限即可。
所谓的符号类型,就是使用类似于字母的方式,来改变文件权限。我们常用的身份有 user、group、others 这三种身份,因此 Linux 中通过 u g o 来代表三种身份,另外用 a 代表全部的身份;
具体的权限类型就可以用 r w x 来表示;
操作方式可以用如下三种方式表示:
用上述 “exports” 文件举例,此文件的权限为(rw-r–r--),我们在设置时,可以使用如下命令:
chmod u=rw,go=r exports
上述命令解释过来,就是给文件所有者 “u” ,设置可读,可写的权限;给用户组和其他用户设置可读权限。
需要注意的是:u=rw,go=r 这条命令,是连在一起的,中间不能有任何空格
如果我们不知道某个文件原来的属性,只想给这个文件的每个用户增加一个可写入的权限,就可以使用如下命令:
chmod a+w filename
同样的,如果是要给这个文件的所有用户去掉可执行权限,则可以使用如下命令:
chmod a-x filename
通过上面两个示例,可以知道,在 + - 状态下,只要是没有指定到的选项,则该权限“不会被变动”。
目录与文件的权限,对于数据的安全是有很重要的作用的,下边分开来介绍文件权限对于一般文件与目录文件有何不同
文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件等,因此权限对于文件来说,有如下意义:
文件是存放实际数据的所在,目录主要的内容是记录文件名列表,文件名与目录有强烈的关联。所以对于目录时,不同的权限也有不同的作用:
举例说明目录的可执行权限有什么作用,假设有个目录,权限如下:
drwxr--r-- 3 root root 4096 3月 24 21:50 filename
此时系统有个账号名称为 zhaoc,这个账号并没有支持 root 用户组,请问 zhaoc 对这个目录有何权限?是否可以切换到此目录中?
回答:zhaoc 对此目录仅具有 r 的权限,因此 zhaoc 可以查询此目录下的文件名列表。因为 zhaoc 不具有 x 的权限,所以 zhaoc 并不能切换到此目录内。这一点很重要
假设我的账号名称为 zhaoc,我的主文件夹在 /home/zhaoc 这个路径下,zhaoc对此目录具有完全的 [rwx] 权限,如果在此目录下有一个文件 filename,改文件的权限如下:
-rwx------ 1 root root 4365 Sep 19 23:20 filename
问题:zhaoc 对此文件夹的权限是什么?可否删除此文件?
回答:由上述文件权限列表可知,此时 zhaoc 对此文件来说是 “others”的身份,因此这个文件他无法读,无法编辑,也无法执行,也就是说他无法变动这个文件的内容。但是,由于这个文件在他的主文件夹下,他在此目录下具有 [rwx] 的完整权限,因此对于 filename 这个 “文件名” 来说,zhaoc 是能够 “删除” 的,也就是说 zhaoc 这个用户能够删除 “filename” 这个文件。
结合我目前工作经验来看,在实际工作中,文件权限的重要性在开发服务器上会得到明显体现。比如我刚到公司的时候,所有文件权限都是只读;目录权限为可读、可执行;也就是说,我对服务器上的任何东西都没有写入权限;这样很明显的一个好处就是,防止新人不小心删除服务器的文件,给公司造成损失。
等到后来我在公司待了一段时间,熟悉了一些东西、需要接触项目开发的时候,就给我开放了对服务器特定目录的可写操作,保证我可以在此文件夹内,进行代码修改、提交等操作。
本篇文章就是基于书本内容的一个阅读,与自己深入了解后的一个笔记总结。若有错误之处还望指正,希望对您能有帮助!感觉不错可以留个赞哈,方便更多的人看到,谢谢各位!