1、【场景驱动学习】刚开始接触Linux系统时,一直是使用超级用户root来对文件进行操作,但又一天发现,我使用普通用户登录系统时,并不能运行甚至不能打开文件,这是什么原因呢?
答:这是因为文件权限限制的原因,Linux系统之所以安全高效,独特的文件权限设置是其中一个原因!本章也是主要对文件的权限设置进行介绍!
1. Linux系统中,主要的文件权限控制方法有以下几种:
- 文件的"读、写、执行"[rwx]权限【常规权限设置】
- 文件的黏着位权限【特殊权限设置】
- 文件的acl【访问控制列表access control list】
- 文件系统属性[chattr]权限控制
- 磁盘挂载时的特殊权限分配 【更高层面的文件权限限制】
2. 下面将分别介绍以上几种常用的权限设置,及其注意事项
-
【常规权限】rwx
1.常规权限是什么,代表了什么意义,如何设置?- 常规权限包括了rwx,分别为读、写、执行;这三种权限代表的意义对于文档和目录的作用各不相同:
- rwx对于文档来说分别意味着:(1)能打开文档查看文档内容;(2)能编辑文档内容(3)如果文档是可执行文件,则能执行;
- 对于目录说来rwx分别意味着:(1)能浏览此目录下的内容【如进入目录后,可以使用ls命令列出目录中的文件信息】(2)w意味着能在此目录下创建、删除文件和修改文件名称(3)x意味能进入此目录
- 如何设置常规文档权限:
- 修改新建文件的默认权限:文件的最高权限为(rwxrwxrwx)777,分别对应着用户属主的权限、用户属组的权限、其他人的权限;新建的文档权限与
#umask
值有关,默认为022,新建文件的权限为777-022=755;但为了系统安全,所有新建的文档均没有可执行权限,所以最终的默认文档权限为:755-111=644,也就是rw_r__r__。
- 所以可以从修改umask值来设置文件的默认权限,修改umask值得方法有两种:一种是临时修改umask值:
#umask 0077
,那么新建的文档权限为777-077=700,700-111=600,即rw_ ___ ___;这种方法只是临时改变了umask值,系统重启后,umask值就会变回原来的0022;另一种修改umask值的方式是修改配置文件,从而达到永久修改umask值得效果,系统中与控制uamsk值的配置文件为/etc/profile和/etc/bashrc;这两个配置文件的区别是/etc/profile只在用户第一次登录时被执行,而/etc/bashrc则在用户每次登录加载Bash Shell时都会被执行。 - chmod命令修改已有文件的常规权限设置;格式为
#chmod [option] [filename|direction]
常搭配的选项如下:- a = perm >a为all,即文件的属主、属组和其他人的权限均为perm,其中perm格式为777、740等,每个权限位是4、2、1之间的组合数
- u [=|+|-] [rwx] >u为user属主的意思,[=|+|-]意味着可在属主原权限的基础上重新设置、增加或者减少权限
- g [=|+|-] [rwx] >g为group,文件属组,[=|+|-]意味着可在属组原权限的基础上重新设置、增加或者减少权限
- o [=|+|-] [rwx] >o为other,文件其他人;[=|+|-]意味着可在文件其他人原权限的基础上重新设置、增加或者减少权限
- 修改新建文件的默认权限:文件的最高权限为(rwxrwxrwx)777,分别对应着用户属主的权限、用户属组的权限、其他人的权限;新建的文档权限与
-
【特殊权限】为什么还需要设置特殊权限呢?【特殊权限USID和GSID只对可执行文件生效】
- 答:主要为了满足人们对文件权限的各种需求,比如一批用户想拥有文件file属组group的权限,但如果把这批用户加入到组group中,那么这批用户也就拥有了group对其他非file文件的权限,导致了这批用户的权限过大了。为了解决此问题,Linux中设置了特殊权限位,SUID是属主的特殊权限位、SGID是属组的特殊权限位和SBIT是other的特殊权限位,分别可使用4、2、1来表示。
- 设置特殊权限位的命令格式:
chmod [option] filename
,常搭配的选项如下所示:- a+s >表示在文件属主权限的基础上增加SUID权限,那么其他非属主的用户执行此文件时,都会拥有此文件属主的权限,直到文件执行完毕;【即非属主用户会在文件执行过程中暂时性地拥有属主的权限,文件执行完成后,恢复原来权限】
- g+s >表示在文件属组权限的基础上增加GUID权限,那么其他非属组的用户执行此文件时,都会拥有此文件属组的权限,直到文件执行完毕;【即非属组用户会在文件执行过程中暂时性地拥有属组的权限,文件执行完成后,恢复原来权限;但当用户对文件的权限 比属组的权限还要大或者相等时,用户会以自己的权限去执行文件】
- o+s >在具有SBIT的目录下,即使使用者若具有该目录下wr权限,也只能管理自己建立的文件。
-
【ACL访问控制列表】有时候需要对多个用户设置不一样的权限,使用常规权限或者特殊权限依然很难满足,这时候就需要使用acl权限设置来对不同用户赋予文件不同的权限;
- 命令模式
setfacl [option] [u:username|g:groupname]:[r|w|x] [directory|filename]
,常搭配的选项如下所示:- -m >增加acl权限
#setfacl -m [u:username|g:groupname]:[r|w|x] [directory|filename]
,其中u代表增加用户,后接指定的用户名,然后是赋予此用户的权限,最后是指定目标文件 - -x >删除acl权限
#setfacl -x [u:username|g:groupname] [directory|filename]
,其中u代表用户、g为组,后接指定的用户名或者组名,最后是指定目标文件 - -R >setfacl -m u:user01:rwx -R directory 递归赋予用户user01用户目录directory及此目录下的子目录及所有文件rwx权限【只对现有文件起作用】
- -b >删除文件上所有的Acl权限
setfacl -b filename
- -d >设定默认Acl权限
- 【acl控制器mask】因为acl是适用多用户对文件授权,但由于人数过多,容易出现失误,比如某个用户的权限过高;此时可以使用设置mask值来设定可以赋予的最高权限。
- -m >增加acl权限
- 命令模式
#setfacl -m m:rx [filename|directory] >设定文件或目录的最大acl权限
- 【文件属性权限设置】Liunx中root用户的权限最大,在Linux世界中像神一样强大,但这个神却是由人来控制着,而生为人就难免会出现错误,有些错误是不能犯的。所以有什么方法来防止root用户不小心把重要配置文件删除呢?
- 对于这个问题,可以使用文件属性权限来防止root用户意外删除重要配置文件,但这也只是防止意外删除,而不能防止root用户主动删除,毕竟神就是神,人类是无法控制的。
- 命令格式
chattr [+|-|=] [option] [file|directory]
,常搭配的选项如下:- +i >[initial原始]如果对文件设置了i属性,那么任何人不允许对文件进行删除、改名也不能添加或者修改数据 ;如果对目录设置了i属性,那么只能修改目录下文件里的数据,但不允许新建和删除文件,也不能修改文件名称
chattr +i /root/script/book_shell/
- +a >[append追加]如果对文件设置了a属性,那么只能在文件中追加数据,但不能删除和修改数据;对目录设置了a属性,那么只能建立和修改文件,但不允许删除
chattr +a /root/script/book_shell
- [如何查看目录或者文件是否设置了特殊的文件属性呢?]
lsattr [option] [filename|directory]
常搭配的选项如下:- -a >显示所有文件和目录
- -d >若目标是目录,仅列出目录属性而非子文件
**【磁盘挂载分区权限设置】**本章内容过多,这一块留在"分区"应用时再做详细介绍