linux下文件权限设置及其作用文件权限与归属(读、写、执行权限)
linux系统中一切皆文件,要说权限,有必要先了解一下文件的分类
Linux中的文件分类
在linux系统中一切都是文件,并且文件类型不同,具体如下:
符号表示代表文件类型
普通文件
目录文件
链接文件
块设备文件
字符设备文件
管线文件
网络设备
door(Solaris)它提供了一种新的方式的插口linux 执行权限,用于顾客端和服务器的应用进程之间通讯的文件。
可以从下边的图中听到部份文件类型
读、写、执行权限
下边一张图表示出文件的类型为普通文件,用户具有读、写权限,组和其他用户具有读权限(644),所属root用户,所属root组,不仅文件类型,其他都和权限相关。
文件权限的表示
符号表示值权限具体意义
可读
文件:才能读取文件的内容;文件夹:可读取文件夹中的文件列表
可写
文件:编辑、新增、修改、删除;文件夹:新增、删除、重命名文件
可执行
文件:可执行脚本程序;文件夹:才能步入该目录
文件读、写、执行权限的设置
如对一个文件进行权限设置,可以用下边的方式:
<span class="token function">chmod</span> a+x filename <span class="token comment">#给所有人赋予该文件可执行权限</span> <span class="token function">chmod</span> u+r filename <span class="token comment">#给用户赋予读权限</span> <span class="token function">chmod</span> o+w filename <span class="token comment">#给其他用户赋予写权限</span> <span class="token function">chmod</span> g+rw filename <span class="token comment">#给用户组赋予读、写权限</span> <span class="token function">chmod</span> <span class="token number">741</span> filename <span class="token comment">#给用户赋予读、写、执行的权限;给用户组赋予读权限;给其他人赋予执行权限;</span>
文件其他权限设置可参考类推;文件夹权限设置也可以查看前面的设置。
查看设置好的文件权限
<span class="token function">ls</span> al filename <span class="token comment">#用这个命令查看设置好的文件权限</span> <span class="token function">ls</span> ald forldname <span class="token comment">#查看文件夹的文件权限</span>
文件的特殊权限(SUID、SGID、SBIT)
在复杂多变的生产环境中,文件的rwx权限未能满足我们对灵活性和安全性的需求,因而有了SUID、SGID和SBIT的特殊权限位,这是一种对文件权限进行设置的特殊功能,可与通常权限同时使用,填补一些通常权限不能实现的功能。
SUID理解SUID
是一种对二补码程序进行设置的特殊权限,可以让二补码程序的执行者临时拥有属主的权限(仅对拥有执行权限的二补码程序有效)。
/etc/shadow是拿来储存用户密码的,权限位为000,不仅root用户没有用户可以操作它;
passwd是写密码的命令,passwd加上SUID特殊权限位,普通用户执行该命令的时侯能够使用root的身分将密码写入/etc/shadow中。
权限显示为rws就是被赋于了SUID的权限
SUID设置
chmodu+sexecutable
如更改zcat的SUID,原用户的权限显示为rwx
chmodu+szcat#为zcat加上SUID权限
ls-alzcat#x变为s就是被赋于了SUID权限
chmodu-szcat#为zcat除去SUID权限
假如用户对文件本身没有执行权限,为用户加上该权限后则权限会由-变为S
chmodu+szcat#为用户对zcat加上SUID权限
ls-alzcat#查看这个权限,发觉权限显示为rwS
权限显示为rwS是不能否执行的,会显示权限不够
<span class="token punctuation">[</span>root@a1e14095-cca7-5fa6-8bdf-3f0 bin<span class="token punctuation">]</span><span class="token comment"># chmod 644 zcat </span> <span class="token punctuation">[</span>root@a1e14095-cca7-5fa6-8bdf-3f0 bin<span class="token punctuation">]</span><span class="token comment"># zcat </span> -bash: /bin/zcat: 权限不够 <span class="token punctuation">[</span>root@a1e14095-cca7-5fa6-8bdf-3f0 bin<span class="token punctuation">]</span><span class="token comment"># chmod u+s zcat</span> <span class="token punctuation">[</span>root@a1e14095-cca7-5fa6-8bdf-3f0 bin<span class="token punctuation">]</span><span class="token comment"># zcat </span> <span class="token punctuation">[</span>root@a1e14095-cca7-5fa6-8bdf-3f0 bin<span class="token punctuation">]</span><span class="token comment"># ls -al zcat</span> -rwSr--r-- <span class="token number">1</span> root root <span class="token number">1941</span> <span class="token number">4</span>月<span class="token number">11</span> <span class="token number">2018</span> zcat -bash: /bin/zcat: 权限不够
SGID理解SGID
SGID和SUID类型,是一种对二补码程序进行设置的特殊权限,不过获取的不再是文件所有者的临时权限,而是获取文件所属组的权限。
SGID的作用:
1、让执行者拥有所属组的权限
2、在目录中创建的文件手动承继该目录的用户组权限
SGID设置
对可执行文件进行设置
chmodg+sexecutable#给可执行文件加上SGID权限
chmodg-sexecutable#给可执行文件除去SGID权限
作用:ps命令原始权限为-rwxr-xr-x,加SGID权限后变为-rwxr-sr-x,这会使用它other用户的权限也相当于r-x
对目录进行设置
chmod-Rfg+spert/
pert目录设置上SGID特殊权限位,这样任何人在该目录创建的文件都归属于该目录所有组,而不再是自己的基本用户组。
SBIT理解SBIT
SBIT称为“粘滞位”或“保护位”
SBIT特殊权限可确保用户只能删掉自己的文件,而不能删掉其他用户的文件。
SBIT设置
chmod-Ro+tforldname#设置成功后,原先other用户的执行权限x会被改写为t,起初没有执行权限的会显示为T。
ls-aldforldname#可以用该命令来查看
设置任何人不能删掉的文件或文件夹
对文件或文件夹用chattr命令进行配置,具体操作详见下边的链接
chown
chown[选项]…[所有者][:[组]]文件…
#改变文件或文件夹detailf的用户和用户组
$chownuser:groupdetailf
#改变文件或文件夹detailf的用户
$chownuserdetailf
#改变文件或文件夹detailf的用户和用户组为user(用户和用户组同名)
$chownuser:detailf
#改变文件或文件夹detailf的用户组
$chown:groupdetailf
chgrp
功能:改变文件或目录所属的组。
句型:chgrp[选项]groupfilename
参数:
-c或–changes疗效类似”-v”参数,但仅回报修改的部份。
-f或–quiet或–silent不显示错误信息。
-h或–no-dereference只对符号联接的文件作更改,而不更动其他任何相关文件。
-R或–recursive递归处理linux 论坛,将指定目录下的所有文件及子目录一并处理。
-v或–verbose显示指令执行过程。
–help在线帮助。
–reference=把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
–version显示版本信息。
该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持转义。假如用户不是该文件的属主或超级用户,则不能改变该文件的组。
示例:将/mnt/fú及其子目录下的所有文件的用户组改为fú
chgrp-Rfú/mnt/fú
ACL(文件访问控制列表)
用于对莫个对特用户进行权限控制,对普通文件设置ACL虽然就是针对指定的用户或用户组设置文件或目录的操作权限。
假如对目录设置了ACL,则目录中的文件会承继其ACL;若针对文件设置了ACL,则不在承继目录的ACL。
怎样设置文件或文件夹的ACLlinux apache 虚拟主机,通过setfacl命令来进行设置
setfacl设置ACL权限
taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ <span class="token builtin class-name">cd</span> /root -bash: cd: /root: 权限不够 taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ <span class="token function">sudo</span> <span class="token function">su</span> root <span class="token punctuation">[</span>sudo<span class="token punctuation">]</span> taobao 的密码: root@taobao-Kunlun-LS3A4000-LS7A-desktop:/home/taobao<span class="token comment"># setfacl -Rm u:taobao:rwx /root #为taobao这个用户设置/root文件夹控制权限</span> root@taobao-Kunlun-LS3A4000-LS7A-desktop:/home/taobao<span class="token comment"># exit</span> <span class="token builtin class-name">exit</span> taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ <span class="token builtin class-name">cd</span> /root/ taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:/root$
用户taobao访问/root目录被告知权限不够,进行下边的授权
setfacl-Rmu:taobao:rwx/root
成功后发觉进行**cd/root/**操作正常了
查看目录是否具有ACL权限getfacl命令查看该权限
getfacl/root查看前面设置
学习ACL权限设置可以参见
ls命令查看该权限
ls-ald/root
权限最后一位显示为“+”的时侯说明该文件治具有ACL权限
taobao@taobao-Kunlun-LS3A4000-LS7A-desktop:~$ <span class="token function">ls</span> <span class="token parameter variable">-ald</span> /root drwxrwx---+ <span class="token number">10</span> root root <span class="token number">4096</span> <span class="token number">1</span>月<span class="token number">21</span> 01:21 /root
setfact其他功能选项功能
-m
设定ACL权限。假如是给与用户ACL权限,参数则使用“u:用户名:权限”的格式,比如setfacl-mu:st:rx/project表示设定st用户对project目录具有rx权限;假如是给与组ACL权限,参数则使用“g:组名:权限”格式,比如setfacl-mg:tgroup:rx/project表示设定群组tgroup对project目录具有rx权限。
-x
删掉指定用户(参数使用u:用户名)或群组(参数使用g:群组名)的ACL权限,比如setfacl-xu:st/project表示删掉st用户对project目录的ACL权限。
-b
删掉所有的ACL权限,比如setfacl-b/project表示删掉有关project目录的所有ACL权限。
-d
设定默认ACL权限,命令格式为“setfacl-md:u:用户名:权限文件名”(假如是群组,则使用d:g:群组名:权限),只对目录生效,指目录中新构建的文件拥有此默认权限,比如setfacl-md:u:st:rx/project表示st用户对project目录中新构建的文件拥有rx权限。
-R
递归设定ACL权限,指设定的ACL权限会对目录下的所有子文件生效,命令格式为“setfacl-mu:用户名:权限-R文件名”(群组使用g:群组名:权限),比如setfacl-mu:st:rx-R/project表示st用户对已存在于project目录中的子文件和子目录拥有rx权限。
-k
删掉默认ACL权限。
su命令与sudo服务sudo命令权限改变
sudo命令把特定命令的执行权限交付给指定用户,这样普通用户使用该命令就享有了root管理员的权限。
命令格式:sudo[参数]命令名称
sudo服务中的可用参数以及作用参数作用
参数作用
-h
列举帮助信息
-l
列举当前用户可执行的命令
-u用户名或UID值
以指定的用户身分执行命令
-k
清空密码的有效时间,上次执行sudo时须要再度进行密码验证
-b
在后台执行指定的命令
-p
修改寻问密码的提示语
总结来说,sudo命令具有如下功能:
限制用户执行指定的命令;记录用户执行的每一条命令;配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;验证密码的后5分钟内(默认值),无须再让用户再度验证密码。visudo指定用户的执行权限
如给taobao用户设置poweroff执行命令,首先找到该命令的绝对路径,用whereispoweroff命令
<span class="token punctuation">[</span>root@a1e14095-cca7-5fa6-8 pert<span class="token punctuation">]</span><span class="token comment"># whereis poweroff </span> poweroff: /usr/sbin/poweroff /usr/share/man/man8/poweroff.8.gz
root用户执行visudo命令找到“##Allowroottorunanycommandsanywhere”,添加taobao用户对poweroff命令的执行权限(假如把taobao换成ALL,那就是所有用户都有这个权限了)
<span class="token comment">## Allow root to run any commands anywhere</span> root<span class="token assign-left variable">ALL</span><span class="token operator">=</span><span class="token punctuation">(</span>ALL<span class="token punctuation">)</span> ALL taobao <span class="token assign-left variable">ALL</span><span class="token operator">=</span>NOPASSWD:/usr/sbin/poweroff
su切换用户
su-username(意味着完全切换到新用户,即把环境变量信息也变更为新用户相应信息)
umaskumask介绍与验证
执行下边的命令
<span class="token punctuation">[</span>root@876234e3-fcd6-554c-8 home<span class="token punctuation">]</span><span class="token comment"># touch 456</span> <span class="token punctuation">[</span>root@876234e3-fcd6-554c-8 home<span class="token punctuation">]</span><span class="token comment"># ls -al 456</span> -rw-rw-r-- <span class="token number">1</span> root root<span class="token number">0</span> <span class="token number">3</span>月 <span class="token number">5</span> <span class="token number">22</span>:32 <span class="token number">456</span> <span class="token punctuation">[</span>root@876234e3-fcd6-554c-8ce6-628d1c6d936c home<span class="token punctuation">]</span><span class="token comment"># ls -al</span> 总用量 <span class="token number">0</span> drwxr-xr-x <span class="token number">6</span> root root <span class="token number">79</span> <span class="token number">3</span>月 <span class="token number">5</span> <span class="token number">22</span>:39 <span class="token builtin class-name">.</span> dr-xr-xr-x. <span class="token number">19</span> root root<span class="token number">278</span> <span class="token number">3</span>月 <span class="token number">4</span> <span class="token number">13</span>:27 <span class="token punctuation">..</span> drwxrwxr-x <span class="token number">2</span> root root<span class="token number">6</span> <span class="token number">3</span>月 <span class="token number">5</span> <span class="token number">22</span>:39 <span class="token number">123</span> <span class="token punctuation">[</span>root@876234e3-fcd6-554c-8 home<span class="token punctuation">]</span><span class="token comment"># umask</span> 0002
理论
可以看出root用户执行touch命令后生成的文件“456”权限位为664linux 执行权限,文件夹“123”权限位为775,为什么会是这样,哪些决定了这种呢?
答案是umask
umask命令拿来设置所创建文件和目录的默认权限。
用命令查看到的umask的值为0002,是哪些意思呢?
umask值为一个网段,第一个0为粘滞位,其他三位分别代表用户、组、其他用户的权限位,开启文件的全权限值为666,文件夹的全权限位为777,这么新建文件或文件夹的权限要是全权限位减掉umask的值
现实
用前面的反例来算一下吧
文件“456”用ls-al见到的权限位664
666-002=664#不用考虑umask第一位粘滞位的值,这么umask是002;算下来的和用命令见到的值一致
文件“123”用ls-al见到的权限位775
777-002=775#算下来的和用命令见到的值一致
umask值的设置一、临时设置
<span class="token punctuation">[</span>root@876234e3-fcd6-554c-8 home<span class="token punctuation">]</span><span class="token comment">#umask</span> 0002 <span class="token punctuation">[</span>root@876234e3-fcd6-554c-8 home<span class="token punctuation">]</span><span class="token comment">#umask 0022</span> <span class="token punctuation">[</span>root@876234e3-fcd6-554c-8 home<span class="token punctuation">]</span><span class="token comment">#umask</span> 0022 <span class="token punctuation">[</span>root@876234e3-fcd6-554c-8 home<span class="token punctuation">]</span><span class="token comment">#</span>
根据以上方法改变的umask值在shell退出之前或则使用新的umask命令之前仍然有效,假如想永久改变umask值,须要更改自己$HOME目录下的.profile或.bash_profile文件中更改
二、永久生效
<span class="token function">vi</span> .bash_profile m0145216@c408eag:~<span class="token operator">></span> <span class="token function">cat</span> .bash_profile <span class="token comment"># .bash_profile</span> <span class="token punctuation">..</span><span class="token punctuation">..</span><span class="token punctuation">..</span><span class="token comment">#此处省略百来字</span> <span class="token builtin class-name">export</span> <span class="token environment constant">PATH</span> <span class="token builtin class-name">umask</span> 022
以上是Linux 文件权限设置及作用:了解文件分类与权限详情的详细内容。更多信息请关注PHP中文网其他相关文章!