修改環境變數PATH 最近為root添加一個環境變數發現sudo su進去沒有變化所以總結了一下所有設置環境變數的方法: 查看PATH: 1. 直接在命令行修改,就可以使用,但是只有在當前的視窗和用戶有用, 關閉以後就失效了,所以如果是臨時使用可以這樣設置 2. 修改家目錄下.bashrc文件,只對 ...
修改環境變數PATH
最近為root添加一個環境變數發現sudo su進去沒有變化所以總結了一下所有設置環境變數的方法:
查看PATH:echo $PATH
直接在命令行修改,就可以使用,但是只有在當前的視窗和用戶有用,
關閉以後就失效了,所以如果是臨時使用可以這樣設置export PATH=/usr/test/bin:$PATH
- 修改家目錄下.bashrc文件,只對當前用戶有用,是永久的,除非刪除或者修改該文件。
如果只是自己使用添加的命令的推薦使用。
修改文件以後有兩種方法使其起作用:- 關閉當前終端視窗,重新打開一個新終端視窗就能生效
輸入 source ~/.bashrc 命令,立即生效
vim ~/.bashrc export PATH=/usr/test/bin:$PATH
修改profile文件,修改類似 .bashrc 但是作用範圍不一樣,該文件針對所有用戶的環境變數。
如果要是所有的用戶都是用該變數修改這個文件。
生效方法:系統重啟或者輸入 source /etc/profile 命令,立即生效
vim /etc/profile
修改environment文件
vim /etc/environment PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"中加入 ":/usr/local/mongodb/bin"
- 生效方法:系統重啟
- 有效期限:永久有效
- 用戶局限:對所有用戶
修改/etc/login.defs文件: 這個文件是設置用戶帳號限制的文件,在這裡我們可配置密碼的最大過期天數,
密碼的最大長度約束等內容,如果/etc/shadow文件里有相同的選項,則以/etc/shadow里的設置為準,也就是
說/etc/shadow的配置優先順序高於/etc/login.defs,該文件里的配置對root用戶無效,但是環境變數PATH有效
/*
*REQUIRED* The default PATH settings, for superuser and normal users.
*
*(they are minimal, add the rest in the shell startup files)
*/
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/ovs/bin:/ovs/sbin:/pica/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/ovs/bin:/pica/bin
總結:
當我們通過ssh登錄到系統的時候讀取環境變數是有順序的,也就是上面的幾種設置方法可能會被覆蓋。
/* linux登錄時設置PATH的順序從上到下 */
login.defs
/etc/environment
/etc/profile
~/.profile
~/.bashrc
當我們設置了PATH後,發現 sudo su 切換到root用戶的PATH沒有改變,只有login.defs和~/.bashrc設置生效
或者使用 sudo su - 就可以獲得更新的環境變數
$ man su
SU(1)
NAME
su - change user ID or become superuser
DESCRIPTION
The su command is used to become another user during a login session. Invoked without a username, su defaults to becoming the superuser. The optional argument - may be used to
provide an environment similar to what the user would expect had the user logged in directly.
Additional arguments may be provided after the username, in which case they are supplied to the user's login shell. In particular, an argument of -c will cause the next argument
to be treated as a command by most command interpreters. The command will be executed by the shell specified in /etc/passwd for the target user.
You can use the -- argument to separate su options from the arguments supplied to the shell.
The user will be prompted for a password, if appropriate. Invalid passwords will produce an error message. All attempts, both valid and invalid, are logged to detect abuse of
the system.
The current environment is passed to the new shell. The value of $PATH is reset to /bin:/usr/bin for normal users, or /sbin:/bin:/usr/sbin:/usr/bin for the superuser. This may
be changed with the 'ENV_PATH' and 'ENV_SUPATH' definitions in /etc/login.defs.
A subsystem login is indicated by the presence of a "*" as the first character of the login shell. The given home directory will be used as the root of a new file system which
the user is actually logged into.
OPTIONS
-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.
When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login)
do not have this restriction.
sudo su 後加在 /etc/profile 的變數不能繼承
通常,為了防禦別人攻擊,我們一般會把root給禁止遠程登錄,只能通過普通用戶登錄然後切換root的方法,
雙重驗證來增加安全性,普通的做法有以下幾種:
- 登錄後用su切換
這種做法是最安全,當然也是最繁瑣的,因為你需要記住兩個密碼,一個是普通用戶的密碼,
一個是root用戶的密碼,缺一個都進不去root許可權
- 讓普通用戶擁有sudoer許可權,登錄後用sudo su切換
通過visudo增加一行
test ALL=(ALL:ALL) ALL
那麼用戶test登錄後可以直接輸入sudo su,再輸入一次自己的密碼即可轉換為root用戶,
這種方式是比較不安全的,因為只需要知道test用戶的密碼,其實就相當於擁有了root許可權,
不過卻是比較方便的進入方式,可以限制以下test變成root後的許可權,不要像上面一樣全部
給ALL即可保證比較高的安全性。當然這種方式也有一個弊端就是變成root後加在
/etc/profile的變數不能繼承,所以通常我們會用下麵的做法
sudo su - 讓普通用戶變成root後還能繼承之前的環境變數
把環境變數寫到 ~/.bashrc
實測發現,sudo su之後,/etc/profile和~/.profile的變數都不會被導入,但是 ~/.bashrc 會