Linux-权限管理

chattr

chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]

只有超级权限的用户才具有使用该命令的权限,这项指令可改变存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系统上的文件或目录属性。

 

这些属性共有以下8种模式:

A:即Atime,告诉系统不要修改对这个文件的最后访问时间。

S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。

a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。

b:不更新文件或目录的最后存取时间。

c:将文件或目录压缩后存放。

d:当dump程序执行时,该文件或目录不会被dump备份。

D:检查压缩文件中的错误。

i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。

s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。

u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。

t:文件系统支持尾部合并(tail-merging)。

X:可以直接访问压缩文件的内容。

 

参数:

-R 递归处理,将指定目录下的所有文件及子目录一并处理。

-v<版本编号> 设置文件或目录版本。

-V 显示指令执行过程。

+<属性> 开启文件或目录的该项属性。

-<属性> 关闭文件或目录的该项属性。

=<属性> 指定文件或目录的该项属性。

  1. #1、用chattr命令防止系统中某个关键文件被修改  
  2. chattr +i /etc/fstab   
  3.   
  4. #2、让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作  
  5. chattr +a /data1/user_act.log  

 

 

 

lsattr

用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性。

lsattr 命令显示文件系统属性与ls 显示的UNIX 文件系统属性是两个不同的概念。lsattr实现的属性是文件系统的物理属性,而ls显示的文件属性是操作系统进行管理文件系统的逻辑属性。

 

 

 

chmod

chmod [-cfRv][--help][--version][<权限范围>+/-/=<权限设置...>][文件或目录...]

chmod [-cfRv][--help][--version][数字代号][文件或目录...]

chmod [-cfRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]

变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取,写入,执行3种一般权限来区分,另有3种特殊权限可供运用,再搭配拥有者与所属群组管理权限范围。您可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果您对符号连接修改权限,其改变会作用在被连接的原始文件。权限范围的表示法如下:

u:User,即文件或目录的拥有者。

g:Group,即文件或目录的所属群组。

o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。

a:All,即全部的用户,包含拥有者,所属群组以及其他用户。

有关权限代号的部分,列表于下:

r:读取权限,数字代号为"4"。

w:写入权限,数字代号为"2"。

x:执行或切换权限,数字代号为"1"。

-:不具任何权限,数字代号为"0"。

s:当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限。

 

参数:

-c或--changes  效果类似"-v"参数,但仅回报更改的部分。

-f或--quiet或--silent  不显示错误信息。

-R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。

-v或--verbose  显示指令执行过程。

--help  在线帮助。

--reference=<参考文件或目录>  把指定文件或目录的权限全部设成和参考文件或目录的权限相同

--version  显示版本信息。

<权限范围>+<权限设置>  开启权限范围的文件或目录的该项权限设置。

<权限范围>-<权限设置>  关闭权限范围的文件或目录的该项权限设置。

<权限范围>=<权限设置>  指定权限范围的文件或目录的该项权限设置。

  1. #所有人可读  
  2. chmod ugo+r file1.txt  
  3. chmod a+r file1.txt  
  4. chmod 777 file1.txt  
  5.   
  6. #将目前目录下的所有档案与子目录皆设为任何人可读取  
  7. chmod -R a+r *  
  8.   
  9. #当其他用户执行oracle的sqlplus这个程序时,他的身份因这个程序暂时变成oracle  
  10. chmod u+s sqlplus  
  11.   
  12. #此外,chmod也可以用数字来表示权限如 chmod 777 file  
  13. #语法为:chmod abc file  
  14. #其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。  
  15. #r=4,w=2,x=1  
  16. #若要rwx属性则4+2+1=7;  
  17. #若要rw-属性则4+2=6;  
  18. #若要r-x属性则4+1=5。  

 

 

 

chown

chown [-cfhvR] [--help] [--version] user[:group] file...

Linux/Unix 是多用户多任务操作系统,所有的文件皆有其拥有者(Owner)。利用 chown命令 可以将文件的拥有者加以改变。一般来说,这个命令只能由系统管理者(root)使用,一般用户没有权限来改变别人的文件的拥有者,也没有权限可以将自己的文件的拥有者改设为别人。只有系统管理者(root)才有这样的权限。

user : 新的档案拥有者的使用者 ID

group : 新的档案拥有者的使用者群体(group)

-c : 若该档案拥有者确实已经更改,才显示其更改动作

-f : 若该档案拥有者无法被更改也不要显示错误讯息

-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案

-v : 显示拥有者变更的详细资料

-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)

--help : 显示辅助说明

--version : 显示版本

  1. #将档案 file1.txt 的拥有者设为 users,群体的使用者 jessie :  
  2. chown users:jessie file1.txt  
  3.   
  4. #将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :  
  5. chown -R lamport:users *   

 

 

 

