Linux系统误操作之-文件权限介绍和恢复分享
2016-04-17 19:14
465 查看
1. Linux文件权限结构
每个Linux用户都有它所属的用户组, 用户或用户组构成了Linux文件或目录的权限访问控制. 每个Linux文件或目录也都有它所属的用户或组. Linux通过文件上所设置的权限信息,来控制当前访问用户可以针对该文件所执行的操作。
Linux的权限主要有3类,分别是:
r(数字4): 读取文件的权限
w(数字2): 更新文件的权限
x(数字1): 可执行文件的执行权限,该权限包含了读权限
如在Linux中执行ls -l 命令看到的信息:
[root@slave01 default]# ls -l
drwxr-xr-x. 2 root root 4096 Apr 6 23:45 bin
-rwxrw-r-x. 1 test group1 3339 Apr 11 2015 COPYRIGHT
上面文件的权限位详细信息, 以COPYRIGHT为例:
第一个字符: d 指示这是一个目录(bin), - 指示这是一个文件(COPYRIGHT)
第一段权限位(红色部分): 指示该文件或目录所属用户具有的权限(如: COPYRIGHT文件所属用户test具有该文件的读、写、执行权限)
第二段权限位(蓝色部分): 指示该文件或目录所属用户组下的用户所具有的权限(COPYRIGHT文件所属用户组group1下的所有用户具有该文件的读、写权限
第三段权限位(绿色部分): 指示其它所有用户具有文件或目录的权限(如其它所有用户具有COPYRIGHT文件的读、执行权限)
2. Linux文件权限属主和权限的更改
chown:更改文件的属主和用户组命令,如:
chown root:root COPYRIGHT # 将COPYRIGHT文件的属主改成root, 所属用户组也改为root,前一个root表示用户,后一个root是指用户组名
chmod:更改文件的权限命令,Linux的权限可以使用r,w,x进行显示授权,如:
chmod u-w COPYRIGHT # 将文件COPYRIGHT文件的所属用户权限减掉 写 权限
其中:
第一位u位可以是: u(所属用户), g(所属用户组) , o(其它用户), a(所有用户)
中间的-号可以是: +(增加权限), -(减少权限)
最后的w位可以是: r(读), w(写), w(执行)
再如:
chmod a+w COPYRIGHT #将所有用户增加写权限
另外一种权限授予方式是使用数字进行授权,只需要将希望授予的权限信息对应的数字简单相加即可,如:
chmod 765 COPYRIGHT # 将COPYRIGHT授予 rwxrw-r-x:用户(读、写、执行),用户组(读、写),其它(读、执行)的权限
其中:
第一位7: 是读(4),写(2), 执行(1)相加的和
第二位6: 是读(4),写(2)相加的和
第二位5: 是读(4),写(1)相加的和
chmod和chown命令都可以添加-R参数,表示将该目录及所有子目录和文件都进行更改,如:
chmod -R 765 bin
这种使用数字进行授权的方式非常简单,而且可以一次性授予三类用户的权限, 所以在实际的工作中有非常广泛的使用,也可以说在实际操作中,都是采用这种数字的方式进行授权. 而且很多人为了方便的避免权限问题的干扰,会经常直接给予777的权限,这种方式虽然简单、快捷、有效。但效率并不代表正确性。而且它很可能会让你在接下来的一段时间里都生活在无尽的悔恨当中。
3. Linux中的特殊权限
在一些程序中,程序在运行时对文件的权限有非常严格和特殊的要求,比如Oracle程序在运行时就对$ORACLE_HOME/bin/oracle这个运行的程序文件权限有特殊要求,比如使用ls -l 命令,可以看到如下权限信息:
[oracle@oradb bin]$ ls -l oracle
-rwsr-s--x 1 oracle asmadmin 232399473 Jan 27 2015 oracle
这里可以看到oracle执行文件的权限信息中带有s标志位,而不是rwx或r-x, 这是因为该文件的权限位在原来的可执行权限x之上,又增加了一个s权限,它是指:用户在执行该文件时,可以临时具有root用户的权限.
s 权限位可以设置在文件属主或所属用户组位置上,如:
chmod u+s oracle #在属主位设置s权限
chmod g+s oracle #在所属组位设置s权限
另外采用数字设置方式,是在原来的3位数据前增加4(属主), 2(属组) 或6(同时设置属主或属组),如:
chmod 4755 oracle #在oracle文件的属主位设置s权限
4.Linux中的文件权限恢复
由于某些同学的特殊爱好,比如喜欢边看电影边操作服务器,或者一时粗心,把chmod -R 777 命令应用在了服务器的Oracle安装目录或其它重要目录,这可是要命的,即使Oracle可以运行起来,也就慢慢等着无尽的ORA-600错误吧。这时候最好的操作是恢复文件权限,但是首先需要告诉读者的是:不可能从现有系统恢复文件权限。只有从其它正常服务器,把文件权限都复制下来,然后恢复到错误的服务器,但是Oracle安装目录那么多文件,不可能一个一个去看吧,等文件权限恢复了,你都可以带老花镜了。
所以就需要一个脚本可以快速的复制正常服务器的脚本,这就是本文的最终目标,也是工作中常会用到的(没办法,小错是不断的),在Linux系统 中,可以使用getfacl, setfacl命令来进行权限的备份和恢复,使用方式如:
getfacl -R /directoryOrFile > permis.facl #备份目录或文件的权限到permis.facl
setfacl --restore=permis.facl #从permis.facl文件恢复文件中记录的权限信息
除了系统自带的命令,下面分享一个基于Shell的权限复制脚本,脚本会生成chown,chmod命令到sh脚本,直接在目录服务器上执行即可:
每个Linux用户都有它所属的用户组, 用户或用户组构成了Linux文件或目录的权限访问控制. 每个Linux文件或目录也都有它所属的用户或组. Linux通过文件上所设置的权限信息,来控制当前访问用户可以针对该文件所执行的操作。
Linux的权限主要有3类,分别是:
r(数字4): 读取文件的权限
w(数字2): 更新文件的权限
x(数字1): 可执行文件的执行权限,该权限包含了读权限
如在Linux中执行ls -l 命令看到的信息:
[root@slave01 default]# ls -l
drwxr-xr-x. 2 root root 4096 Apr 6 23:45 bin
-rwxrw-r-x. 1 test group1 3339 Apr 11 2015 COPYRIGHT
上面文件的权限位详细信息, 以COPYRIGHT为例:
第一个字符: d 指示这是一个目录(bin), - 指示这是一个文件(COPYRIGHT)
第一段权限位(红色部分): 指示该文件或目录所属用户具有的权限(如: COPYRIGHT文件所属用户test具有该文件的读、写、执行权限)
第二段权限位(蓝色部分): 指示该文件或目录所属用户组下的用户所具有的权限(COPYRIGHT文件所属用户组group1下的所有用户具有该文件的读、写权限
第三段权限位(绿色部分): 指示其它所有用户具有文件或目录的权限(如其它所有用户具有COPYRIGHT文件的读、执行权限)
2. Linux文件权限属主和权限的更改
chown:更改文件的属主和用户组命令,如:
chown root:root COPYRIGHT # 将COPYRIGHT文件的属主改成root, 所属用户组也改为root,前一个root表示用户,后一个root是指用户组名
chmod:更改文件的权限命令,Linux的权限可以使用r,w,x进行显示授权,如:
chmod u-w COPYRIGHT # 将文件COPYRIGHT文件的所属用户权限减掉 写 权限
其中:
第一位u位可以是: u(所属用户), g(所属用户组) , o(其它用户), a(所有用户)
中间的-号可以是: +(增加权限), -(减少权限)
最后的w位可以是: r(读), w(写), w(执行)
再如:
chmod a+w COPYRIGHT #将所有用户增加写权限
另外一种权限授予方式是使用数字进行授权,只需要将希望授予的权限信息对应的数字简单相加即可,如:
chmod 765 COPYRIGHT # 将COPYRIGHT授予 rwxrw-r-x:用户(读、写、执行),用户组(读、写),其它(读、执行)的权限
其中:
第一位7: 是读(4),写(2), 执行(1)相加的和
第二位6: 是读(4),写(2)相加的和
第二位5: 是读(4),写(1)相加的和
chmod和chown命令都可以添加-R参数,表示将该目录及所有子目录和文件都进行更改,如:
chmod -R 765 bin
这种使用数字进行授权的方式非常简单,而且可以一次性授予三类用户的权限, 所以在实际的工作中有非常广泛的使用,也可以说在实际操作中,都是采用这种数字的方式进行授权. 而且很多人为了方便的避免权限问题的干扰,会经常直接给予777的权限,这种方式虽然简单、快捷、有效。但效率并不代表正确性。而且它很可能会让你在接下来的一段时间里都生活在无尽的悔恨当中。
3. Linux中的特殊权限
在一些程序中,程序在运行时对文件的权限有非常严格和特殊的要求,比如Oracle程序在运行时就对$ORACLE_HOME/bin/oracle这个运行的程序文件权限有特殊要求,比如使用ls -l 命令,可以看到如下权限信息:
[oracle@oradb bin]$ ls -l oracle
-rwsr-s--x 1 oracle asmadmin 232399473 Jan 27 2015 oracle
这里可以看到oracle执行文件的权限信息中带有s标志位,而不是rwx或r-x, 这是因为该文件的权限位在原来的可执行权限x之上,又增加了一个s权限,它是指:用户在执行该文件时,可以临时具有root用户的权限.
s 权限位可以设置在文件属主或所属用户组位置上,如:
chmod u+s oracle #在属主位设置s权限
chmod g+s oracle #在所属组位设置s权限
另外采用数字设置方式,是在原来的3位数据前增加4(属主), 2(属组) 或6(同时设置属主或属组),如:
chmod 4755 oracle #在oracle文件的属主位设置s权限
4.Linux中的文件权限恢复
由于某些同学的特殊爱好,比如喜欢边看电影边操作服务器,或者一时粗心,把chmod -R 777 命令应用在了服务器的Oracle安装目录或其它重要目录,这可是要命的,即使Oracle可以运行起来,也就慢慢等着无尽的ORA-600错误吧。这时候最好的操作是恢复文件权限,但是首先需要告诉读者的是:不可能从现有系统恢复文件权限。只有从其它正常服务器,把文件权限都复制下来,然后恢复到错误的服务器,但是Oracle安装目录那么多文件,不可能一个一个去看吧,等文件权限恢复了,你都可以带老花镜了。
所以就需要一个脚本可以快速的复制正常服务器的脚本,这就是本文的最终目标,也是工作中常会用到的(没办法,小错是不断的),在Linux系统 中,可以使用getfacl, setfacl命令来进行权限的备份和恢复,使用方式如:
getfacl -R /directoryOrFile > permis.facl #备份目录或文件的权限到permis.facl
setfacl --restore=permis.facl #从permis.facl文件恢复文件中记录的权限信息
除了系统自带的命令,下面分享一个基于Shell的权限复制脚本,脚本会生成chown,chmod命令到sh脚本,直接在目录服务器上执行即可:
#!/bin/sh DIR=$1 if [ ! -d "$DIR" ]; then echo "$DIR does not exist" exit 0 fi RESULT_FILE=./permis.sh echo "" > $RESULT_FILE tree -fiaR --noreport -o permis.log $DIR cat permis.log|cut -d" 4000 " -f1| while read line do echo chown `stat -c "%U:%G" $line` $line >> $RESULT_FILE echo chmod `stat -c "%a" $line` $line >> $RESULT_FILE done这段脚本可以正常运行于Linux服务器,但对于HP-UNIX, Solaris系统这类默认不使用bash的服务器来说,执行是肯定不成功的,但是在工作中这些服务器都需要面临,所以需要一个可以在各个服务器间通用的脚本,Shell脚本是不行了,因此选取了在各个服务器上一般默认都会安装的prel脚本语言。这儿由于脚本较长,而且本篇篇幅也有点长了,况且能使用这类小机的场合越来越少,所以这儿就不把代码贴出来了,有需要的同学可以联系我。
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