linux中的账号管理我们在前面两张已经介绍了一些用户和组的相关概念,常用的配置文件,命令的使用。现在我们来看看账号管理中最傲娇的部分就是我们的权限管理。
一、简单介绍权限的概念
以install.log这个文件为例,查看install.log的元数据,从下图可以看出,每个文件或者目录都有它的所属的主和所属组,最左边显示不仅有它所属类型,还有它的读取写入执行的权限,为什么目录或者文件要设置这些权限呢,这肯定是出于安全的考虑。如果linux系统中不设置这些权限,就容易被攻击。
文件的权限主要针对三类对象进行定义:
owner:属主,u
group:属组,g
other:其他,o
每个文件针对每类访问者都定义了三种权限:
r: Readable,读
w: Writable,写
x: eXcutable,执行
二、三种权限对文件和目录的影响
对文件的影响:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容,不能删除文件本身
x: 可以把此文件提请内核启动为一个进程(针对二进制程序或脚本,普通文件不需要添加此权限)
X:也是执行的权限,但是在文件中有两种情况出现
a) 文件的权限中有执行权限,全部添加执行权限
b) 文件的权限中没有执行权限,就不加执行权限
例如:
虽然/bin/cat没有执行权限,但是有读取的权限,可以使用其他查看工具来查看,此文件为二进制文件
查看/bin/cat文件,可以看出这个文件对普通权限只有读的操作
切换到clq这个用户
用cat这个工具不能查看文件内容,因为没有写入执行的权限,使用echo重定向输入会报错
cat命令为二进制文件,使用其他工具可以查看cat文件
对目录的影响:
r: 可以使用ls查看此目录中文件列表(可以查看目录内文件列表,但不能访问文件,不能cd,也不能查看文件的元数据)
w: 可在此目录中创建文件,也可删除此目录中的文件但是要配合执行权限
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
X:加上此权限相对与将这三类对象全部加上执行的权限了
例如:
1、因为test相对于f1这个文件他只是个other组,other组的权限只有读取,没有写入执行等操作
2、当我把f1的文件属主改为test用户的时候,test拥有rw权限
3、文件对用户只有执行操作,用户可以执行这条命令,但是不能读取
三、修改文件的属主和属组chown,chgrp
chown命令:
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户id,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符.
格式:chown[OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER 改变用户的属主
OWNER:GROUP 改变用户的属主属组
:GROUP 改变用户的属组
命令中的冒号可用.替换;
选项:
-c或--changes:效果类似“-v”参数,但仅回报更改的部分; -f或--quite或--silent:不显示错误信息; -h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件; -R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理; -v或--version:显示指令执行过程; --dereference:效果和“-h”参数相同; --help:在线帮助; --version:显示版本信息。 --reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
chgrp修改属组的命令:
格式:chgrp[OPTION]… GROUP FILE…
常用选项:
chgrp[OPTION]... --reference=RFILE FILE... -R 递归
四、修改文件的属
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件
权限范围的表示法如下: u User,即文件或目录的拥有者; g Group,即文件或目录的所属群组; o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围; a All,即全部的用户,包含拥有者,所属群组以及其他用户; r 读取权限,数字代号为 “4”; w 写入权限,数字代号为 “2”; x 执行或切换权限,数字代号为 “1”; - 不具任何权限,数字代号为 “0”; s 特殊功能说明:变更文件或目录的权限
例如:
可以直接用数字表示权限,用法比较简单,不加以举例 rw-r-----:640 rwxr-xr-x: 755
1、给f1文件的主加上执行权限,组和其他用户加上写权限
2、取消这些权限使用减号
3、u=空格,把所有权限都取消了
五、新建文件和目录的默认权限
umask值可以用来保留在创建文件权限
新建FILE权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限: 777-umask
非特权用户umask是002
root的umask是022
用法: umask: 查看 umask#: 设定 umask002 umask–S 模式方式显示 umask–p 输出可被调用
全局设置:/etc/bashrc用户设置:~/.bashrc
六、Linux文件上的特殊权限
三种特殊权限为:SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
使用这三种权限的前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
例如:
cat命令查看/etc/shadow是由wang这个发起者决定的,不是root这个所有者决定,wang用户继承的是other的权限
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
可执行文件上行SUID权限
为什么/etc/shadow文件设置严格,但是普通用户还是可以修改密码呢,这是因为在passwd上面设置了一个SUID权限;SUID:当用户去运行passwd的时候,他将继承该程序所有者root的权限
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:
chmod u+s FILE…
chmod u-s FILE…
GUID权限
对可执行文件而言:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属组
权限设定:
chmod g+s FILE…
chmod g-s FILE…
对目录而言:
默认情况下,用户创建文件时,其属组为此用户所属的主组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
权限设定:
chmodg+sDIR…
chmodg-s DIR…
Sticky位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
普通用户wang不仅可以对自己的文件进行删除操作,对其他用户的文件也可以删除,这样会带来安全隐患
现在在目录那里加上粘滞位之后,就不能删除其他用户的权限了
权限设定:
chmodo+tDIR…
chmodo-t DIR…
例如:
ls-ld/tmpdrwxrwxrwt12rootroot4096Nov215:44/tmp
权限位映射
SUID: user,占据属主的执行权限位
s: 属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
Sticky: other,占据other的执行权限位
t: other拥有x权限
T:other没有x权限
数字表示:u:4;g:2;o:1
chmod 4777 /tmp/a.txt (继承所有者权限)
chmod 2777 /tmp/a.txt (继承所属组权限)
七、chattr,lasttr设置文件特定属性
chattr +i 不能删除,改名,更改
chattr +i /etc/fstab
然后试一下rm、mv、rename等命令操作于该文件,都是得到Operation not permitted的结果
chattr +a 只能增加
chattr +a /test/yuan
chattr +A,访问时间的属性被锁定不做修改,解锁:-A
lsattr 显示特定属性
用于查看文件的第二扩展文件系统属性
显示一个i,说明被锁定了,把i去掉就可以执行一些操作了
八、访问控制列表
概念:
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。
CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt
ACL生效顺序:所有者,自定义用户,自定义组,其他人
为多用户或者组的文件和目录赋予访问权限rwx
选项:
mount -o acl /directory 临时开启分区acl权限
getfacl file |directory 查看acl权限
setfacl -m u:wang:rwx file|directory 这个目录对wang用户设置了rwx权限
setfacl -Rm g:sales:rwX directory setfacl-R:递归设定acl权限
递归权限和默认权限都是针对目录而言的,不能给文件设置。
setfacl -M file.acl file|directory
如果经常要对某些用户设置一样的权限就可以使用-M
例如;
vim acl.txt
如果另外一个文件对这些用户也做同样的设置
setfacl -m g:salesgroup:rw file| directory 对组设置权限
setfacl -x u:wang file |directory 删除设置的acl权限
例如:
删除wangcai对f1 acl设置的权限
setfacl -X file.acl directory 对某些用户做删除
例如:
vim acl12.tt
setfacl -m d:u:wang:rx directory 设定默认acl权限
对新建文件默认不能带x权限,目录是可以加的
setfacl-k dir 删除默认ACL权限
setfacl-b file1清除所有ACL权限
getfacl file1 | setfacl–set-file=-file2 复制file1的acl权限给file2
最大有效权限与删除
mask只影响除所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效。setfacl-m mask::rxfile
–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以.如:
setfacl –set u::rw,u:wang:rw,g::r,o::-file1
恢复和备份acl
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt
#setfacl -R -b /tmp/dir1
#setfacl -R –set-file=acl.txt /tmp/dir1
#getfacl -R /tmp/dir1
九、练习
1、在/data/testdir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹
2、设置/test/f1的权限,使user1用户不可以读写执行,g1组可以读写 /test/dir的权限,使新建文件自动具有acl权限:user1:rw,g1:—;备份/test目录中所有文件的ACL,清除/test的所有ACL权限,并利用备份还原
原创文章,作者:xiaoqing,如若转载,请注明出处:http://www.178linux.com/30661