Linux環境變數設置

来源:http://www.cnblogs.com/jacobwang/archive/2016/12/30/6236561.html
-Advertisement-
Play Games

修改環境變數PATH 最近為root添加一個環境變數發現sudo su進去沒有變化所以總結了一下所有設置環境變數的方法: 查看PATH: 1. 直接在命令行修改,就可以使用,但是只有在當前的視窗和用戶有用, 關閉以後就失效了,所以如果是臨時使用可以這樣設置 2. 修改家目錄下.bashrc文件,只對 ...


修改環境變數PATH

最近為root添加一個環境變數發現sudo su進去沒有變化所以總結了一下所有設置環境變數的方法:

查看PATH:echo $PATH

  1. 直接在命令行修改,就可以使用,但是只有在當前的視窗和用戶有用,
    關閉以後就失效了,所以如果是臨時使用可以這樣設置

    export PATH=/usr/test/bin:$PATH
  2. 修改家目錄下.bashrc文件,只對當前用戶有用,是永久的,除非刪除或者修改該文件。
    如果只是自己使用添加的命令的推薦使用。
    修改文件以後有兩種方法使其起作用:
    • 關閉當前終端視窗,重新打開一個新終端視窗就能生效
    • 輸入 source ~/.bashrc 命令,立即生效

      vim ~/.bashrc
      export PATH=/usr/test/bin:$PATH
  3. 修改profile文件,修改類似 .bashrc 但是作用範圍不一樣,該文件針對所有用戶的環境變數。
    如果要是所有的用戶都是用該變數修改這個文件。
    生效方法:系統重啟或者輸入 source /etc/profile 命令,立即生效
    vim /etc/profile

  4. 修改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"
    • 生效方法:系統重啟
    • 有效期限:永久有效
    • 用戶局限:對所有用戶
  5. 修改/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的方法,
雙重驗證來增加安全性,普通的做法有以下幾種:

  1. 登錄後用su切換

這種做法是最安全,當然也是最繁瑣的,因為你需要記住兩個密碼,一個是普通用戶的密碼,
一個是root用戶的密碼,缺一個都進不去root許可權

  1. 讓普通用戶擁有sudoer許可權,登錄後用sudo su切換

通過visudo增加一行

test ALL=(ALL:ALL) ALL

那麼用戶test登錄後可以直接輸入sudo su,再輸入一次自己的密碼即可轉換為root用戶,
這種方式是比較不安全的,因為只需要知道test用戶的密碼,其實就相當於擁有了root許可權,
不過卻是比較方便的進入方式,可以限制以下test變成root後的許可權,不要像上面一樣全部
給ALL即可保證比較高的安全性。當然這種方式也有一個弊端就是變成root後加在
/etc/profile的變數不能繼承,所以通常我們會用下麵的做法

  1. sudo su - 讓普通用戶變成root後還能繼承之前的環境變數

  2. 把環境變數寫到 ~/.bashrc

實測發現,sudo su之後,/etc/profile~/.profile的變數都不會被導入,但是 ~/.bashrc 會



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SOLUTION VERIFIED September 13 2016 KB2620131 Environment Red Hat Enterprise Linux 7 NetworkManager teamd Issue Would like to configure a basic Team i ...
  • 我們使用vi或者vim的時候,如果想要顯示行號,可能會這樣做:切換到命令模式,然後輸入set nu,再按回車鍵就顯示了;還有就是咱們在編寫程式的時候,有的時候會希望按下回車鍵後,游標不是每次都在行首,而是與上一行的第一個非空格符處對齊,也就是實現所謂的縮排功能,這是你可以在命令模式下輸入set au ...
  • SOLUTION VERIFIED February 5 2014 KB340153 Environment Red Hat Enterprise Linux 6 (All Versions) Red Hat Enterprise Linux 5 (All Versions) Issue Need ...
  • 1.介紹 雙因素認證:雙因素身份認證就是通過你所知道再加上你所能擁有的這二個要素組合到一起才能發揮作用的身份認證系統。雙因素認證是一種採用時間同步技術的系統,採用了基於時間、事件和密鑰三變數而產生的一次性密碼來代替傳統的靜態密碼。每個動態密碼卡都有一個唯一的密鑰,該密鑰同時存放在伺服器端,每次認證時 ...
  • SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Linux 6 Issue How to create a bridge using a tagged ...
  • not on top of a bond Environment Red Hat Enterprise Linux 7 NetworkManager Issue Need an 802.1q VLAN in RHEL 7 when using NetworkManager. Resolution R ...
  • 我新裝的centos7主機無法使用裡面自帶的網卡,查詢後發現網卡型號為BCM4312。我在看資料安裝的過程中遇到了些問題,糾結了好久,現在分享下要註意的點,為後來的遇到同樣問題的人提供點幫助。現在開始說正事: 若要安裝以 Broadcom BCM4311、BCM4312、BCM4313、BCM432 ...
  • environment Red Hat Enterprise Linux 5.4 or later Red Hat Enterprise Linux 6.0 or later KVM virtual machines question How do I configure a bridged net ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...