chgrp

chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]

chgrp(change group) 在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。

-c或--changes 效果类似"-v"参数,但仅回报更改的部分。

-f或--quiet或--silent  不显示错误信息。

-h或--no-dereference  只对符号连接的文件作修改,而不更动其他任何相关文件。

-R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。

-v或--verbose  显示指令执行过程。

--help  在线帮助。

--reference=<参考文件或目录>  把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。

--version  显示版本信息。

  1. #更改所属组  
  2.  chgrp root myfile  
  3.  chgrp test myfile  

 

 

 

umask

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。

 

umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最 大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来 说,umask中各个数字最大可以到7。

该命令的一般形式为:

umask nnn

其中nnn为umask置000-777。

让我们来看一些例子。

计算出你的umask值:

可以有几种计算umask值的方法,通过设置umask值,可以为新创建的文件和目录设置缺省权限。下表列出了与权限位相对应的umask值。

在计算umask值时,可以针对各类用户分别在这张表中按照所需要的文件/目录创建缺省权限查找对应的umask值。

例如,umask值002 所对应的文件和目录创建缺省权限分别为6 6 4和7 7 5。

还有另外一种计算umask值的方法。我们只要记住umask是从权限中“拿走”相应的位即可。[2] 

umask值与权限

umask 文件 目录

0 6 7 600 710

1 6 6 500 611

2 4 5 421 532

3 4 4 322 433

4 2 3 243 354

5 2 2 144 255

6 0 1 065 176

7 0 0 066 077

 

例如,对于umask值0 0 2,相应的文件和目录缺省创建权限是什么呢?

第一步,我们首先写下具有全部权限的模式,即777 (所有用户都具有读、写和执行权限)。

第二步,在下面一行按照umask值写下相应的位,在本例中是0 0 2。

第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。

稍加练习就能够记住这种方法。

第四步,对于文件来说,在创建时不能具有执行权限,只要拿掉相应的执行权限比特即可。

这就是上面的例子, 其中u m a s k值为0 0 2:

1) 文件的最大权限 rwx rwx rwx (777)

2) umask值为0 0 2 --- --- -w-

3) 目录权限 rwx rwx r-x (775) 这就是目录创建缺省权限

4) 文件权限 rw- rw- r-- (664) 这就是文件创建缺省权限

下面是另外一个例子,假设这次u m a s k值为0 2 2:

1) 文件的最大权限 rwx rwx rwx (777)

2 ) u m a s k值为0 2 2 --- -w- -w-

3) 目录权限 rwx r-x r-x (755) 这就是目录创建缺省权限

4) 文件权限 rw- r-- r-- (644) 这就是文件创建缺省权限

 

 

 

setfacl和getfacl

setfacl[-bkndRLP]{-m|-M|-x|-X...}file... # -m|-M|-x|-X

getfacl dir/file

 

getfacl,取得某个文件/目录的ACL设置项目

setfacl,顾名思义就是设置文件的ACL规则

而Acl(Access Control List)就是访问控制列表,传统的文件系统控制只针对一个用户或者一个组,如果多个用户或者多个组都想对某个文件/目录 有访问权限,而且需要有不同的访问权限,传统的方式就无法满足了,于是就出现setfacl这个命令,在不改变所有者的前提下,将这个文件/目录对任意用户和组都可以设置不同的访问权限。

-m,--modify=acl modify the current ACL(s)of file(s) #设置文件acl规则

-M,--modify-file=file read ACL entries to modify from file #从文件读取访问控制列表条目更改

-x,--remove=acl remove entries from the ACL(s)of file(s) #删除文件的acl规则

-X,--remove-file=file readACL entries to remove from file #从文件读取访问控制列表条目并删除

-b,--remove-all remove all extended ACL entries # 删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留.

-k,--remove-default remove the defaultACL #删除缺省的acl规则。如果没有缺省规则,将不提示.

--set=acl set the ACL of file(s),replacing the current ACL.

--set-file=file readACL entries toset from file #从文件中读设置ACL规则.

--mask dorecalculate the effective rights mask #重新计算有效权限,即使ACL mask被明确指定.

-n,--no-mask don'trecalculate the effective rights mask #不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定.

-d,--default operations apply tothe defaultACL #设定默认的acl规则,针对目录而言.

-R,--recursive recurse into subdirectories #递归的对所有文件及目录进行操作.

-L,--logical logical walk,follow symbolic links #跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。

-P,--physical physical walk,donotfollow symbolic links #跳过所有符号链接,包括符号链接文件。

