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命令結構詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM