新睿云

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

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命令结构详解

内容由新睿云小编整理的互联网资源。

热门标签
new year
在线咨询
咨询热线 400-0505-565
投诉与建议
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待