[版权申明]非商业目的注明出处可自由转载
出自:shusheng007
概述
把自己的阿里云服务器从Windows系统换成了 Ubuntu(一个Linux发行版本)。自己一直是使用Windows的,一直觉得Linux过于高深,自己非常抗拒去了解它,这次自己的服务器换成的Linux所以只能被动去了解了。
任何事物的流行都是存在原因的,Linux那么流行,肯定是有其独到的优势的,那些站在门外面的人肯定觉得自己现在使用东西是最好的,等真的推开门进去后却发现,原来世界上还有更好的,所以我们程序员要不轻易否定新事物,乐于接受新事物,用于尝试新事物,才能不落后。
嘚嘚了这么多,今天想总结一下关于Linux文件权限的一些知识,及相关命令。别害怕,书生的文章力求让人秒懂。
Linux 安全体系简述
Linux 是以用户账户来管理权限的,每个进入Linux系统的用户都会被分配唯一的用户账户,每个账户拥有不同的权限,这个应该非常容易理解。
例如组长王二狗的账户A 权限肯定比实习生牛翠花的账户B 权限高。账户系统虽然在控制单个用户安全性时很好用,但是涉及到共享资源的一组用户时就比较尴尬了,例如公司又招了个一个实习生“上官无雪” 公司给他分配了账户C, 但是日常工作中,牛翠花和上官无需都需要操作同一组资源,那么就要分别给这两个账户增删权限,这只有两个实习生账户还好,但是以后账户多了可就不好管了,所以Linux还有组(group)的概念,在同一组的账户可以享有此组的所有权限。
账户
- 系统管理员账户(root)
root是系统中唯一的超级用户,具有系统中所有的权限,如启动或停止一个进程,删除或增加用户,增加或者禁用硬件等等。
- 系统账户
Linux为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。
- 自定义账户
由root管理员创建供用户登录系统进行操作使用的账号
组
- 用户的主要组(primary group):一个用户必须属于一个且只有一个主要组
- 用户的附加组(supplementary group):一个用户可以属于一个或者零个附加组
查看账户
账户信息位于/etc/passwd
文件内,使用如下命令查看
cat /etc/passwd
结果如下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
mysql:x:109:118:MySQL Server,,,:/nonexistent:/bin/false
tomcat:x:1000:1000::/opt/tomcat:/bin/false
我们看下root账户每一列的含义,如下图所示:
注册名:口令:用户标识号(uid):组标识号(gid):注释性描述:用户主目录:用户登陆的shell类型
- 注册名(username):用于区分不同的用户,例如root。
- 口令(password): 为了安全起见密码被加密存在
/etc/shadow
中,只显示一个x。 - 用户标识(uid):是一个整数,系统内部用它来标识用户, root 的uid是0。
- 组标识(gid):当前用户的工作组标识。
- 注释(comment):对此账户的一些描述。
- 用户主目录(home directory):是用户的起始工作目录,它是用户在登录到系统之后所处的目录。
- shell类型(shell used):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口
查看组
账户信息位于/etc/group
文件内,使用如下命令查看
cat /etc/group
结果如下:
root:x:0:
sudo:x:27:
...
mysql:x:118:
tomcat:x:1000:
我们看下root账户每一列的含义,如下图所示:
含义图中已经标记的很清晰了。
理解文件权限
上面之所以要嘚嘚那么多Linux用户和组的知识,主要是因为不明白上面的知识,下面再怎么讲都是一团浆糊。
那么一个文件的权限是指什么呢?目录的权限呢?
- 文件的权限分为:是否可读,是否可写,是否可执行,即 rwx
- 目录的权限分为:是否可进入,是否可以读/写、执行其内部的文件.
这些权限又被分为了3类:
- 文件拥有者
- 文件所属的组
- 其他账户
使用 ls -l
命令查看一个目录下的所有文件
例如我查看一下我服务器上tomcat目录下的文件
/opt/tomcat# ls -l
drwxrwx--- 2 tomcat tomcat 4096 Apr 5 16:09 bin
-rw-r----- 1 root tomcat 18982 Dec 8 00:46 BUILDING.txt
drwxrwx--- 2 root tomcat 4096 Jan 11 18:11 conf
-rw-r----- 1 root tomcat 5409 Dec 8 00:46 CONTRIBUTING.md
drwxrwx--- 2 root tomcat 4096 Jan 11 13:57 lib
-rw-r----- 1 root tomcat 57092 Dec 8 00:46 LICENSE
drwxrwx--- 3 tomcat tomcat 12288 Apr 6 00:31 logs
-rw-r----- 1 root tomcat 2333 Dec 8 00:46 NOTICE
-rw-r----- 1 root tomcat 3255 Dec 8 00:46 README.md
-rw-r----- 1 root tomcat 6898 Dec 8 00:46 RELEASE-NOTES
-rw-r----- 1 root tomcat 16262 Dec 8 00:46 RUNNING.txt
drwxr-x--- 2 tomcat tomcat 4096 Apr 5 10:10 temp
drwxrwx--- 9 tomcat tomcat 4096 Apr 5 12:49 webapps
drwxr-x--- 3 tomcat tomcat 4096 Jan 11 14:11 work
看到最左边一列了吗,我第一次接触的时候太懵逼了,完全不知道什么意思,-rw-r----- 什么jb玩意啊?弄懂了也就不难了,让我们一起来看一下:
总共10个字符:
第一个字符表示文件的性质:
-
:表示此行展示的是一个文件d
:表示此行展示的是一个目录
第2到4个字符表示此文件所有者对此文件的权限
第5到7个字符表示此文件所属于的组里面的账户对此文件的权限
第8到10个字符表示除了上面两类型的其他用户对此文件的权限
其中
r
(read):可读,文件可以被查看。w
(write): 可写,文件可以被修改,删除。x
(execute):可执行,如果文件是脚本活程序,可以被执行。-
:无以上权限
我们来举个例子:
-rw-r----- 1 root tomcat 57092 Dec 8 00:46 LICENSE
上面的语句表明,LICENSE 是一个文件,其可以被其所有者读写,但不能执行。其仅仅可以被所属的组的用户查看,对于其他用户无权查看、修改、执行此文件。
修改文件的权限
终于到了chmod
命令出场的时候了,我不会刻板的讲述此命令的各种参数,那是文档应该干的事情,依据二八定律,我们只讲那个八,就是最常使用的情形。
chmod 概述
使用chmod
来修改权限,我们需要告诉此命令如下几个关键信息:
- Who:我们在为谁设置权限
- What:我们要增加还是移除这些权限
- Which: 我们要修改哪些权限
我们来举个例子
使用 ls -l
命令查看filePermissionTest.txt
文件
-rw-r--r-- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
可以看到其所有者对其具有读写权限,下面我们使用下面的命令给此用户加上可执行权限。
chmod u+x filePermissionTest.txt
执行后查看结果如下:
-rwxr--r-- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
可见此文件所有者权限的标识已经从rw-
变成了rwx
了,说明其已经拥有了此文件的执行权限。
我们看一下 chmod u+x filePermissionTest.txt
这个命令是怎么起作用的:
who:u 表示是为此文件的用户设置权限
what:+ 表示是为此文件增加一个权限
which:x 表示要修改可执行权限
可见只要按照chmod who what which
来来使用这个命令就会变得很简单。那接下来的问题就是who、what、which 分别取什么值了。
常用参数
who
u
:User, 此文件的所有者g
:Group, 此文件所属的组o
:Others, 其他用户a
:All,为以上三种用户设置权限
如果who 被省略了的话,默认使用a
.
what
-
: 减号,表示移除权限+
:加号,表示增加权限=
:等号,表示设置此权限并移除其他权限
which
r
: Read, 可读权限w
: Write,可写权限x
: execute,可执行权限
如果理解了上面的内容就足以应对日常工作中的使用情形了。
实例
下面我们来实际操作一下,毕竟理论和实践直接往往隔着巨大的鸿沟!
假设我有如下3个文件
-rw-r--r-- 1 root root 2 Apr 6 20:04 filePermissionTest2.txt
-rwxr--r-- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
-rw-r--r-- 1 root root 12 Apr 6 20:04 helloLinux.html
修改单个文件权限
我要给helloLinux.html
文件所属于的组(root组)加上写权限
chmod g+w helloLinux.html
执行后的结果为
-rw-rw-r-- 1 root root 12 Apr 6 20:04 helloLinux.html
其已经从-rw-r--r--
变成了-rw-rw-r--
,说明写权限已经加上了。
修改多个文件权限
我一次性为others用户增加对后缀为.txt
的文件的写权限
chmod o+w *.txt
结果:
-rw-r--rw- 1 root root 2 Apr 6 20:04 filePermissionTest2.txt
-rwxr--rw- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
-rw-rw-r-- 1 root root 12 Apr 6 20:04 helloLinux.html
数字速记法
当我想修改文件权限的时候就google了一下,看到chmod 776 xxx
的命令一脸懵逼,776是什么东东?
其实这是rxw的数字简记法。其值如下所示,0到7的数字就代表了rxw
的所有组合
权限 | 二进制 | 十进制 | 描述 |
---|---|---|---|
- - - | 000 | 0 | 无权限 |
- -x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 写和执行权限 |
r- - | 100 | 4 | 读权限 |
r-x | 101 | 5 | 读取和执行的权限 |
rw- | 110 | 6 | 读取和写入的权限 |
rwx | 111 | 7 | 所有权限 |
例如上面chmod 776 xxx
的命令表示为此文件的所有者和所属的组设置所有权限,为其他用户设置读写权限。
总结
如果你完整了阅读了以上内容,相信你对于如何修改文件权限已经胸有成竹了,好文难得注意点赞和收藏。祝编码愉快,生活愉快,疫情之下,不被裁员。
引用文章:
How to Use the chmod Command on Linux
How To List Users and Groups on Linux
文章评论