溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置

發(fā)布時間:2020-08-03 13:57:13 來源:網(wǎng)絡(luò) 閱讀:1084 作者:以安0622 欄目:開發(fā)技術(shù)

業(yè)務(wù)需求:收集項目需求信息,如操作系統(tǒng)日志、項目工程及項目工程日志、數(shù)據(jù)庫信息和數(shù)據(jù)。

環(huán)境:CentOS6.7   x86_64

程序流程:程序MyInfoCollector是一個信息采集程序,由另外一個進程MyMonitor守護執(zhí)行,MyInfoCollector程序收集信息不定,為避免后期新需求導(dǎo)致更改代碼,所以加入配置文件MyInfoCollector.xml,該配置文件配置執(zhí)行腳本路徑,程序運行自動調(diào)用腳本實現(xiàn)需求。


問題:My.sh:收集項目日志(MyInfoCollector.log),結(jié)果:成功!

System.sh:收集系統(tǒng)日志及數(shù)據(jù)庫日志(/var/log/messages*/var/log/mysqld.log),結(jié)果:無效。

用戶名:adz,普通用戶,adz用戶組,不考慮將adz賦予更高的權(quán)限。

 

思考:權(quán)限問題 (后面引發(fā)免密問題、切換root用戶問題、自啟終端問題、系統(tǒng)日志加入讀權(quán)限問題,sudo免加載終端問題)。

 

解決流程:

System.sh

#!/bin/bash

cp -fp /var/log/messages* ./
zip -r -j -p -m -8 System.zip ./messages*


執(zhí)行:

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置



【思路1:權(quán)限問題,加入sudo來處理】


System_root.sh

#!/bin/bash

sudo cp -fp /var/log/messages* ./
sudo zip -r -j -p -m -8 System.zip ./messages*


執(zhí)行:

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置


需要人機交互來輸入密碼,由于腳本是程序帶起,需要跳過輸入密碼的交互階段,需要解決免密問題

設(shè)置用戶部分工具sudo免密功能

切換為root,執(zhí)行vim /etc/sudoers或者visudo,加入行(箭頭處)

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置


執(zhí)行:

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置



成功?。。?/span>

此時,應(yīng)該可以解決問題了。

悲劇的是,程序帶起時仍然沒有看到壓縮包?。。??

 

【思路2:直接切換root用戶】

換個思路,切換root賬戶來處理

使用spawn expect轉(zhuǎn)換root用戶

需要安裝tcl+expect,安裝光盤中有

安裝:rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm expect-5.44.1.15-5.el6_4.x86_64.rpm


SwitchRoot.exp

#!/usr/bin/expect

MyPassword=123456

spawn su root

expect "password:"

send "${MyPassword}\r"

send "./System.sh"

interact

System.sh

#!/bin/bash

cp -fp /var/log/messages* ./
zip -r -j -p -m -8 System.zip ./messages*



該腳本手動執(zhí)行沒有問題,但是程序帶起時仍然無壓縮包生成。與上個思路最后的結(jié)果相同,不再附帶圖片

 

【思路3:自啟動終端】

既然手動執(zhí)行可以,程序帶起有問題,難道是程序執(zhí)行環(huán)境有問題?

不多說,手動執(zhí)行MyInfoCollector : cat /proc/pid/environ > environ_self

MyMonitor帶起執(zhí)行MyInfoCollector : cat proc/pid/environ > environ_auto

由于東西太多,暫不貼圖了,發(fā)現(xiàn)手動執(zhí)行時有gnome相關(guān)環(huán)境,帶起執(zhí)行時沒有這個gnome環(huán)境,自建一個shell來執(zhí)行腳本?開干!

設(shè)置啟動終端功能

testShell.sh

#!/bin/bash

gnome-terminal -e 'bash -c "bash System_root.sh"'

System_root.sh

#!/bin/bash

sudo cp -fp /var/log/messages* ./
sudo zip -r -j -p -m -8 System.zip ./messages*

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置


手動執(zhí)行沒問題! 自啟動直接顯示錯誤了,(此處后期加入了錯誤日志輸出,可以看到gnome-terminal執(zhí)行結(jié)果日志為“無法處理參數(shù):無法打開顯示,返回值為1”)

此路不通!

【思路4:無權(quán)限文件加讀權(quán)限】

系統(tǒng)默認情況下的messages*只有root用戶有讀寫權(quán)限,其他用戶沒有讀權(quán)限,需要設(shè)置一下,起初以為只要將/var/log文件夾設(shè)置為可讀即可,然而并不然,其本來就可讀。那就只能設(shè)置具體的日志權(quán)限了。

系統(tǒng)初始文件情況:

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置


設(shè)置文件日志可讀

Root賬戶打開/etc/logrotate.d/syslog:將紅色箭頭部分插入文件:

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置

刪除/var/log/messages*

重啟rsyslog服務(wù):

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置


重啟后可以看到日志支持普通用戶讀取了

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置



結(jié)果可喜,當前需求解決,但是mysqld.log如何處理,如果后期有其他文件也需要怎么處理,顯然該方案只能解決一時之需。不可取。

 

【思路5sudo免加載終端問題】

思路4的局限性而不被采用。此時恍然大悟,求助于shell的輸出重定向功能,看看為何不能執(zhí)行,將返回值也查看下。

采用腳本System_root.sh ,內(nèi)部將標準錯誤也一同輸出到界面才發(fā)現(xiàn)問題:

sudo:抱歉,您必須擁有一個終端來執(zhí)行 sudo

原來sudo執(zhí)行時默認需要終端。

設(shè)置普通用戶adzsudo不使用默認值,在Default requiretty下再加一行Default:用戶名 !requiretty

CentOS普通用戶拷貝無權(quán)限訪問的文件的腳本實現(xiàn)及其配置


目前采用此方案,尚未發(fā)現(xiàn)其他異常情況,如果存在,稍后更新

【思路6:其他思路】

為何mysql用戶將mysqld.log寫入操作系統(tǒng)路徑,是否使用了sudo,它有沒有參考性?

采取思路5是否有其他安全性需要處理,是否是最好的解決方式?

還有其他方式么?shell關(guān)于權(quán)限的處理剛接觸,寫的有些low了,有問題請指正。


 

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI