![](https://img.haomeiwen.com/i6120676/367d0e0a679af2ec.png)
1用户权限
何为用户权限呢?**
用户权限是指用户在执行目录或者文件时所拥有的权限。
权限分为读,写,执行,其对于的英文字母为 r,w,x。
相同的权限对文件和目录有不一样的意思
对于文件来说:
r:可使用文件查看工具获得其内容 (如 cat ,less)
w:可以修改其内容 (如nano,vim)
x:可以把此文件提交给内核启动一个进程(process)
对于目录来说:
r:可以使用ls来查看此目录中的文件列表
w:可在其目录下创建文件,并且可以删除不是其创建的文件
x:可以ls -l来查看其目录中文件列表,可以cd进入此目录
创建权限和修改权限
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
[OPTION]
三类用户:
u:属主
g:属组
o:其它
a: 所有
MODE表示法:
-R 表示递归
赋权表示法:直接操作一类用户的所有权限位rwx;
u=
g=
o=
a=
授权表示法:直接操作一类用户的一个权限位r,w,x;
u+, u-
g+, g-
o+, o-
a+, a-
例如 我要让其他用户可以读/etc/passwd的文件。方法:先把/etc/passwd文件复制到/app目录下,这个目录我已经事先建立好。
![](https://img.haomeiwen.com/i6120676/512b60df531c3037.png)
其他修改方法也一样,在这里就不一一测试了。
2 特殊权限
linux系统的特殊权限有三个:SUID、SGID、Sticky
这三种特殊权限有何作用呢?
首先我们从权限的角度分析,一个文件或目录能否操作,是取决于用户的属主和属组的权限。而对于other用户来说,其操作一个文件或目录,是以进程的属主或属组的权限来访问的。因此,我们要用一种特殊的方法来操作一下特定的文件或目录就需要用到特殊权限。
理解特殊权限的含义,先介绍下linux系统安全上下文:
- A 任何一个可以执行程序文件能不能启动为进程,取决于发起者对程序是否拥有执行权限。
- B 启动进程之后,其进程的属主为发起者的属主,进程的属组为发起者的属组。
- C进程访问文件时的权限,取决于进程的发起者
-(1)进程的发起者,同文件的属主,则应用文件属主权限
-(2)进程的发起者,属于文件的属组,则应用文件属组权限
-(3)应用文件“其他“权限
SUID
权限设定:
chmod u+s file
chmod u-s file
默认情况下:用户发起的进程,进程的属主是其发起者;因此,其以发起者的身份在运行;
- SUID的功能:用户运行某程序时,如果此程序拥有SUID权限,那么程序-
运行为进程时,进程的属主不是发起者,而程序文件自己的属主。
例如:我cp /etc/cat文件 到/app/目录下,并命名为cat,对cat程序 增加s权限(对文件附加s权限,前提是该文件为二进制可执行文件)
![](https://img.haomeiwen.com/i6120676/6c9362f82c75d01a.png)
切换到tom用户下执行该文件,要先把cat文件的属主改成tom。
![](https://img.haomeiwen.com/i6120676/db0a562e33c71688.png)
在tom用户下执行cat命令,这样做会非常危险,tom用户可以拥有root的所有权限了,所有一般情况下不这样使用。
![](https://img.haomeiwen.com/i6120676/4b7bee96cf0bd8f6.png)
SGID
-
SGID功能:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;
权限设定:
chmod g+s file
chmod g-s file
例如:在/app/目录下创建一个test目录,并把它的属主和属组改成group1:group1image.png
对group1组增加s权限,需要先把tom用户加入到group
组里面
![](https://img.haomeiwen.com/i6120676/dce7a8c1f3be09eb.png)
切换到tom用户下,执行创建文件a.txt文件,其属主已经改成tom了。
![](https://img.haomeiwen.com/i6120676/32d55331bf694234.png)
sticky
权限设定:
chmod t+s dir
chmod t-s dir
- 功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky权限,则每个用户能创建新文件,且只能删除自己的文件。
sticky在生产环境中用得比较多,避免了同组的其他用户删除自己创建的文件。注意:sticky对目录有效,对文件无效。
总结
suid
作用二进制可执行程序上,切换次程序所有者的身份
sgid
作用于二进制可执行程序上,继承了此程序所属组的权限
作用于目录上,在该目录下新创建文件所属组继承目录的所属组
sticky
作用于目录,该目录的文件,只有被所有者或者root删除
3 ACL
ACL 英文access constrol list 俗称访问控制列表
跟很多网络设备厂商里面的acl一样,其功能也一样。
- 功能:除了文件的所有者,所属组和其它人,可以对更多的用户设
置权限。
CentOS7 默认创建的xfs 和ext4 文件系统具有ACL 功能
CentOS7 之前版本,默认手工创建的ext4 文件系统无ACL功能, 需手动增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL 生效 顺序:所有者,自定义用户,自定义组,其他
设置ACL的方法
setfacl -m u:tom:rwx file|directory
setfacl -Rm g:jerry:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:jerrygroup:rw file| directory
setfacl -m d:u:wang:rx directory 新建的目录,默认继承wang用户拥有acl权限
setfacl -x u:wang file |directory
setfacl -X file.acl directory
查看acl策略的方法
getfacl file |directory
setfacl -k dir 删除默认ACL 权限
setfacl –b file1 清除所有ACL 权限
** getfacl file1 | setfacl --set-file=- file2 复制file1
的 的acl 权限给file2** -代表前面输出的参数 ,权限继承
备份和恢复ACL
getfacl -R /tmp/dir1 > acl.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
例如:在/app目录下创建b.txt ,并把其创建acl。
setfacl -m u:tom:--- /app/b.txt
![](https://img.haomeiwen.com/i6120676/0d765502ae299992.png)
![](https://img.haomeiwen.com/i6120676/3d610c27fb79e8e7.png)
切换到tom用户 打开b.txt文件,提示无权限。
![](https://img.haomeiwen.com/i6120676/b316eef70315caaf.png)
注意:设置acl权限于mask有关系,mask
相对于一条边界线,任何用户不能超越,只能比它低,这个用处在于:统一把一下高的权限通过设置mask来降低权限。
设置方法:
setfacl -m mask::rx file
mask 只影响除所有者和other 的之外的人和组的最大权限
Mask 需要与用户的权限进行逻辑与运算后,才能变成有限的
权限
--set 选项会把原有的ACL 项都删除,用新的替代,需要注
意的是一定要包含UGO 的设置,不能象-m 一样只是添加
ACL 就可 以
示例:
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
acl对原来的属主属组其他没有权限删除。
网友评论