- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
linux在root用戶下無法使用chattr命令的解決辦法
歡迎來到藍隊云技術小課堂,每天分享一個技術小知識。
在解決linux在root用戶下無法使用chattr命令之前我們先簡單了解下什么是chattr命令。chattr命令用于更改文件或目錄的屬性,包括不可修改屬性、同步屬性、追加屬性、無盡屬性、壓縮屬性、無盡屬性、不可刪除屬性等。
chattr命令只能由超級用戶或文件的所有者使用。
下面我們介紹下chattr命令的使用。
1、給文件設置版本
-v參數設置版本信息只在extX(ext4…)文件系統下支持,xfs文件系統設置文件版本時會報錯對設備不適當的 ioctl 操作。
# chattr -v 2 -V hi.txt
chattr 1.41.12 (17-May-2010)
hi.txt的標志被設為 -------------e-
Version of hi.txt set as 2
# chattr -v 2 -V a.txt
chattr 1.42.9 (28-Dec-2013)
a.txt的標志被設為 ----------------
Version of a.txt set as 2
chattr: 對設備不適當的 ioctl 操作 while setting version on a.txt
2、遞歸設置目錄下文件屬性
# chattr -R -a -V level1-1/
chattr 1.42.9 (28-Dec-2013)
level1-1/的標志被設為 ----------------
level1-1//level2-1的標志被設為 ----------------
level1-1//level2-2的標志被設為 ----------------
level1-1//level2-2/ccc.txt的標志被設為 ----------------
level1-1//level2-3的標志被設為 ----------------
level1-1//bb.txt的標志被設為 ----------------
3、使用-V參數顯示指令執行過程
# chattr -R -a -V level1-1
chattr 1.42.9 (28-Dec-2013)
level1-1的標志被設為 ----------------
level1-1/level2-1的標志被設為 ----------------
level1-1/level2-2的標志被設為 ----------------
level1-1/level2-2/ccc.txt的標志被設為 ----------------
level1-1/level2-3的標志被設為 ----------------
level1-1/bb.txt的標志被設為 ----------------
4、增加一個屬性
# lsattr a.txt
---------------- a.txt
# chattr +i a.txt
# lsattr a.txt
----i----------- a.txt
5、刪除一個屬性
# chattr -i -V a.txt
chattr 1.42.9 (28-Dec-2013)
a.txt的標志被設為 ----------------
# lsattr a.txt
---------------- a.txt
6、指定文件屬性
??使用=指定文件的屬性,實際上文件支持的各屬性之間有部分是沖突的,所以很少用到=參數來指定屬性,常用±參數來增加或者減少一個屬性。
# chattr =iaA -V a.txt
chattr 1.42.9 (28-Dec-2013)
a.txt的標志被設為 ----ia-A--------
三、chattr命令語法及參數說明
1、命令語法
#chattr [參數] 文件或者目錄
#chattr ±=[屬性] 文件或者目錄
#chattr [參數] [屬性] 文件或者目錄
2、參數說明
參數 參數說明
-R 遞歸處理,將指令目錄下的所有文件及子目錄一并處理
-v<版本編號> 設置文件或目錄版本,此參數只適用于extx文件系統
-V 顯示指令執行過程
-f 抑制大多數錯誤信息
+<屬性> 開啟文件或目錄的該項屬性
-<屬性> 關閉文件或目錄的該項屬性
=<屬性> 指定文件或目錄的該項屬性
3、屬性說明
當前主流Linux內核中實現的ext2、ext3和ext4文件系統不支持“c”、“s”和“u”屬性。實際上這些屬性中常用只有a和i,追加屬性長用于日志文件,保證日志文件不會被刪除,只允許追加日志記錄;i屬性用于鎖定重要的配置文件,避免誤刪除或者修改等。
屬性 屬性說明
a 該屬性只允許在文件末尾添加數據,不允許修改或刪除文件的內容。
A 設置該屬性時,文件atime時間不再更新。
c 默認將文件或目錄進行壓縮。
C 設置了“C”屬性的文件將不會進行寫時復制更新。只有在執行寫時復制的文件系統上才支持此標志
d 當進行文件系統備份時,不備份該文件或目錄。
D 當修改具有“D”屬性集的目錄時,更改將同步寫入磁盤;這相當于應用于文件子集的“dirsync”裝載選項。要求內核版本2.5.19以上
i 禁止對文件或目錄進行任何修改操作,包括修改、刪除、重命名等。
j 允許文件系統支持日志功能,只在ext3、ext4環境下支持。
s 當文件被刪除時,將其內容清零。
S 當修改具有“S”屬性集的文件時,更改將同步寫入磁盤;這相當于應用于文件子集的“sync”裝載選項
t 讓文件系統支持尾部合并(tail-merging),只有ext2和ext3支持尾部合并
T 具有“T”屬性的目錄將被視為目錄層次結構的頂部。這是對ext3和ext4使用的塊分配器的一個提示。
u 刪除具有“u”屬性集的文件時,將保存其內容。這允許用戶請求取消刪除。
在學習linux操作系統的時候,想用chattr來修改某一個文件的權限時,突然爆出了以下這個錯誤:
bash /usr/bin/chattr permission denied
考慮到可能是普通用戶權限不夠,我又切換到了root用戶。按理說root用戶的權限是最高的了,結果還是爆出上面那個錯誤。
查閱了國內的相關博客,發現沒有解決這一問題的,于是FQ在外網上找到了解決辦法。
以下是鏈接
# chattr -l-bash: /usr/bin/chattr: Permission denied
# chattr -i chattr
-bash: /usr/bin/chattr: Permission denied
# chmod +x chattrchmod: changing permissions of `chattr': Operation not permitted
為了恢復chattr的功能,解決辦法如下:
# cp /usr/bin/chattr /usr/bin/chattr2
# chmod 755 /usr/bin/chattr2
# chattr2 -i /usr/bin/chattr
# chmod 755 /usr/bin/chattr
# ls -la /usr/bin/chattr
# lsattr /usr/bin/chattr
-rwxr-xr-x 1 root root 9664 2010-08-17 01:29 /usr/bin/chattr
-----------------e- /usr/bin/chattr
大致思路是:復制chattr的副本chattr2,用chmod來修改chattr2的權限(號碼為755)。然后反過來使用chattr2打開chattr的權限,再用chmod修改。最后chattr就能使用了。
通過這個問題的解決,讓我體會對一句話有了深刻的體會:inux一切皆文件
補充關于權限:i和a的說明
i:不可修改權限 例:chattr u+i filename 則filename文件就不可修改,無論任何人,如果需要修改需要先刪除i權限,用chattr -i filename就可以了。查看文件是否設置了i權限用lsattr filename。
a:只追加權限, 對于日志系統很好用,這個權限讓目標文件只能追加,不能刪除,而且不能通過編輯器追加。可以使用chattr +a設置追加權限。
藍隊云官網上擁有完善的技術支持庫可供參考,大家可自行查閱,更多技術問題,可以直接咨詢。同時,藍隊云整理了運維必備的工具包免費分享給大家使用,需要的朋友可以直接咨詢。
更多技術知識,藍隊云期待與你一起探索。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP