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

相关推荐

  • 绝对路径和相对路径及cd、pwd、mkdir、rmdir、tree命令

    绝对路径和相对路径及cd、pwd、mkdir、rmdir、tree命令详解 一、绝对路径和相对路径(由下图进行讲解) 绝对路径:由根目录开始(/)开始的文件名或者目录名称,我们通过绝对路径切换到/man1文件处,所经过的路径。 cat /root/usr/share/man/man1 如下图 相对路径:相对于当前路径,以当前所在位置的相对路径。例如…

    Linux干货 2016-08-02
  • 程序包管理之rpm

    程序包管理器不同公司的发行版:                         debian:dpt管理器 &…

    Linux干货 2016-08-22
  • 文件相关操作练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限: 2、编辑/etc/group文件,添加组hadoop: 3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop: 4、复制/etc/sk…

    2017-11-17
  • lvs应用

    练习一:负载均衡一个php应用: 测试是否需要会话保持; 是否需要用到共享存储;    为了检测是否需要会话保持和共享存储,要在两台主机上分别配置LAMP环境;这样就使得两者之间没有了共享存储;负载均衡使用nat模型的wlc算法,并且不使用lvs的长连接选项。数据库故意使用了相同的账号密码来进行安装。 步骤一:配置环境: 使用yum分别安…

    Linux干货 2016-11-11
  • Linux基础小模块

    1.基础知识小块:shell 由shell程序的自带命令:即为内置命令(builtin) 独立的可执行程序文件、文件名 :即为外部命令  [root@localhost~]#ls      ~用户当前所在目录  #:命令提示符(管理员帐号root)  $:普通用户   &nbsp…

    Linux干货 2016-08-05
  • linux-系统自动化安装

    一、安装程序及配置 CentOS 系统安装 系统启动流程: bootloader–>kernel(initramfs)–>rootfs–>/sbin/init anaconda: 系统安装程序 tui:  基于图形库curses 的文本 窗口 gui :图形窗口 安装程序启动过程 MB…

    Linux干货 2016-09-26