--restore=file restore ACLs(inverse of`getfacl-R') #从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行.

--test testmode(ACLs are notmodified) #测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出.

-v,--version print version andexit #版本.

-h,--help thishelp text #不用说肯定是帮助了.

当使用-M,-X选项从文件中读取规则时,setfacl接受getfacl命令输出的格式。每行至少一条规则,以#开始的行将被视为注释.

 

setfacl命令可以识别以下的规则格式。

[d[efault]:][u[ser]:]uid[:perms]

指定用户的权限,文件所有者的权限(如果uid没有指定)。

[d[efault]:]g[roup]:gid[:perms]

指定群组的权限,文件所有群组的权限(如果gid未指定)

[d[efault]:]m[ask][:][:perms]

有效权限掩码

[d[efault]:]o[ther][:perms]

#perms域是一个代表各种权限的字母的组合:读:r 写:w 执行:x,执行只适合目录和一些可执行的文件。perms域也可设置为八进制格式0~7。

  1. setfacl -m u:testuser:rw- testfile    
  2. #多了一行user:lee,这种设置对于目录和文件显示的结果是一样的  
  3. getfacl testfile   
  4. # file: testfile  
  5. # owner: test  
  6. # group: test  
  7. user::rw-  
  8. user:testuser:rw-  
  9. group::rw-  
  10. mask::rw-  
  11. other::r--  
  12.   
  13. #设置组权限  
  14. setfacl -m g:mygroup:rwx xx.log   
  15. getfacl xx.log  
  16. # file: xx.log  
  17. # owner: root  
  18. # group: root  
  19. user::rw-  
  20. group::r--  
  21. group:mygroup:rwx  
  22. mask::rwx  
  23. other::r--  
  24.   
  25. #设置mask  
  26. setfacl -m m:--- test.log  
  27. getfacl test.log  
  28. # file: test.log  
  29. # owner: root  
  30. # group: root  
  31. user::rwx  
  32. group::r-x                      #effective:---  
  33. mask::---  
  34. other::r-x  
  35.   
  36. #设置other  
  37. setfacl -m o:rwx hehe.txt  
  38. getfacl hehe.txt   
  39. # file: hehe.txt  
  40. # owner: root  
  41. # group: root  
  42. user::rw-  
  43. group::r--  
  44. other::rwx  
  45.   
  46. ll 命令显示出如果设置了setfacl,会在权限最后多出一个+  
  47. -rwx---r-x+ 1 root       root       213672 Jan  4 17:31 xx.log  
  48. drwx---r-x+ 2 root       root         4096 Jan 10 22:27 tmp  

 

setfacl权限错误

setfacl: /mnt/bak: Operation not supported 错误

解决方法:重新修改/etc/fstab文件,加入acl选项

/dev/vg/bak             /mnt/bak                ext3    defaults,acl    0 0

然后:mount -o remount /mnt/bak 重新挂载,再执行上面的命令,成功!

 

 

 

suid

当设置了这个权限位时,以该文件拥有者的身份去运行,也就是说无论谁执行这个文件,他都有文件拥有者的权限,可以用chmod来设置权限,4表示suid,2表示sgid,1表示stick bit


  1. #修改suid  
  2. chmod 4741 xx.log  
  3. chmod u+s temp/  
  4. #注意用户权限的x那一位变成了s  
  5. ll xx.log  
  6. -rwsr----x 1 root root 2 Jan 10 17:49 xx.log  
 

 

 

sgid

当设置了这个权限时,以该文件所属的组的权限去运行。当被拷贝到这个目录下的文件所属的组都和这个目录一样,除非设置了-p(保留原先的权限)才能保留原先的组权限

  1. chmod 2755 hehe.sh    
  2. chmod g+s tempdir/  
  3. #注意组那几位的权限中的x权限位变成了s  
  4. ll hehe.sh           
  5. -rwxr-sr-x 1 root root 150 Dec 26 19:39 hehe.sh  
 

 

 

sticky bit

即使组内的其他用户或者其他用户(other)都有对这个文件的写和执行权限,但当设置了sticky bit位后,只有这个文件的拥有者才能删除这个文件。

最典型的例子就是/tmp目录,这个目录的权限是drwxrwxrwt  注意最后一位是t ,所以这个目录下的文件只有root或者文件的拥有者才能删除。

  1. chmod 1755 hehe.sh    
  2. chmod o+t mytemp/   
  3. #最后最后一位变成了t  
  4. ll hehe.sh                   
  5. -rwxr-xr-t 1 root root 150 Dec 26 19:39 hehe.sh  

 

 

sudo

su

账号管理useradd userdel

groupadd 

groupdel

 

登陆模块/sbin/nologin

w who last等

 

 

参考

setfacl提示 Operation not supported

Operation not supported 错误及解决方法

chattr

lsattr

setfacl和getfacl

setfacl百科

linux的三种特殊权限介绍

sticky bit

linux:SUID、SGID详解

你可能感兴趣的:(Linux)