• linux CentOS 权限问题修复(chmod 777 -R 或者chmod 755 -R问题修复)


    我个人曾经有一次经历:

    就是在修改文件夹权限的时候,本来该执行:

    #chmod 777 -R ./

    结果我漏掉了那个".";执行的命令是chmod 777 -R /。 这个命令一定慎用,否则容易酿成大错。

    结果就出大问题了。系统崩溃。

    解决办法:

    到正常的文件系统中获取一下权限列表。

    #getfacl -R / > /tmp/acl.bak

    解释下这条命令:getfacl就是获取权限列表命令,-R是遍历,/ 这个表示或者整个根目录权限。如果你单独某个目录有权限问题例如bin. 那这里可以换成 getfacl -R /bin > /tmp/acl.bak. ">" 这个符号就是写入 。后面是路径

    上面那个做好之后把acl.bak拷贝到你现在的系统上;

    执行:

    #setfacl --restore acl.bak

    然后就大功告成了。这个可以解决各种权限问题 。

    chmod -R 777 的3种补救办法,附有linux chmod命令语法和结构详解

    作者/来源:新睿云小编 发布时间:2019-12-05

    有很多新手误操作 chmod -R 777,导致系统中的大部分服务以及命令无法正常使用。新睿云为大家整理了3种chmod -R 777的补救办法,还有linux chmod命令的详解。

    chmod命令可以改变权限目录和文件权限,-R是目录下所有文件,777是高权限(读、写、执行),

    chmod -R 777 意思就是将当前目录及目录下所有文件都给予777权限

    这个在服务器里不能随便敲的,不能在根目录下进行此命令,因为有些进程是指定权限(如755、700...)才能运行的...所以会出错

    一、chmod -R 777补救办法

    1、chmod -R 777补救办法1——根目录执行chmod -R 777 / 的补救方法

    ch /etc/

    chmod 644 passwd group shadow

    chmod 400 gshadow

    cd ssh

    chmod 600 moduli ssh_host_dsa_key ssh_host_key ssh_host_rsa_key

    chmod 644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub

    chmod 640 ssh_config

    然后尝试使用ssh登录,正常。

    如果使用普通用户登录,使用su - 切换root会出现以下错误:

    root "su cannot set groups"

    这是因为su必须有s权限才能预读取root的相关配置,需要使用如下命令:

    chmod u+x `which su`

    然后就可以进入系统了。

    找一台干净的机器,把系统的权限导出,然后在导入本机

    在干净的机器上执行:getfacl -R / > ./linux.chmod.bak

    在本机上执行:setfacl --restore=/root/linux.chmod.bak

    重启服务器使权限生效

    2、chmod -R 777补救办法2——执行chmod -R 777 / 补救

    执行后千万不要退出当前窗口!!!

    在自己的虚拟机上设置某个站的权限的时候,原来应该是chmod -R 777 ./* 结果少按了个点,执行了chmod -R 777 /* 因为执行时间超出自己的预想范围赶紧按下CTRL+C,可惜晚了,看下了/etc目录下的东西,全部都是777状态,立马开另一个终端尝试登陆,已经登录不上了!

    原先执行的窗口还可以操作,于是找资料看看有没有解决方法,要是在机房生产机犯这样低级的错误,总不能重装吧。linux没这么脆弱。

    ssh登录不上,应该跟passwd、group、shadow、ssh这几个文件扯上关系而已,开了另一台linux查看权限,并在错误的机器上修改成对应的权限:

    cd /etc

    chmod 644 passwd group shadow

    chmod 400 gshadow

    cd ssh

    chmod 600 moduli ssh_host_dsa_key ssh_host_key ssh_host_rsa_key

    chmod 644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub

    chmod 640 sshd_config

    chmod 700 /var/empty/sshd

    然后尝试ssh登录,ok正常,不过没办法切换成root用户

    su -

    root “su: cannot set groups: "

    因为su必须有s权限才能预读取root的相关配置:

    chmod u+s `which su`

    完成之后就可以进去系统慢慢折腾了。

    找一台linux系统(尽量越干净越好),把系统的权限导出,然后再导入到本机。

    在好的机器上执行

    getfacl -R / > ./linux.chmod.bak

    然后通过ftp或者rz命令上传到要修复的机子上

    执行:

    setfacl --restore=/root/linux.chmod.bak

    执行这个后需要重启机器才会替换权限(真够麻烦,要是线上机器怎么可以随便重启,实际上这个时候机器是可以正常访问,只是安全方面没保证)

    执行前,写个脚本让它在开机后执行,万一替换的脚本有问题,至少还能登录ssh。没错,就是把上面的命令写成脚本放在放在rc.local里面延迟执行。我放在/root/下

    cat sshtmp.sh

    #----------start----------

    #!/bin/bash

    sleep 300

    cd /etc

    chmod 644 passwd group shadow

    chmod 400 gshadow

    cd ssh

    chmod 600 moduli ssh_host_dsa_key ssh_host_key ssh_host_rsa_key

    chmod 644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub

    chmod 640 sshd_config

    chmod 700 /var/empty/sshd

    chmod u+s `which su`

    #-----------------end----------

    放到开机启动

    echo '/root/sh/sshtmp.sh &' >>/etc/rc.local

    然后reboot 吧。

    重启后如果能正常登录系统,可以先把sshtmp.sh 的进程kill掉,并去掉/etc/rc.local里面脚本。然后查看权限有没有正常。

    3、chmod -R 777补救办法3——Ubuntu 执行chmod -R 777 / 挽救方法

    怎么会有堪比rm -rf /*这样神奇的命令,本想着把当前目录下的权限改为777,没想到把整个/目录下全设成777了,直觉告诉我好像哪里有些不对劲,好在一顿折腾最终弄好了,应该没啥大问题,嗯目前是这样,能够正常使用。

    具体做法就是拿一个启动盘(不是重装系统,虽然重装是网上大多数的建议,我当时也差点重装,不过抱着侥幸的心理试了试结果就好了),进入启动盘点击Try Ubuntu然后进入界面,打开Terminal,一般会自动挂载物理机上所有的分区,找到损坏系统的/目录然后再终端打开(昨天光顾着修复了,也没留个图做个纪念),然后使用Sudo chmod ...命令将/下所有的目录改为正常系统的权限,巧的是我有一台云服务器(不过不是Ubuntu,是Centos,当时也抱着死马当活马医的心态),并且服务器上也装了可道云(免费版,当然也可以用命令行),按照图中显示的权限,一个一个改就行了,然后我还将/etc/ssh里的文件按照正常系统的权限改了下。

    还执行过这两个命令:

    cd /etc

    chmod 644 passwd group shadow

    chmod 400 gshadow

    其他的就没什么问题了,然后重启就能正常开机了(万幸),其他问题就可以问度娘解决了(反正都能正常进入系统了,其他都不是啥大问题),当然我这方法也不保证能够通用,只是将我的经验分享一下,万一能帮助有需要的你呢。

    二、linux chmod命令的详解

    chmod是一个计算机函数,功能是改变文件的读写许可设置,如果改变成功返回0,否则返回-1,函数原型是int chmod( const char *filename, int pmode );。

    1、Linux chmod命令基础解释

    chmod命令是linux上用于改变权限的命令,用于变更文件或目录的权限。通过修改文件或目录权限可以让指定的人对文件可读、可写、可运行,极大地保证了数据的安全性。在UNIX系统家族里,文件或目录权限的控制分别以读取,写入,执行3种一般权限来区分,另有3种特殊权限可供运用,再搭配拥有者与所属群组管理权限范围。您可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果您对符号连接修改权限,其改变会作用在被连接的原始文件。

    ①权限范围的表示法如下:

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

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

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

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

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

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

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

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

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

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

    ③语法:

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

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

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

    ④选项说明:

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

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

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

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

    --help 在线帮助。

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

    --version 显示版本信息。

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

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

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

    2、Linux chmod命令的常用语法

    命令名称: chmod

    执行权限: 所有用户

    功能描述: 改变文件或目录权限

    语法: 第一种方法 chmod [{ugoa}{+-=}{rwx}] [文件或目录]

    备注: u:所有者 g:所属组 o:其他人 a:所有人

    +:为用户增加权限 -:为用户减少权限 =:为用户赋予权限

    r:读权限 w:写权限 x:执行权限

    语法:第二种方法 chmod -R [mode=421] [文件或目录]←(这种方法用的比较多)

    备注:

    r 代表读,w 代表写,x 代表执行,

    如果可读,权限是二进制的100,十进制是4;

    如果可写,权限是二进制的010,十进制是2;

    如果可运行,权限是二进制的001,十进制是1;

    -R 递归修改(就是将嵌套在很多文件夹中的文件权限修改了,如果没有这个,只能到指定的文 件夹下进行修改)

    具备多个权限,就把相应的 4、2、1 相加就可以了:

    若要 rwx 则 4+2+1=7

    若要 rw- 则 4+2=6

    若要 r-x 则 4+1=5

    若要 r-- 则 =4

    若要 -wx 则 2+1=3

    若要 -w- 则 =2

    若要 --x 则 =1

    若要 --- 则 =0

    范例: chmod 777 /etc/xinruiyun 将xinruiyun这个文件夹权限改为对所有用户可读,可写,可执行

    chmod 775 /etc/zhishiku 将zhishiku这个文件夹权限改为其他用户不可读

    3、linux chmod命令结构详解

    在Linux中输入ll,会出现指定目录下文件/目录的详细信息,本文重点讲解权限部分,也就是下图中红色框中的部分。

    chmod命令结构的10个字符

    chmod命令结构的10个字符

    详解下图:权限一共是10个字符,第1个字符分为1组,后面9个字符分为3组。

    第1个字符有两种情况:如果是“d”则代表这是一个文件夹,如果是“—”代表这是一个文件;

    第2、3、4个字符:这3个字符共同代表的是文件的拥有者,可以用u来表示,拥有四个权限:r:读权限 , w:写权限,x:执行权限,—:无权限;

    第5、6、7个字符:这3个字符代表的是文件所属群组,可以用g来表示,拥有四个权限:r:读权限 , w:写权限,x:执行权限,—:无权限;

    第8、9、10个字符:这3个字符代表的是除拥有者和所属群组之外的其他所有的用户,可以用o来表示,拥有四个权限:r:读权限 , w:写权限,x:执行权限,—:无权限。

    注意:后面9个字符除了u,g,o外,还有一个a,代表了所有用户。

    chmod命令结构详解

    chmod命令结构详解

  • 相关阅读:
    nodeJS + webStrome
    js获取浏览器窗口属性
    理解JavaScript中的arguments,callee,caller,apply
    Java对象及对象引用变量
    Transform-style和Perspective属性
    线程同步的几种方式
    SQL高级查询——50句查询(含答案)
    接口、抽象类的区别与共同点
    JAVA异常架构图及常见面试题
    【转】JVM介绍
  • 原文地址:https://www.cnblogs.com/zgq123456/p/14844820.html
Copyright © 2020-2023  润新知