简介
Linux最为服务器系统,其最优秀的地方之一就在于它的多用户多任务环境,即Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变得十分重要。
例如,某台 Linux 服务器上有 4 个用户,分别是 root、www、ftp 和 mysql,在同一时间内,root 用户可能在查看系统日志、管理维护系统;www 用户可能在修改自己的网页程序;ftp 用户可能在上传软件到服务器;mysql 用户可能在执行自己的 SQL 查询,每个用户互不干扰,有条不紊地进行着自己的工作。与此同时,每个用户之间不能越权访问,比如 www 用户不能执行 mysql 用户的 SQL 查询操作,ftp 用户也不能修改 www 用户的网页程序。
不同用户具有不问的权限,毎个用户在权限允许的范围内完成不同的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。
用户与用户组概念
概念
如上所述,Linux是一个多用户多任务的分时操作系统,如果要使用系统资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统。这个账户和用户是一个概念,通过建立不同属性的用户,一方面,可以合理的利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
每个用户都用一个唯一的用户名和用户口令,在登录系统时,只有正确输入了用户名和密码,才能进入系统和自己的主目录。
用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,那如果有 100、1000 甚至更多的用户呢?
显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作
因此,在Linux里任何一个文件都具有“用户(User)"、“用户组(Group)”、“其他人(Other)”三种身份的个别权限。
用户和组的对应关系
用户和用户组的对应关系有以下 4 种:
- 一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。
- 一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
- 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
- 多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。
用户和组的配置文件路径
User用户:
/etc/passwd(用户及其属性相关信息如名称、UID、GID……)
/etc/shadow(用户密码及其相关属性)
Group组:
/etc/group(组及其属性相关信息)
/etc/gshadow(组密码及其相关属性)
文件权限说明
文件权限主要依据三种身份来决定:
- user/owner 文件使用者,文件属于哪个用户
- group 属组,文件属于哪个组
- others 既不是user,也不再group,就是other,其他人
每个文件针对每类访问者定义了三种主要权限
- r:Read 读
- w:Write 写
- x:execute 执行
用户获取文件权限的顺序: 先看是否为所有者,如果是,则后面权限不看;再看是否为所属组,如果是,则后面权限不看。
注意:x针对目录加执行权限,文件不加执行权限(因文件具备执行权限有安全隐患),root账户不受文件权限的读写限制,执行权限受限制。
权限位说明
第一栏有10位-rw-rw-r--,代表这个文件的类型的权限,以另外例子图示
rwx也可以用数字来代替
为什么取值4,2,1呢?一组rwx顺序是固定的,其值是二进制计算所得,一组(一个身份)权限值即为rwx位各值之和。如rw-
常见权限
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
权限对文件与目录的意义
文件权限
文件是实际含有数据的地方,包括一般文本、数据库内容档、二进制可执行文件等等。
因此权限对于文件来说,它的意义是这样的
- r:read可读取文件的实际内容,如可以用cat等查看类工具获取其内容
- w:write可以编辑、新增或修改文件内容,但不能删除文件(w主要针对文件内容而言)
- x:execute 该文件具有可被系统执行的权限,可以把此文件提请内核启动为一个进程(一般为可执行的程序、脚本文件)
文件的w权限主要针对文件内容而言,与文件文件名存在与否没有关系,因此删除文件(修改文件名)的权限是受父目录的权限控制的,和文件本身权限无关。如果想删除文件应该给上一级目录的用户或者用户组可写和执行的权限。
目录权限
目录主要的内容在记录文件名清单
r —read contents in directory
表示具有读取目录结构清单的权限,如可以对此目录执行ls列出所有文件名数据。
w —modify contents of directory
可在此目录中创建新的文件和目录,删除已经存在的文件和目录(不论该文件的权限是什么),更名或搬移该目录下的文件与目录。
x —access directory
目录不可被执行,x代表的是使用者能否进入该目录成为工作目录(类似打开抽屉的钥匙),即可以cd进入这个目录。
具有r权限只能开到目录下文件列表,想要read目录中文件的具体内容,还的具备目录的x权限,所以要开放目录给任何人浏览的时候,应该至少给与r与x的权限,w权限可保留。
可读权限r和可写权限w都要和执行x权限配合才能够查看和编辑修改目录或文件的内容。
修改文件属性与权限的方法
修改文件所属用户 chown
chown [-cfhvR] [--help] [--version] user[:group] file...
修改文件的属主:chown
用法说明:
user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c #显示更改的部分的信息
-f #忽略错误信息
-h #修复符号链接
-v #显示详细的处理信息
-R #处理指定目录以及其子目录下的所有文件
--help #显示辅助说明
--version #显示版本
# 将 test.txt 文件的属主 修改为 root
[root@MyLinux /tmp 16:43:12] chown root test.txt
修改文件所属组 chgrp
chgrp [-cfhRv][--help][--version][所属群组][文件或目录...]
chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
-c #--changes 效果类似"-v"参数,但仅回报更改的部分。
-f #--quiet或--silent 不显示错误信息。
-h #--no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。
-R #--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v #--verbose 显示指令执行过程。
--help #在线帮助。
--reference=<参考文件或目录> #把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
--version #显示版本信息。
# 将 test.txt 文件的属组 修改为 root
[root@MyLinux /tmp 16:43:12] chgrp root test.txt
修改文件权限 chmod
chmod是用来改变文件或目录权限的命令,但只有文件的属主和超级用户才有这种权限,通过chmod来改变文件或目录的权限有两种方法:一种是通过权限字母和操作符表达式的方法来设置权限,另外一种是使用数字的方法来设置权限,数字方法是比较常用的。
chmod [身份] [参数] [文件]
u(user) +(添加)
g(group) -(减去)
o(other) =(赋值)
a(all)
u:表示所有者权限
g:表示群组权限
o:表示非同群组用户的权限
a:表示所有用户的权限
+:表示加入权限
-:表示去掉权限
=:表示设定权限
# 当前权限
-rw-rw-r-- 1 root root 0 8月 11 16:41 test.txt
#方法1
# 减去属主的写权限
chmod u-w test.txt
# 查看权限
-r--rw-r-- 1 root root 0 8月 11 16:41 test.txt
# 其他
chmod u+wx,g-r,o=rx file
chmod -R g+rwX /testdir
# 方法2
# 属主添加可读可写可执行权限
chmod 700 test.txt
#属主可读可写可执行,属组可读可执行,其他人可读可执行
chmod 755 test.txt