問題解決:centos7 root su "no permission to execute the command"

問題場景

在客戶提供的服務器上面,使用root用戶,想跳轉到其他用戶,比如su - test。會提示以下問題:

no permission to execute the command

在這裏插入圖片描述

問題環境

軟件 版本
Centos 7

問題原因

一般有以下幾種原因會導致這種情況:
在這裏插入圖片描述

沒有文件的執行權限

我們使用命令ls -l $file$file是我們要執行的腳本。如下圖所示
在這裏插入圖片描述
從上圖可以看到,該文件是有執行權限的,而且屬於root羣組的。當然,我們這裏不是屬於這種情況。那麼我們可以嘗試一下,接下來請來看看:

嘗試

  1. 新建test.sh,並編寫簡單語句,如下:

    #!/bin/bash
    echo test
    
  2. 使用命令sh test.sh,結果如下:
    在這裏插入圖片描述

  3. 是不是很驚訝,是可以執行的?怎麼不是我之前所說的呢???
    在這裏插入圖片描述
    彆着急,我們可以執行以下命令./test.sh,結果如下:
    在這裏插入圖片描述

  4. 雖然直接用sh $file也可以執行腳本,但是我們希望執行腳本是直接腳本名就可以了。所以按照下面步驟,先將文件權限設置爲755,然後再執行。從下圖可以看到,是可以執行的。
    在這裏插入圖片描述
    在這裏插入圖片描述

被系統的安全模塊所限制

一般系統安裝的默認情況下,所有用戶都默認可以執行su命令的。但是這就有個隱患,假如用戶反覆嘗試其他用戶(比如root)的登錄密碼,而這存在一定的安全風險的。所以,一般對於一些程序,都會事先進行身份和權限的驗證,判斷是否可以通過,通過才能執行,比如su等。而系統一般會引入PAM(Pluggable Authentication Modules)來進行身份或權限的驗證。詳細的信息可以百度一下PAM,或者點擊本文最下面的參考鏈接
在這裏插入圖片描述

解決方案

修改執行文件的權限

如果是文件未有執行權限,可以使用命令chmod 755 $file進行賦權。可以參考我上個環節的嘗試步驟所寫。

使用sudo命令進行提權使用

我們可以使用sudo命令進行提權執行,如使用命令:

sudo su - test

從我們下圖的兩個對比可以看出,使用sudo提權成功。
在這裏插入圖片描述
在這裏插入圖片描述

結果

在本文中,主要是使用了sudo提權解決了權限問題。
在這裏插入圖片描述

總結

針對權限不足,本文提出了兩種解決途徑。當然,畢竟不是專職運維,只是在遇到問題的過程中,記錄下了問題,並去嘗試解決。所以,應該有更多的解決問題的方式。這就得靠各位讀者了。如果有更好的解決方案,可以留言告知,謝謝!
在這裏插入圖片描述

參考鏈接

Linux下PAM模塊學習總結
CentOS 7系統安全之用戶切換與提權

隨緣求贊

如果我的文章對大家產生了幫忙,可以在文章底部點個贊或者收藏;
如果有好的討論,可以留言;
如果想繼續查看我以後的文章,可以左上角點擊關注
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章