上一篇讲到了用户与用户组,相信大家都明白了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: 可以把此文件提请内核启动为一个进程
如何查看文件的权限有属于那些用户呢,请看下图:
从上图可以看出普通文件"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
因此可以看作为:
例如: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