首页 > 代码库 > 用户的权限和管理
用户的权限和管理
权限(mode,permission)
权限的判断为:一个用户(非一个程序)对一个文件拥有什么样的权限
权限有三种 r (read) 读 w (write) 写 x (execute) 执行
a表示all a=u+g+o
r 读 权限
针对目录,有r权限,就代表能对此目录有列表的功能 (就是ls列出来的功能)
针对文件,有r权限,就代表能对此文件有阅读的功能 (就是指cat一类的命令)
w 写 权限
针对目录,有w权限,就代表在此目录下创建(删除)文件或者子目录 (touch,mkdir等)
针对文件,有w权限,就代表能在此文件写入内容或者修改 (> ,>>, vi 再写等)
x 执行 权限
针对目录,有x权限,就代表能进入此目录 (cd)
针对文件,有x权限,就代表能执行它 (命令,可执行文件等)
权限的修改
# chmod a+x 1.txt
# chmod g+x 1.txt
# chmod a+x 1.txt
# chmod a-r 1.txt
chmod u-w,g+x,o+x 1.txt --也可以一次性连写
权限用数字来表示 (r,w,x都可以用数字来表示)
r 4
w 2
x 1
rwx 7
rw_ 6
r_x 5
r__ 4
_wx 3
_w_ 2
__x 1
___ 0
-rw-r--r-- 这个以数字表示为644(严谨的说,不能叫它六百四十四,要叫它六四四)
每三位里r代表4,w代表2,x代表1;由三个数组成一个三位数,就是你的权限
特殊权限位(s,t)
s位叫特权位,英文的叫法有setuid,setgid,suid,sgid等
特权位s
一个可执行文件拥有s位时,当其它用户来执行这个可执行文件的话,使用的权限是此可执行文件属主或者属组的权限
只针对前三位,中间三位
对目录可以加,但是无效,因为目录不是命令,根本不能执行它
什么情况下修改了一个文件才需要强制保存,什么情况下能够成功强制保存?
答案:如果你对一个文件没有写权限,那么修改后,要保存就会出现强制保存的选项;
虽然你对这个文件没有写权限,但如果你对文件所在的上一级目录有写权限,则可以强制保存成功,并且保存后,把文件的owner和group属性改成了你自己
如果对上一级目录没有写权限,则不可以强制保存;但也有一个例外,就是如果这个文件的owner就是你,那么你对它没有写权限,对它上级目录也没写权限,也可以强制保存成功
如果文件有i属性,那么无论什么情况都不能强制保存
介绍几个常见重要的属性:
属性1: A
# lsattr 1.txt
-------------e- 1.txt
# chattr +A 1.txt --这个属性让文件的access time访问后也不会变化,节省了IO(IO优化);默认情况下rhel5,访问一次atime就会跟着变一次,rhel6下只有当atime等于或早于mtime和ctime之一时,才会访问跟着变,否则不会变。(原因我们在后面讲mount参数时再补充)
# lsattr 1.txt
-------A-----e- 1.txt
# stat 1.txt |tail -3 --用cat命令访问这个文件,再用此命令查看access time,会发现不再变化
Access: 2014-07-17 11:12:58.589838878 +0800
Modify: 2014-07-17 11:12:58.589838878 +0800
Change: 2014-07-17 11:13:15.405701371 +0800
属性2: a
一个文件加了a属性,重定向覆盖以前的内容不允许,但追加内容是可以的(可用于比如日志文件的场景)
# lsattr 1.txt
-----a-------e- 1.txt
# echo 456 > 1.txt
bash: 1.txt: Operation not permitted
# echo 456 >> 1.txt
属性3: i
# chattr -a 1.txt
# chattr +i 1.txt --加了i属性,此文件不可被修改,不能重命名,不能删除,不能改变内容
总结:文件的权限(mode,permission)为r,w,x,s,t;文件的属性(attributes)为A,a,i等;以后学的selinux就类似在这些权限和属性的基础上再做扩展
用户的权限和管理