今天来讲讲linux里面权限的问题,在linux系统中,有这么几类权限,r,w,x,s,t这么几类权限,系统中为什么要有权限这个东西
呢,linux一切皆文件,有些文件不想让某些人看到,那么这个时候就需要设置文件的访问的权限了,文件的拥有者一般都是有权力修改删除文件的,但拥有者
以外的人未必就能删除修改了,这是为了防止文件被陌生人破坏了,好说了这么多,今天来讲讲linux的权限管理相关的知识。
一个文件的信息有这么机箱,文件的属主,属组,文件引用的次数,文件大小,文件的创建时间和文件名
那么有些文件的存在那我们怎么去改变文件的属性呢?首先我们来更改文件的所有者,和属组的信息,下面会介绍到两个命令chown,chgrp
修改文件的属主chown,这个命令的目的是为了改变某一个文件的拥有者,有这么个场景,企业中有个人离职,那么新来的同事来接手这份工作,那么这时候我们就需要将文件的属主修改,命令的具体用法如下:
chown [OPTION]… [OWNER][:[GROUP]] FILE…修改文件的属主
owner:代表的就是用户
chown hadoop /tmp/passwd
其实这个chown这个命令也是可以同时更改属主和属组的,中间用:分隔或者用"."分隔
owner:group或者owner.group
chown hadoop:xks /tmp/issue
-R:递归,当我们想改某个目录的属主时,同时也想改目录下的某些文件或目录就需要用到-R来递归了
chown -R hadoop /tmp/testdir/
还有一种用法如上所述,根据某个文件的权限来给目标文件设置相同的权限,也就是根据某个文件的权限为模版来给目标文件设置相同的权限,用法如下:
chown [OPTION]… –reference=RFILE FILE…
chown –reference=/etc/shadow /tmp/passwd
chgrp修改文件的属组,也就是修改文件的属组,有些用户已经在admins组里了,当那些用户对这个文件没有任何权限,但是他们想访问这个文件,这时候改变文件的属组为那些用户所属的组,那么这些用户就可以访问文件了
chgrp [OPTION]… GROUP FILE…
chgrp admins /tmp/passwd
chgrp和chown一样也有-R选项这里我就不详细阐述了用法如下
chgrp -R groupname filename
chgrp [OPTION]… –reference=RFILE FILE…这个用法也是跟chown一样
文件权限
在linux系统中文件的权限主要针对三类对象进行定义的分别是owner:属主,u;group:属组,g;other:其他,o,一共有9个权限位,
三个一组,分别对应的属主,属组,其他人,如:rwxrw—-表示的就是文件的属主拥有读写执行的权限,属组拥有读写的权限,而其他人没有任何权限
每个文件针对每类访问者都定义了三种权限
r:readable,只读
w:writable:可写
x:excutable:可执行
这三种权限对文件和目录分别有不同的意义,内容如下:
文件:
r:可以利用cat等文件查看命令,来查看文件的内容
w:可以编辑或删除此文件
x:可以在命令提示符下当做命令提交给内核运行
目录:
r:可以对此目录执行ls以列出目录下的文件,一般和x权限一起使用
w:可以在此目录下创建、删除文件,也需要配合x权限一起使用
x:可以使用cd命令切换进目录,也可以使用ls -l查看目录下文件的详细信息
注意:在linux系统中,对于文件而言可以单个权限出现,但对于目录而言吧,一般配合x执行权限来会用,否则没有意义。
文件权限操作
文件权限可以会用英文字母r,w,x来表示,也可以使用八进制的数字来表示,
r:4
w:2
x:1
rw-
如图
八进制数字表示
— 000 0
—x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
chmod文件权限的修改,使用此命令可以修改文件的属主,属组,以及其他人的权限
chmod [OPTION]… MODE[,MODE]… FILE…
修改三类用户的权限
a+,a-, +, –
修改某类用户或某些类用户权限
u=, g= ,o=
修改某类用户某位或某些位的权限
u+, u-,g+,g-,o+,o-
chmod [OPTION]… OCTAL-MODE FILE…
chmod a+x /tmp/passwd,chmod a-r /tmp/passwd ,chmod +x /tmp/passwd,chmod -w /tmp/passwd,经过试验在+w权限的时候三类却不是全部+w权限,而只是属主+w
chmod [OPTION]… –reference=RFILE FILE…用法同chown用法一样
chmod –reference=/etc/shadow /tmp/passwd
新建文件和目录的默认权限
umask值可以用来保留在创建文件的权限,在linux系统新建文件新建文件的默认权限是666,新建目录的权限是777,但文件最终的实际权限是要减去umask值的,umask 从最大权限中屏蔽相应的权限,从而得出默认权限
root的umask是022,而非特权用户是002,我们知道了umask之后,那么我们怎么去查看umask的值呢
umask:直接在命令行敲这条命令,会显示当前的umask值,如果umask 后面跟了一个数值那么就是临时设置umask值
umask 027
umask -S模式方式显示,就是以具体的权限来显示如u=rwx,g=rx,o=
umask -p 输出可被调用
我们如果想要设置umask永久生效那么我们只能去配置文件里面去设置,分别有两个配置文件/etc/profile全局设置,对所有用户都会生效, 用户设置:~/.bashrc只针对某类用户生效
特殊权限
特殊权限有三类:SUID,SGID,Sticky
三种常用的权限:r,w,x user ,group,other
安全上下文
有一个前提进程必须要有属主和属组,文件有属主和属组,在linux里面遵循这么一个法则,
任何一个可执行程序文件能否启动为进程取决于发起者对程序文件是否有执行权限
启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组
进程访问文件的权限时,取决于进程的发起者
进程的发起者,同文件的属主:则应用文件属主权限
进程的发起者,属于文件的属组;则应用文件属组权限
如果前两者都不是那么就会应用其他人的权限
SUID
任意一个可执行程序文件能否启动为进程,取决发起者对程序文件是否拥有执行权限,举个例子,我们想查看某个文件的内容,那我们可以使用cat名,cat命
令的路径,它的权限是-rwxr-xr-x. 1 root root 48568 May 11 16:59
/bin/cat,文件的属主root对cat有执行权限那么root就可以使用cat命令,文件属组和其他人都有权限,那么这些人都能执行cat这个命
令
启动为进程之后,期进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效,SUID设置在目录上无意义,一般目录都会有执行权限,前面讲到过。那怎样来设定SUID呢?可以使用chmod命令
chmod u+s filename 添加SUID权限
chmod u-s filename 删除SUID权限
chmod u+s /tmp/passwd
chmod u-s /tmp/passwd
如果文件的属主没有执行权限那么,添加SUID之后属主的x权限位会显示为S,相反,如果有执行权限,那么会显示s
SGID
任何一个可执行程序文件能否否启动为程序:取决发起者对程序有没有执行权限
启动为进程之后,其进程的属主为原程序文件的属组
权限的设定方法
chmod g+s filename
chmod g-s filename
如果文件的属组没有执行权限那么,添加SUID之后属主的x权限位会显示为S,相反,如果有执行权限,那么会显示s
默认情况下,用户创建文件时,其属组为此用户所属的主组一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组通常用于创建一个公共目录,那么是怎样设定的呢,设定方法如下:
chmod -R g+s directory
chmod -R g-s directory
sticky权限
具有写权限的目录通常用户可以删除该目录中的任何文件,大家都可以同时往里面写数据,但是这样就有个问题,可以写就写的权限了,那么就可以删除文件了,自
己的文件删除了无所谓,如果不小心把别人的文件删了岂不是乱套了,所以这时候就要有一套机制来显示只有root用户和文件的属主才能删除自己的文件或者目
录,无论该文件的权限或拥有权在目录设置Sticky 位,只有文件的所有者或root可以删除该文件,sticky
设置在文件上无意义,因为文件本身就只有root和属主才能删除,这样做多此一举。
权限设定方法
chmod o+t directory
chmod o-t directory
特殊权限八进制数字表示法
SUID SGID STICKY
000 0 没有任何特殊权限
001 1 只有sticky权限
010 2 有SGID权限
011 3 有SGID和sticky权限
100 4 有SUID权限
101 5 有SUID和sticky权限
110 6 有SUID和SGID权限
111 7 三者都有
比如:chmod 6755 /tmp/passwd表示的意思就是将/tmp/passwd设置有SUID,SGID并且属主有读写执行的权限,属组有读执行的权限,其他人有读执行的权限。
如果文件的属主没有执行权限那么,添加sticky之后其他人的x权限位会显示为T,相反,如果有执行权限,那么会显示t
设定特定属性
chattr +i 不能删除,改名,更改内容,就算root也不能修改
chattr -i 取消权限设定
chattr +a(append)只能追加内容
访问控制列表
ACL(Access Control List),实现灵活的权限管理,除了文件所有者,所属组和其它人,可以对更多的用户设置权限,centos7是默认创建的文件系统是支持ACL的功能,之前的6,5是默认不支持的需要手动开启,方法如下:
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /media
ACL生效的顺序:所有者,自定义用户,自定义用户,其他人
getfacl查看文件的访问控制列表
getfacl filename
setfacl设置访问控制列表
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …
-m:设定访问控制权限
setfacl -m u:hadoop:rwx filename
-x:取消访问控制权限
setfacl -x u:hadoop filename 需要强调是再取消访问控制权限时权限格式后面不需要带权限
-M:将权限的格式写到文件里面使用-M选项来添加访问控制权限,文件内容格式u:hadoop:rwx
setfacl -M 1.acl filename
-X:与-M选项相反的意思,取消访问控制权限,文件内容格式u:hadoop
setfacl -X 2.acl filename
-Rm:递归,给目录下的文件及目录设置访问控制权限
setfacl -Rm u:hadoop:rwx directory
setfacl -m d:u:wang:rx directory 设置某个目录下新建文件是默认wang用户就有rx权限
setfacl-k directory 删除默认ACL权限
setfacl-b filename 清除所有ACL权限
mask只影响除所有者和other的之外的人和组的最大权限,mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
setfacl -m mask::rx file
原创文章,作者:fszxxxks,如若转载,请注明出处:http://www.178linux.com/27593