用户权限管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户权限管理相关的知识,希望对你有一定的参考价值。
用户在对一个文件或目录执行某种操作时用户权限管理会对其进行某种限制,不能让用户想做什么便做什么,维持着系统中的秩序,不至于系统混乱。而作为超级用户,root可以随意更改用户以及所有目录或文件的访问权限,所以在使用root用户对权限进行更改时需要慎重;使用文件命令对文件进行操作的前提是拥有相应的权限,每个文件都拥有一定的权限;默认情况下,创建一个文件的用户为这个文件的属主和属组,当属主,属组,其他用户对文件进行访问其拥有的权限亦不一定相同;在这就对用户权限的各个方面进行讲述;
在Linux中,用户的权限可大致分为:普通权限,特殊权限,文件的特殊属性等;在下面为大家一一介绍;
普通权限:
Linux系统中的每个文件和目录都有存取许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作;
Linux系统规定了四种不同类型的用户
①文件主,即属主(OWNER)
②同组用户,即属组(group)
③可以访问系统的其他用户(OTHER)
④超级用户root
当用户发起进程时,需要由被操作的文件或目录对进程上的标识进行核对,以判断该使用进程的用户以什么样的身份使用被操作的文件或目录这就是进程安全上下文的作用;
[[email protected] ~]$ cat /etc/shadow
上述命令行cat进程的所有者即为wjq;
进程安全上下文:完成特定功能和应用的主题,由用户发起的,进程上有用户标签,则进程作为用户身份的所有者,则必须要有一个比对过程;
1.判断进程的所有者是否为想要操作的文件的属主,如果是,就按照属主的权限进行授权,如果不是则转到第二条;
2.判断进程的所有者是否为想要操作的文件的属组的成员,如果是,就按照属组的权限进行授权,如果不是则转到第三条;
3.按照其他用户的权限进行授权;
权限的过程:
MODE(Permission):使用权;在一定限度下使用;对资源的操作权利;
r:readable,可读;
w:writable,可写;
x:excuable,可执行;
当访问权限不足时可通过chmod修改权限;
可以在创建目录时赋予权限:
mkdir -m 750 rootdir(在当前目录下创建rootdir目录,其权限为750)
使用ls -l命令可以显示当前目录下所有文件或目录的详细信息,而在详细信息的最左侧则为文件的存取权限;
例如
-rw-rw-rw-. 1 wjq wjq 8 3月 12 16:12 w
在上述文件权限中,最左边第一个为文件标识符,之后的左三位为属主权限,中三位为属组权限,右三位为其他用户访问权限;用“-”表示则表明不具有该权限;每一个权限位都标志了三个权限标识;称为权限标识三元组;而wjq wjq这两个则分别为属主的用户名,以及属组的用户名,在默认情况下是一样的,也可以通过命令chown进行修改;
rw-(左三位):可读可写不可执行,其相当于二进制110
rw-(中三位):可读可写不可执行,其相当于二进制110
rw-(右三位):可读可写不可执行,其相当于二进制110
当权限为rw-r--r--
对应的二进制数是110100100
由上式得到八进制数为644,这种转换形式在之后的更改权限的方式中会提到;
同理755可转换为:
755->111101101->rwxr-xr-x
对于目录和文件来说,r(读),w(写),x(执行)的含义稍有不同;
目录:
r:可以使用ls命令获得其中所有文件名的列表;如只有r(读权限)则不能使用cd命令进入其中,也不能在路径中引用该目录;
w:可以修改此目录中的文件名或文件名列表,即可以在目录中创建,修改或删除文件名;删除文件名和删除文件当中保存的数据不是一回事;即使删除了文件名,文件中存放的数据,仍会保存在内存磁道上;
x:可以使用ls -l命令来获取其中文件的详细信息,也可以在路径中引用该目录;可使用cd命令进入其中;
注意:x权限是目录的基本权限,否则任何命令都无法实行;所以x权限在创建目录时是目录的默认必须有的权限;
例如:
[[email protected] ~]$ mkdir cc
[[email protected] ~]$ ll ./cc
drwxrwxr-x. 2 wjq wjq 6 4月 3 08:21 cc(目录默认存在执行权限)
文件:
r:可以查看或获取文件中存放的数据;
w:可以修改文件中存放的数据;对于其他用户的w(写)权限Linux控制十分严格;
x:可以将此文件发起运行为进程;
注意:文件的执行权限对于Linux的文件系统来说,是非常重要的安全地标识;因为一旦文件具备的执行权限,意味着该文件可以发起执行为进程;所以默认情况下创建的文件都不具备执行权限;
例如:
[[email protected] ~]$ touch wujunqi
[[email protected] ~]$ ll ./wujunqi
-rw-rw-r--. 1 wjq wjq 0 4月 3 08:28 ./wujunqi(文件默认没有执行权限)
[[email protected] ~]$
chmod命令:用于改变或设置文件或目录的存取权限;
chmod [OPTION]...MODE[,MODE]...FILE...
MODE:符号权限标识符;
只有文件主或超级用户才有权用chmod命令改变文件或目录的存取权限;根据表示权限的方式不同, 该命令有两种用法:
①以符号的方式:
u:标识属主,相当于上述的左三位;
g:标识属组,相当于上述的中三位;
o:标识其他用户,相当于上述右三位;
a:表示所有用户;
+,-:标识授权方式;
+:在所有权的基础上添加新的权限;
-:在所有权的基础上去除某些权限;
=:不考虑其他权限,直接设置为目标权限,删除原先权限;
拓展书写方式:
chmod u+w file(若已有写权限,则并不改变什么)
chmod g+rw file(在原有的基础上添加读和写两个权限)
chmod u+x,g-wx,o-x file(在属主上添加执行权限,在属组上减少写和执行权限,在其他用户减少执 行权限,用“,”隔开)
chmod ug-x file(属主和属组都不要执行权限了)
chmod +x file默认为a(所有用户)添加执行权限;
chmod +w file默认为属主添加写权限;
例如:
[[email protected] ~]$ ll ./ss
-rw-rw-r--. 1 wjq wjq 18 3月 6 20:52 ./ss
[[email protected] ~]$ chmod u+x ss
[[email protected] ~]$ ll ./ss
-rwxrw-r--. 1 wjq wjq 18 3月 6 20:52 ./ss
利用参考对象设置权限:
chmod [OPTION]... ...--reference=rfile file
chmod [OPTION]... ...--reference=/PATH/TO/SOMEFILE file
rfile:参考对象文件
file:跟据参考对象文件设置file
chmod --reference=a b(把当前情况下的a的权限作为参考,设置b的权限)
例如:
[[email protected] ~]$ ll ./ss
-rwxrw-r--. 1 wjq wjq 18 3月 6 20:52 ./ss
[[email protected] ~]$ ll ./s
-rw-rw-r--. 1 wjq wjq 18 3月 6 20:49 ./s
[[email protected] ~]$ chmod --reference=./ss ./s
[[email protected] ~]$ ll ./ss ./s
-rwxrw-r--. 1 wjq wjq 18 3月 6 20:49 ./s
-rwxrw-r--. 1 wjq wjq 18 3月 6 20:52 ./ss
②以绝对方式修改权限
权限标识三元组:
---:000 0;
--x:001 1;
-w-:010 2;
-wx:011 3;
r--:100 4;
r-x:101 5;
rw-:110 6;
rwx:111 7;
利用绝对方式修改存根权限就是使用二进制1,0标识,1表示有相应权限,0表示无相应权限;
-R:将目标目录中的文件及子目录和子目录中的文件统一设置为指定权限;
chmod -R 640 /PATH/*
rwxrw-r--
表示111110100即764
chmod 764 file(为file文件设定对应的764权限)
-R:将目标目录中的文件及子目录和子目录中的文件统一设置为指定权限;
chmod -R 640 /PATH/*
chown命令:改变某个文件或目录的所有者和所属的组;
格式:
chown [OPTION]... [OWNER][[:GROUP]] FILE ...
chown OWNER FILE(修改文件属主)
-rw-r--r--. 1 root root 25 3月 12 15:56 3
[[email protected] /]# chown gentoo 3
[[email protected] /]# ll
总用量 160
-rw-r--r--. 1 gentoo root 25 3月 12 15:56 3
chown :GROUP FILE(修改文件属组)
[[email protected] /]# ls -l ./3
-rw-r--r--. 1 gentoo root 25 3月 12 15:56 ./3
[[email protected] /]# chown :fedora ./3
[[email protected] /]# ls -l ./3
-rw-r--r--. 1 gentoo fedora 25 3月 12 15:56 ./3
chown OWNER:FILE
//将目标文件的属主改为OWNER,同时将属组修改为OWNER的基本组;
chown OWNER:GROUP FILE //将目标文件的属主和属组修改为OWNER和GROUP
[[email protected] /]# ll ./m1
-rw-r--r--. 1 root root 8 3月 16 21:17 ./m1
[[email protected] /]# chown gentoo:fedora ./m1
[[email protected] /]# ll ./m1
-rw-r--r--. 1 gentoo fedora 8 3月 16 21:17 ./m1
[[email protected] /]#
选项:
-R:将目标目录中的文件及子目录和子目录中的文件统一设置为指定的所有权;
例:
[[email protected] /]# mkdir -p /aa/a/b/c
[[email protected] /]# ll -R /aa
/aa:
总用量 8
drwxr-xr-x. 3 root root 14 4月 2 19:23 a
-rw-r--r--. 1 root root 0 3月 23 22:43 c
-rw-r--r--. 1 root root 0 3月 14 20:39 qq
-rw-r--r--. 1 root root 8 3月 12 14:36 s
-rw-r--r--. 1 root root 8 3月 23 22:45 ww
/aa/a:
总用量 0
drwxr-xr-x. 3 root root 14 4月 2 19:23 b
/aa/a/b:
总用量 0
d rwxr-xr-x. 2 root root 6 4月 2 19:23 c
/aa/a/b/c:
[[email protected] /]# chown -R gentoo:fedora ./aa
[[email protected] /]# ll -R /aa
/aa:
总用量 8
drwxr-xr-x. 3 gentoo fedora 14 4月 2 19:23 a
-rw-r--r--. 1 gentoo fedora 0 3月 23 22:43 c
-rw-r--r--. 1 gentoo fedora 0 3月 14 20:39 qq
-rw-r--r--. 1 gentoo fedora 8 3月 12 14:36 s
-rw-r--r--. 1 gentoo fedora 8 3月 23 22:45 ww
/aa/a:
总用量 0
drwxr-xr-x. 3 gentoo fedora 14 4月 2 19:23 b
/aa/a/b:
总用量 0
drwxr-xr-x. 2 gentoo fedora 6 4月 2 19:23 c
/aa/a/b/c:
注意:只有超级用户才可以修改所有权的操作,普通用户做不到;
chgrp:只能修改属组;
chgrp [OPTION]...GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE
例
[[email protected] /]# ll -d ./aa
drwxr-xr-x. 3 gentoo fedora 48 4月 2 19:23 ./aa
[[email protected] /]# chgrp cen ./aa
[[email protected] /]# ll -d ./aa
drwxr-xr-x. 3 gentoo cen 48 4月 2 19:23 ./aa
[[email protected] /]#
install命令:
安装:复制文件,为文件赋予执行权限x;
copy file and set attribution
单源复制:
install [OPTION]... [-T] SOURCE DEST
多源复制:
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
创建目录:
install [OPTION]... -d DIRECTORY...
选项:
-m --MODE:指定权限;
-o --OWNER:设定目标文件的属主(仅root可用);
-g --GROUP:设定目标文件的属组;(仅root可用)
注意:install命令不能复制目录,即其源不能为目录,则install经历了会进入目录,依次复制其中 的所有非目录文件到目标位置;
例
①
[[email protected] /]# install 3 asd
[[email protected] /]# ls ./asd
3 a aa ww
[[email protected] /]#
②
[[email protected] /]# ll ./3
-rw-r--r--. 1 gentoo fedora 25 3月 12 15:56 ./3
[[email protected] /]# install -m 640 3 asd
[[email protected] /]# ls ./asd
3 a aa ww
[[email protected] /]# ll ./asd
总用量 8
-rw-r-----. 1 root root 25 4月 2 19:36 3
③
[[email protected] /]# install -o gentoo -g fedora 3 asd
[[email protected] /]# ll ./asd
总用量 8
-rwxr-xr-x. 1 gentoo fedora 25 4月 2 19:38 3
mktemp命令:被用来创建临时文件供shell脚本使用;一般来讲,临时文件都会建立在/tmp或/var/tmp目录中,无需手动删除,系统会定期删除这两个目录中的文件;
选项:
-d:创建临时目录;
-u:暂存文件会在mktemp结束前先行删除;
例子:
mktemp [-d] /PATH/TO/TMP.
特殊权限:
特殊权限有三种:SUID,SGID,STICKY(粘滞)
SUID:
功能作用:
在Linux系统中,当用户发起进程时有些进程是不具备执行权限的,这个时候我们可以采用SUID设置特殊权限,SUID设置在属主的执行位上,在进行SUID操作后此程序发起的进程其属主为改程序文件的属主,而不是其发起者;换句话说如果拥有SUID权限,则发起进程的属主为root;那么我们在用当前用户所操作的进程,实际上也就是在root操作下完成的;
SUID权限所显示的位置,文件的属主的执行权限中,如果属主本来就有执行权限,则显示为s,否则显示为S;
这样的特殊权限,即便我们处在普通用户环境下,也可以执行一些root用户的操作,如rm修改为SUID的权限,则什么都可以删;所以一般情况下,除了系统给我们设置的SUID,我们不要轻易的去设置SUID权限,危险很大;
注意:SUID只有在可执行文件上才有意义,对目录无意义;
添加权限操作:
chmod u+s file(在属主下进行的)
SGID:
功能作用:
SGID是放在属组执行位上的特殊权限,只有在目录具有写权限时才能使用SGID;当使用SGID后,在当前目录下创建的所有文件或目录,都会像继承父目录一般,继承它的属组;
SGID显示位在文件的属组权限中的执行权限位,如果属本来有执行权限则显示为s,否则显示为S;
添加权限操作:
chmod g+s file(在属组下进行的)
例:
[[email protected] ~]$ chmod g+s ./ab
[[email protected] ~]# mkdir -p /home/wjq/ab/aaa
[[email protected] ~]# ls /home/wjq/ab
a aaa abq bbb file1 ss wu
[[email protected] ~]# ll -d /home/wjq/ab/aaa
drwxr-sr-x. 2 root wjq 6 4月 2 20:22 /home/wjq/ab/aaa
在超级用户的环境下创建目录aaa则其默认的属主与属组为root但经过特殊权限SGID后,目录ab下新创建的aaa目录,继承了ab的属组;
注意:SGID只对目录有意义,对文件无意义;
STICKY:粘滞位
如果在某个目录中有超过一个用户对其目录有着写权限的话,就可以对目录中的所有文件或目录进行增删修改等操作,这样的操作只能是在其他用户的权限位下进行,因为只有这样才会有超过一个用户对其具有写权限;这样如果在一些企业中工作的话,对系统的安全产生了威胁,其他用户可以对另一个用户创建的文件或目录造成删除,修改等操作,是不符合逻辑的,所以这个时候就有粘滞位的必要,在STICKY特殊属性下,在当前可写的目录下,用户只可以删除修改属主为其本身的文件或目录;这样就保证了用户与用户之间的安全性;
STICKY权限显示位置:在文件的其他用户的执行权限位,如果原来就有执行权限,则显示为t,否则为T;
注意:STICKY只对目录有意义,对文件无意义;
添加权限操作:
chmod o+t directory(在其他用户权限下进行的)
例如:给某个目录加上粘滞位
chmod 1755 file
umask:在新建文件时,其最初的文件权限由文件创建掩码决定,用户每次登陆进系统时,umask命令都被执行,并自动设置遮罩码MODE来限制新文件的权限;
root:0022
第一个0:不考虑特殊权限位
后三位:对于新创建的文件或目录,不遮挡属主的任何权限,遮住了属组和其他用户的写权限;
mkdir test->rwxr-xr-x->0022(umask)
touch test->rw-r--r--(文件默认遮住执行权限)->0133(umask)
用户可以通过修改umask默认值如
#umask 0033
来修改遮罩码的默认值
若为0033则把属组和其他用户的写和执行遮住,3为2+1,需要注意的是操作符“=”在umask与chmod中的作用完全不同;chmod是用它设置指定的权限,其他权限都被取消,而umask则是在原有权限的基础上删除指定权限;
理解遮罩码:
将遮罩码的值变为二进制,凡是有1的位置,则权限在创建文件时就不设置,即为“-”;
0033
000011011---110100100 644
---111100100 744
默认情况下,文件的遮罩码已经有一个0111,在此基础上利用命令umask来遮罩权限;
文件的特殊属性:文件的特殊属性可以通过命令chattr进行添加删除特殊属性,特殊属性是限制root用户,当root用户被破坏时,可以使用特殊属性进行一定程度的保护,防止数据损坏;
lsattr:查看文件的特殊属性;
例如:
[[email protected] ~]$ lsattr ./s
---------------- ./s //表示root用户可以做任何事情,没有特殊属性
[[email protected] ~]$
若不加参数则显示当前目录路下所有文件;
修改设置文件的特殊属性:(特殊属性对root起到一定程度的限制,防止root被盗)
chattr:change file attributes on a Linux file system
chattr [ -RVf ] [ -v version ] [ mode ] files...
mode:会使用+-=的方式来设置;
+:在原来属性的基础上增加属性;
-:在原来属性的基础上减去属性;
=:不考虑原来属性,把属性设置成我们想要的属性;
整个chattr命令最关键最核心的是[mode]部分;
[aAcCdDeijsStTu]都是所需要的属性;
chattr -i a(减去不可删除属性)
a:append设置这个属性的文件,其内容不能被更改或删除,只能以追加的方式向文件里写数据;多数的服务器日志类文件会设置为此属性;(重要)
A:atime,文件的访问时间戳,IO瓶颈,设置A属性,可以是的文件在被访问时不更改文件的访问时间戳,从而可以有效地防止IO瓶颈的发生;(重要)
c:设置文件是否自动压缩后再行存储;
C:设置文件是否开启“写时复制”属性;
d:设置文件在使用dump命令进行备份的时候不会成为备份的目标,备份的时候把他忽略;
D:设置文件在文件系统中的异步写操作;
i:设置文件不能被删除修改,以及链接;(重要)
s:设置文件的保密性删除;一旦设置s属性的文件被删除,其对应的存储设备中的使用空间会被删除;
U:跟s属性相反,如果这样的文件被删除,则存取设备的数据会被留存;
上述属性,在运维工作中常用的是a不能追加写数据,与i不能删除修改;
常用选项:
-R:递归的设置指定目录中的所有文件和子目录的属性;
[[email protected] ~]# lsattr
---------------- ./anaconda-ks.cfg
---------------- ./initial-setup-ks.cfg
---------------- ./11
---------------- ./d
---------------- ./home
---------------- ./b
---------------- ./c
---------------- ./a
[[email protected] ~]# ls
11 a anaconda-ks.cfg b c d home initial-setup-ks.cfg
[[email protected] ~]# chattr +ia ./b
[[email protected] ~]# lsattr
---------------- ./anaconda-ks.cfg
---------------- ./initial-setup-ks.cfg
---------------- ./11
---------------- ./d
---------------- ./home
----ia---------- ./b
---------------- ./c
---------------- ./a
与FACL有关的命令:为额外的用户授权,但FACL只在一些比较新的Linux系统中才会使用,一些比较旧的系统无法使用,这对中小型企业中的应用率较低,因为中小锌企业对Linux系统要求稳定性高,不一定追求最新的系统,所以FACL对中小型企业来说较为鸡肋;
getfacl:获得FACL,查看文件的FACL设置;
格式:getfacl file
user:USERNAME:rwx
group:GROUPNAME:rw-
other::r--
例如:
[[email protected] ~]$ getfacl ./s
# file: s
# owner: wjq
# group: wjq
user::rwx
group::rw-
other::r--(::中间省略了属主名与属组名)
setfacl:
setfacl [{-m|-x}acl_spec] file...
acl_spec:指定的访问控制列表
u:USERNAME:MODE
g:GROUPNAME:MODE
MODE一般使用符号权限标识法;
为用户赋予额外权限:(则一个用户能在另一个用户中添加文件或目录,但当前用户无法修改,除非双方用户都互相赋予额外权限)
setfacl -m u:USERNAME:MODE FILE
为组赋予的额外权限:
setfacl -m g:GROUPNAME:MODE FILE
为用户删除额外权限:
setfacl -x u:USERNAME file
为组删除额外权限:
setfacl -x g:GROUPNAME file
注意:如果设置了FACL之后再修改目标文件的使用权限,则FACL中设置的条目就可能会受到影响而导致与要求不符;因此如果真的要设置FACL,那就要在已经确定目标文件的使用权限以后再行设置;
以上是关于用户权限管理的主要内容,如果未能解决你的问题,请参考以下文章