sudo命令:解決使用Linux命令行時出現的錯誤提示

你在使用 Linux 命令行時曾經獲得過「拒絕訪問(Permission denied)」的錯誤提示嗎?這多是由於你正在嘗試執行一個須要 root 權限的操做。例如,下面的截圖展現了當我嘗試複製一個二進制文件到一個系統目錄時產生的錯誤。html

sudo命令:解決使用Linux命令行時出現的錯誤提示

shell 的拒絕訪問linux

那麼該怎麼解決這個錯誤?很簡單,使用 sudo 命令。shell

sudo命令:解決使用Linux命令行時出現的錯誤提示

用 sudo 運行命令數據庫

用戶運行此命令後會被提示輸入他們(本身)的登陸密碼。一旦輸入了正確的密碼,操做將會成功執行。緩存

毫無疑問,sudo 是任何在 Linux 上使用命令行的人都必須知道的命令。可是,爲了更負責、更有效地使用該命令,你仍是要知道一些相關(及深刻)的細節。這正是咱們將會在這篇文章中討論的。安全

在咱們繼續以前,值得提一下的是,這篇文章所提到的全部命令指示都已經在 Ubuntu 14.04 LTS 下的 4.3.11 版 Bash 下經過測試。bash

什麼是 sudoide

正如大家大部分人所知道的,sudo 用來執行須要提高權限(一般是做爲 root 用戶)的命令。在這篇文章以前的簡介部分已經討論過這樣的一個例子。然而,若是你想的話,你能用 sudo 以其它(非 root )用戶運行命令。工具

這是由工具提供的 -u 命令行選項所實現的。舉個例子,以下例所展現的那樣,我(himanshu)嘗試將一個在其餘用戶(howtoforge)的 Home 目錄中的文件重命名,可是獲得一個「訪問拒絕」的錯誤。而後我加上 sudo -u howtoforge 後用一樣的「mv」命令,命令成功執行了:測試

sudo命令:解決使用Linux命令行時出現的錯誤提示

什麼是 sudo

任何人都能用 sudo 嗎?

不是。一個用戶要能使用 sudo ,應該在 /etc/sudoers 文件裏有一條跟該用戶相關的信息。下述摘自 Ubuntu 網站的一段能講得更清楚:

/etc/sudoers 文件控制了誰能以哪一個用戶的身份在哪一個機器上運行什麼命令,還能夠控制特別的狀況,例如對於特定的命令是否須要輸入密碼。這個文件由別名aliases(基本變量)和用戶標識user specifications(控制誰能運行什麼命令)組成。

若是你正在使用 Ubuntu,讓一個用戶能運行 sudo 命令很容易:你所須要作的就是把帳戶類型改爲管理員administrator。這可直接在 系統設置System Settings -> 用戶帳戶 User Accounts裏完成。

sudo命令:解決使用Linux命令行時出現的錯誤提示

sudo 用戶

首先解鎖該窗口:

sudo命令:解決使用Linux命令行時出現的錯誤提示

unlocking window

而後選擇你想改變用戶類型的用戶,而後將類型改爲管理員administrator。

sudo命令:解決使用Linux命令行時出現的錯誤提示

choose sudo accounts

然而,若是你不使用 Ubuntu,或者你的發行版沒有提供這個特性,你能夠手動編輯 /etc/sudoers 文件來實現此改變。要在文件中添加這樣的一行:

[user]    ALL=(ALL:ALL) ALL

無需贅言,[user] 應該用你想提高 sudo 權限的用戶的用戶名所代替。在這裏值得提到的一件重要的事情是,官方建議經過 visudo 命令編輯該文件 —— 你須要作的就是運行下述命令:

sudo visudo

爲了說清到底是怎麼一回事,這裏有段從 visudo 手冊裏的摘要:

visudo 以安全的模式編輯 sudoers 文件。visudo 鎖定 sudoers 文件以防多個編輯同時進行,提供基本的檢查(sanity checks)和語法錯誤檢查。若是 sudoers 文件如今正在被編輯,你將會收到一個信息提示稍後再試。

關於 visudo 的更多信息,前往這裏。

什麼是 sudo 會話

若是你常用 sudo 命令,你確定注意到過當你成功輸入一次密碼後,能夠不用輸入密碼再運行幾回 sudo 命令。可是一段時間後,sudo 命令會再次要求你的密碼。

這種現象跟運行 sudo 命令數目無關,跟時間有關。是的,sudo 默認在輸入一次密碼後 15 分鐘內不會再次要求密碼。15 分鐘後,你會再次被要求輸入密碼。

然而,若是你想的話,你能改變這種現象。用如下命令打開 /etc/sudoers 文件:

sudo visudo

找到這一行:

Defaults env_reset

sudo命令:解決使用Linux命令行時出現的錯誤提示

env_reset

而後在這行最後添加如下變量:

