M20 – 1- 第三周博客:Linux中的权限以及特殊权限

上一篇讲到了用户与用户组,相信大家都明白了Linux中用户与用户组的含义和用处,那接下来讲的就是Linux中设置用户与用户组有使用权限。

Linux用户权限

何为权限,权限(privilege)是指某个特定的用户具有特定的系统资源使用权力,而权限又有哪几种呢。

Linux用户中主要针对三类着三种权限:读、写、执行,而Linux中存在着目录与文件,而目录的权限代表的含义与文件却又不一样,接下对目录与文件的权限详解:

文件的权限和属主属组主要针对三类对象进行定义:

owner:属主, u
group: 属组, g
other: 其他, o
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限

每个文件针对每类访问者都定义了三种权限:

r: Readable
w: Writable
x: eXcutable
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程

如何查看文件的权限有属于那些用户呢,请看下图:

QQ截图20160805221253.png

从上图可以看出普通文件"install.log"的属主(所有者)为root,而属主的权限为读(r)写(w)权限,属组(所属组)也为root,属组的权限为读(r),而其他用户的权限为读(r),(对于root超级管理员而言,实际是有任何的权限),用数字表示该用户的权限应为"0644",为何会有0呢,"0"这个数字是特殊权限,下面将会将特殊权限,而数字表示简写为"644",如何对文件添加权限和文件的属主属组呢,Linux系统中有很多命令是给用户加权限的,但是有两个常用的命令对文件添加权限和属主和属组:

chown命令

简介:
chown - change file owner and group
格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R: 递归
实例1:
[root@centos6 ~]# id user1
uid=3000(user1) gid=3000(user1) groups=3000(user1)
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 root root 45324 Aug  5 19:24 install.log
[root@centos6 ~]# chown user1.user1 install.log   #将普通文件"install.log"的属主和属组更改为user1用户
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 user1 45324 Aug  5 19:24 install.log

chgrp 命令

简介:
chgrp - change group ownership
格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
选项:
-R:递归
实例1:
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 user1 45324 Aug  5 19:24 install.log
[root@centos6 ~]# man chgrp
[root@centos6 ~]# chgrp root install.log  #只更改普通文件"install.log"的属组为root
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 root 45324 Aug  5 19:24 install.log

chmod 命令

简介:
chmod - change file mode bits
格式:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
选项:
-R: 递归修改权限
--reference=RFILE FILE...: 参考RFILE文件的权限,将FILE的修改为同RFILE;
字母加添法:
修改一类用户的所有权限:
u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限
u+ u-g+ g-o+ o-a+ a-+ -
实例1:
[root@centos6 ~]# ls -l install.log
-rw-r--r--. 1 user1 root 45324 Aug  5 19:24 install.log
[root@centos6 ~]# chmod ug=rwx install.log  #给普通文件"install.log"的属主属组添加r(读)w(写)x(执行)权限
[root@centos6 ~]# ls -l install.log
-rwxrwxr--. 1 user1 root 45324 Aug  5 19:24 install.log

给用户添加权限还有一种方式为数字修改法,而数字添加总共有几种模式呢,请看下面:

这种表示法为八进制:

--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

因此可以看作为:

blob.png

例如:640: rw-r-----    rwxr-xr-x: 755

那在这里很多人就问了,创建文件和目录的权限是多少呢,实际是由文件或目录的"默认权限-umask",何为umask,(Tips:超级管理员的目录的默认权限为777,文件的默认权限为666,umask是0022;非特权用户umask是0002)

umask 命令

简介:
Display or set file mode mask.
格式:
umask [-p] [-S] [mode]
选项:
–S:模式方式显示
–p:输出可被调用
实例1:
[root@centos6 ~]# umask -p
umask 0022
[root@centos6 ~]# umask -S
u=rwx,g=rx,o=rx
实例2:
[root@centos6 ~]# umask 0002
[root@centos6 ~]# umask
0002

而umask的默认值的定义是由配置文件定义的:

[root@centos6 ~]# grep -C5 'umask' /etc/bashrc 
                    PATH=$1:$PATH
                fi
        esac
    }

    # By default, we want umask to get set. This sets it for non-login shell.
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then   #当前登录的用户名的UID是否大于199和当前用户的id名称与当前用户的基本组id是否一致,如果两种情况满足,umask就是002,如果其中一个不满足,uamsk就是022
       umask 002
    else
       umask 022
    fi

    # Only display echos from profile.d scripts if we are no login shell
    # and interactive - otherwise just process them to set envvars
    for i in /etc/profile.d/*.sh; do

可以在个人配置文件中定义

用户设置:~/.bashrc
全局设置:/etc/bashrc

Linux用户的特殊权限

特殊权限:SUID, SGID, Sticky
三种常用权限:r, w, x user, group, other
安全上下文
前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
        (a) 进程的发起者,同文件的属主:则应用文件属主权限
        (b) 进程的发起者,属于文件属组;则应用文件属组权限
        (c) 应用文件“其它”权限

文件上的特殊权限:SUID, SGID, Sticky

特殊权限:SUID

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义

权限设定:chmodu+sFILE...;chmodu-s FILE...

特殊权限:SGID

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:chmodu+sFILE...;chmodu-s;FILE...

目录上的特殊权限:SUID, SGID, Sticky

默认情况下,用户创建文件时,其属组为此用户所属的主组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
    权限设定:chmodg+sDIR...;chmodg-s DIR...

特殊权限:Sticky 位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定:chmodo+tDIR...;chmodo-t DIR...
例如:
ls-ld/tmp  
drwxrwxrwt12rootroot4096Nov215:44/tmp

因此特殊权限数字法也是有八种模式

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
写法:chmod4777 /tmp/a.txt

权限位映射

SUID: user,占据属主的执行权限位
s: 属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
Sticky: other,占据other的执行权限位
t: other拥有x权限
T:other没有x权限

设定文件特定属性chattr、lsattr命令

chattr 命令

简介:
chattr - change file attributes on a Linux file system
格式:
chattr [ -RVf ] [ -v version ] [ mode ] files...
实例1:
chattr +i 不能删除,改名,更改
[root@centos6 ~]# chattr +i anaconda-ks.cfg 
[root@centos6 ~]# rm anaconda-ks.cfg 
rm: remove regular file `anaconda-ks.cfg'? y
rm: cannot remove `anaconda-ks.cfg': Operation not permitted
[root@centos6 ~]# mv anaconda-ks.cfg anaconda-ks.cfg.bak
mv: cannot move `anaconda-ks.cfg' to `anaconda-ks.cfg.bak': Operation not permitted
[root@centos6 ~]# echo "abc" > anaconda-ks.cfg 
-bash: anaconda-ks.cfg: Permission denied

lsattr 命令

简介:
lsattr - list file attributes on a Linux second extended file system
格式:
lsattr [ -RVadv ] [ files...  ]
实例1:
[root@centos6 ~]# lsattr anaconda-ks.cfg
----ia-------e- anaconda-ks.cfg

访问控制列表

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
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory

ACL中的权限设置

ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
getfacl可看到特殊权限:flags
默认ACL权限给了x,文件也不会继承x权限。
base ACL 不能删除
setfacl-k dir 删除默认ACL权限
setfacl-b file1清除所有ACL权限
getfaclfile1 | setfacl--set-file=-file2 复制file1的acl权限给file2

ACL中的权限定义

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

原创文章,作者:Aleen,如若转载,请注明出处:http://www.178linux.com/29809

(0)
AleenAleen
上一篇 2016-08-08
下一篇 2016-08-08

相关推荐

  • raid5 阵列

    1 fdisk 分区sdb2,sdd1,sde1, 2  新建raid5 [root@localhost ~]# mdadm -C /dev/md5 -a yes  -l 5  -n 3 -x 1 /dev/sdd1 /dev/sde1  /dev/sdf  /dev/sdb2  3   …

    Linux干货 2017-04-25
  • UID SGID与chmod 777的一些问题

    先来看问题 问题来了:echo的行为返回是对的还是vi是对的? 现场分析: vi 和 echo 都被设置为SGID权限。 abc文件所在的父目录权限是777 echo无法写abc文件,而vi是可以的 当时被问到这个问题时,我也是一征,怎么会这样。加之SUID,SGID在企业应用很少,如此这么久早忘了一干二净,只是赶紧去补课~,但经过30MIN后依然没有找到问…

    Linux干货 2016-08-08
  • Linux命令的别名与管道命令的详解

    Linux中命令的别名与管道命令的详解 命令别名 在使用和维护liunx时,将会使用大量的命令,而一些命令加上参数时输入比较繁琐,此时我们可以定义一个别名来代替繁琐的命令。 系统定义的别名 可以输入 alias 命令查看系统中已经定义好的命令的别名; [root@localhost ~]# alias alias cp=’cp -i’ alias egrep…

    Linux干货 2018-03-03
  • 开始学习总结的一些基本知识点

       第一VNC软件(面授班课堂用的),这款软件采用C/S架构(client/sever客户端和服务器端)还有VNC协议(virtual Network computing虚拟网络计算)协议。虽说这款软件对网络班没有实际用途,但自己了解下这款软件的构成也是不错的。    第二开始学习需要的虚拟机软件其中包括VMWARE…

    Linux干货 2016-10-29
  • 文件系统管理_设定文件系统的配额

    认识配置配额系统 :为控制用户使用的空间的大小,在linux可以实现对分区的大小控制,控制用户在这个分区内使用空间的大小同时还可以对用户的文件个数实现控制。 在linux系统中其遵循文件分区来实现控制 磁盘的配额只针对单个分区来实现控制,不能对单块磁盘(硬盘)来实现控制的 【搭建试验环境 1】 怎样把某一个文件夹(/home)单独放到(迁移)一个独立的分区中…

    Linux干货 2017-04-24
  • 密码保护:ansible书籍部分目录

    无法提供摘要。这是一篇受保护的文章。

    Linux干货 2015-12-14