Linux login & non-login shell 以及su, sudo相關概念

來源:互聯網
上載者:User

標籤:login shell   non-login shell   sudo   su-   

1.login & non-login shell

Linux系統自舉時,核心會建立init進程,來進行一系列的系統初始化操作。每一個使用者登入shell時,無論以偽終端登入:ssh,X11下控制台,還是tty控制台終端,都會讀取相關相關的登入設定檔。linux 有兩種登入shell:login和nologin:

  • login shell:登入shell時需要完整的登入流程,稱為 login shell。何為完整:輸入使用者名稱和密碼。例如:走tty1-tty6控制終端,或走ssh等偽終端遠程登入
  • non-login shell:登入shell時不需要輸入帳號資訊。例如在X11下,開啟偽終端,或者在shell下,進入shell子進程。

這兩種登入shell的區別是:在登入shell是,讀取的設定檔不同。這裡先介紹兩個設定檔/etc/profile和~/.bashrc,在unix系統中,這兩個shell環境的設定檔,是我們接觸最多的兩個檔案:

  • /etc/profile,處在shell設定檔的最頂端。這是系統shell環境的全域設定,例如PATH,MAIL很多環境變數。對它的修改,會影響到所有使用者。
  • ~/.bashrc,處在shell設定檔的最低端。這是針對每個使用者shell環境的設定檔,我們的大部分個人化的定製,都可以直接修改在這個檔案中。

login shell(bash)在登入時,會讀取的設定檔:

  • /etc/profile,全域配置
  • ~/.bash_profile 或~/.bash_login 或 ~/.profile,個人配置。之所以有三個檔案,是因為不同的shell有可能命名不同,只會按順序讀取其中的一個。

其實登入時不僅僅讀取這兩個檔案,其中在/etc/profile檔案中,還會攝入其他的設定檔,例如我的ubuntu機器上該檔案的內容如下:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).if [ "$PS1" ]; then  #如果shell環境存在且不為sh,就讀取/etc/bash.bashrc  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then    # The file bash.bashrc already sets the default PS1.    # PS1='\h:\w\$ '    if [ -f /etc/bash.bashrc ]; then      . /etc/bash.bashrc    fi  else    if [ "`id -u`" -eq 0 ]; then      PS1='# '    else      PS1='$ '    fi  fifi# The default umask is now handled by pam_umask.# See pam_umask(8) and /etc/login.defs.#讀取/etc/profile.d目錄下所有的sh檔案if [ -d /etc/profile.d ]; then  for i in /etc/profile.d/*.sh; do    if [ -r $i ]; then      . $i    fi  done  unset ifi
對於我的ubuntu機器中~/.profile檔案內容如下: 最後shell會讀取~/.bashrc檔案
# ~/.profile: executed by the command interpreter for login shells.# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login# exists.# see /usr/share/doc/bash/examples/startup-files for examples.# the files are located in the bash-doc package.# the default umask is set in /etc/profile; for setting the umask# for ssh logins, install and configure the libpam-umask package.#umask 022# if running bashif [ -n "$BASH_VERSION" ]; then    # include .bashrc if it exists    if [ -f "$HOME/.bashrc" ]; then        . "$HOME/.bashrc"    fifi# set PATH so it includes user's private bin if it existsif [ -d "$HOME/bin" ] ; then    PATH="$HOME/bin:$PATH"fi

login shell讀取配置的流程如(來自:<鳥哥>):


non-login shell(bash)在登入時,只會讀取的設定檔:~/.bashrc。bashrc這個檔案有時候不存在,需要自己建立,裡面可以進行個人化的定製,不會影響到其他使用者。

2.su &sudo

在我接觸的Linux 發行版中,ubuntu在安裝過程中不會提示root密碼的設定,只有進入系統後才能在shell下通過passwd來設定root的密碼,fedora,centos安裝過程中多會要求設定root密碼和建立一個常用的使用者。可以看出linux的設計者們本身就期望使用者以較低的許可權來進行平時的操作,這是基于于安全的考慮。

但在shell環境下,由於各種工作的需要,我們經常需要進行使用者權限的切換,最常用的就是擷取root使用者的許可權。最常用的命令有su和sudo。

su [-lc] [username]- , -l, --login : 表示使用以login shell的方式登入username,若username為空白,則預設登入root。                  如果沒有該參數,則以nonlogin的方式登入-c, 僅執行一次命令 ,命令需要用引號括起來
這裡要強調的就是 su 和su -的區別,就是前面撤了一大串的 login 和non-login的區別

sudo命令的存在我覺得有兩個原因:

  • 使用su切換到root,需要是所有使用者都知道root密碼,不安全;
  • 很多時候我們切換到root使用者只是需要執行一條語句,儘管su -c可以完成,但每次都要敲個空格-c,而且每次都要輸入root密碼;

上面兩個原因,就是sudo存在的理由。sudo可以讓使用者通過驗證自己的密碼來獲得其他使用者的許可權,只需要root對/etc/sudoers進行相關的配置,我的sudoers檔案的內容如下:

# User privilege specificationroot    ALL=(ALL:ALL) ALL# admin群組成員可以切換到任何使用者執行任何命令%admin ALL=(ALL) ALL# Allow members of group sudo to execute any command%sudo   ALL=(ALL:ALL) ALL#users群組不要求輸入密碼進行切換%users ALL=(ALL) NOPASSWD:ALL#允許guest切換到samba_group組中的所有使用者guest ALL=(%samba_group:ALL) ALL 
sudoers中設定一個使用者具有sudo許可權的方式如下:

登入者帳號  登入者的來源主機名稱=(可切換身份)可執行檔命令

登入者帳號可以為:個人,群組,別名。群組需要在前面加%來標誌


對於別名,sudoers結構的四個組成部分都可以用別名表示:User_Alias , Runas_Alias, Host_AliasCmnd_Alias

 每個別名的命名格式:Alias_Type NAME = item1, item2, ...,別名NAME必須由大寫字母,數字,底線組成,開頭為大寫字母。

例如:

User_Alias SBGROUP = user1, user2, user3

SBGROUP  ALL=(ALL)  ALL

為了保證/etc/sudoers文法的正確,我們一般通過visudo來編輯該檔案。

Linux login & non-login shell 以及su, sudo相關概念

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.