Defaults env_reset,timestamp_timeout=[new-value]

[new-value] 爲想要 sudo 會話持續的時間數。例如,設數值爲 40。

sudo命令:解決使用Linux命令行時出現的錯誤提示

sudo timeout value

若是你但願每次使用 sudo 命令時都要求輸入密碼,你能夠把這個變量賦值爲 0 。想要 sudo 會話永遠不過期,應賦值爲 -1。

注意將 timestamp_timeout 的值賦爲 「-1」 是強烈不推薦的。

sudo 密碼

你可能注意過,當 sudo 要求輸入密碼而後你開始輸入時,不會顯示任何東西 —— 甚至連常規的星號都沒有。雖然這不是什麼大問題,不過一些用戶就是但願顯示星號。

好消息是那有可能也很容易作到。全部你須要作的就是在 /etc/sudoers 文件裏將下述的行:

Defaults env_reset

改爲

Defaults env_reset,pwfeedback

而後保存文件。

如今,不管何時輸入 sudo 密碼,星號都會顯示。

sudo命令:解決使用Linux命令行時出現的錯誤提示

hide the sudo password

一些重要的 sudo 命令行參數

除了 -u 命令行參數(咱們已經在這篇教程的開始部分討論過了),還有其餘重要的 sudo 命令行參數值得注意。在這部分,咱們將會討論其中一些。

-k 參數

考慮下這種狀況:輸入密碼後你剛剛運行了幾個 sudo 驅動的命令。如今,如你所知,sudo 會話默認保持 15 分鐘。假設在這會話期間,你須要讓某些人訪問你的終端,但你不想讓他們可使用 sudo ,你將會怎麼作?

還好,有 -k 命令行參數容許用戶取消 sudo 權限。這是 sudo 幫助頁面(man page)對此的解釋:

-k, --reset-timestamp

不帶任何命令使用時,撤銷用戶緩存的憑據。換句話講,下一次使用 sudo 將會要求輸入密碼。使用這個參數不須要密碼,也能夠放到一個 .logout 文件中來撤銷 sudo 權限。

當與一個命令,或者一個可能須要密碼的操做一塊兒用時,這個參數將會致使 sudo 忽略用戶緩存的憑據。結果是 sudo 要求輸入密碼(若是這是被安全策略所要求的),並且不會更新用戶緩存的憑據。

-s 參數

有時你的工做要求你運行一堆須要 root 權限的命令,你不想每次都輸入密碼。你也不想經過改變 /etc/sudoers 文件調整 sudo 會話的過時時限。

這種狀況下,你能夠用 sudo 的 -s 參數。這是 sudo 幫助頁面對此的解釋:

-s, --shell

若是設置了 SHELL 環境變量或者調用用戶的密碼數據庫指定了 shell,就運行該 shell 。若是指定了命令,命令將會經過 shell 的 -c 參數將命令傳遞給該 shell 執行。若是沒有指定命令,會執行一個交互式 shell。

因此,基本上這命令參數作的是:

啓動一個新的 shell - 至因而哪個 shell,參照 SHELL 環境變量賦值。若是 $SHELL 是空的,將會用 /etc/passwd 中定義的 shell。
若是你用 -s 參數傳遞了一個命令名(例如 sudo -s whoami),實際執行的是 sudo /bin/bash -c whoami。
若是你沒有嘗試執行其餘命令(也就是說,你只是要運行 sudo -s),你將會獲得一個有 root 權限的交互式的 shell。

請記住,-s 命令行參數給你一個有 root 權限的 shell,但那不是 root 環境 —— 仍是執行的你本身的 .bashrc 。例如,在 sudo -s 運行的新 shell 裏,執行 whoami 命令仍會返回你的用戶名,而非 root 。

-i 參數

-i 參數跟咱們討論過的 -s 參數相像。然而,仍是有點區別。一個重要的區別是 -i 給你的是 root 環境,意味着你的(用戶的).bashrc 被忽略。這就像沒有顯式地用 root 登陸也能成爲 root 。此外,你也不用輸入 root 用戶密碼。

重要:請注意 su 命令也能讓你切換用戶(默認切換到 root )。這個命令須要你輸入 root 密碼。爲了不這一點,你可使用 sudo 執行它(sudo su),這樣你只須要輸入你的登陸密碼。然而,su 和 sudo su 有隱含的區別 —— 要了解它們,以及它們和 sudo -i 的區別,請看這裏 。

總結

我但願如今你至少知道了 sudo 的基本知識,以及如何調整 sudo 的默認行爲。請按咱們解釋過的那樣去嘗試調整 /etc/sudoers 。同時也瀏覽一下論壇討論來更深刻了解 sudo 命令。

本文地址:http://www.linuxprobe.com/sudo-cmd-error.html編輯員:逄增寶,審覈員:劉遄

相關文章
相關標籤/搜索