su su- sudo區別概述


在Linux的操做中常常會用到su 命令進行用戶的切換和sudo命令獲取root權限,su su- sudo三個命令常常弄混,下面簡單的講解下。

1、查看su的命令幫助信息:

pipci@openSUSE:~> su --help

用法:
 su [選項] [-] [<用戶> [<參數>...]]

將有效用戶 id 和組 id 更改成<用戶>的 id。
單個 - 視爲 -l。若是未指定<用戶>,將假定爲 root。

選項:
 -m, -p, --preserve-environment  不重置環境變量
 -g, --group <組>                            指定主組
 -G, --supp-group <組>                  指定一個輔助組

 -, -l, --login                                     使 shell 成爲登陸 shell
 -c, --command <命令>                 使用 -c 向 shell 傳遞一條命令
 --session-command <命令>        使用 -c 向 shell 傳遞一條命令
                                                       而不建立新會話
 -f, --fast                                         向shell 傳遞 -f 選項(csh 或 tcsh)
 -s, --shell <shell>                         若 /etc/shells 容許,運行<shell>

 -h, --help                                       顯示此幫助並退出
 -V, --version                                 輸出版本信息並退出

pipci@openSUSE:~>

 su(switch user)命令用於變動爲其餘使用者的身份,須要鍵入該使用者的密碼。若是後面不加帳戶時系統默認爲root帳戶,密碼也root帳戶的密碼。沒有時間限制。經過上面的幫助信息能夠知道su - 是命令su -l的簡寫。su -l的意思是使shell 成爲登陸shell,那麼什麼是登陸shell那?

2、shell

一、什麼是shell

shell簡單的理解就是命令解釋器,他將咱們發出的指令轉化爲計算機可以理解的命令,只有經過他咱們才能和計算機進行溝通,提供人機交互的接口。

二、什麼是Bash shell

Unix的發展過程當中出現了不少版本的shell,Linux默認使用的Bash shell就是其中的一個版本,Bash(Bourne-Again SHell )shell是Bourne shell(sh)的加強版
也是GUN計劃的一部分,其餘比較著名的shell好比C shell,這裏就不作介紹了。

二、查看系統支持的shell  (openSUSE系統下)

pipci@openSUSE:~> cat /etc/shells
/bin/ash
/bin/bash      #Bash shell
/bin/csh       #C Shell
/bin/dash
/bin/false
/bin/ksh
/bin/ksh93
/bin/mksh
/bin/pdksh
/bin/sh
/bin/tcsh
/bin/true
/bin/zsh
.......
pipci@openSUSE:~>

三、查看登陸用戶使用的shell

pipci@openSUSE:~> cat /etc/passwd
........

uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
vnc:x:487:486:user for VNC:/var/lib/empty:/sbin/nologin
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
pipci:x:1000:100:Pipci:/home/pipci:/bin/bash

pipci@openSUSE:~>

能夠看出登陸用戶pipci使用的是/bin/bash  既Bash shell

四、登陸shell (login shell)

獲取bash shell的時候須要完整的登陸流程,輸入用戶名和密碼,就稱爲登陸shell,好比經過ssh方式鏈接,或者由tty1 ~ tty6 登錄,須要輸入用戶的帳號與密碼,此時取得的 bash 就稱爲login shell

五、非登錄shell (non-login shell):

取得 bash 接口的方法不須要重複登錄的舉動
好比你以 X window(圖形界面) 登錄 Linux 後, 再以 X 的圖形化接口啓動終端機,此時該終端接口無需輸入帳號與密碼,則爲non-login shell
再好比你在本來的 bash 環境下再次執行 bash 這個命令,一樣的也沒有輸入帳號密碼, 這個新的 bash (子程序) 也是 non-login shell

六、登陸shell與非登錄shell的區別

執行logout命令,退出登陸shell(不能退出非登陸shell,能夠判斷當前是否爲登陸shell)。

pipci@openSUSE:~> logout                           #假設爲登陸shell,嘗試退出
bash: logout: 不是登陸 shell: 使用 `exit'          #能夠判斷當下不是登陸shell
pipci@openSUSE:~> su                                  #切換用戶,若是su後面不指定用戶,默認指定爲root
密碼:                                                              #輸入root密碼
openSUSE:/home/pipci # logout                      #判斷切換root用戶後是不是登陸用戶
bash: logout: 不是登陸 shell: 使用 `exit'          #能夠判斷不是登陸用戶
openSUSE:/home/pipci # exit
exit
pipci@openSUSE:~> su -                                #經過su -命令使 shell 成爲登陸 shell
密碼:
openSUSE:~ # logout                                       #能夠判斷su -後是登陸shell
pipci@openSUSE:~>

上面只是經過命令演示了登陸和非登陸,真正的區別在於登陸shell會重新加載環境變量的,當使用su -命令切換爲root用戶時shell環境也會一同切換爲root shell環境,非登陸shell不會重新加載環境變量,經過su命令切換爲root用戶時shell環境不會一同切換爲root shell環境,仍是在普通用戶環境,只有切換了Shell環境纔不會出現PATH環境變量錯誤,也就是找不的命令的錯誤,由於在命令行下輸入的每一個命令都會從PATH環境變量對應的目錄搜索相應命令的執行文件,不一樣的用戶有不一樣的環境對應不一樣的PATH環境變量,也就是不一樣的命令搜索目錄,這樣就會形成有的命令普通環境沒法找到,並且su切換成root用戶之後,pwd一下,發現工做目錄仍然是普通用戶的工做目錄;而用su -命令切換之後,工做目錄變成root的工做目錄了。

舉例說明:
pipci@ubuntu:~$ pwd                        #查看工做目錄
/home/pipci
pipci@ubuntu:~$ echo $PATH          #產品普通用戶PATH環境變量值
/usr/local/java/jre1.8.0_161/bin:/home/pipci/bin:/home/pipci/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
pipci@ubuntu:~$ su -
密碼:
root@ubuntu:~# pwd                         #查看工做目錄
/root
root@ubuntu:~# echo $PATH           #產品root用戶PATH環境變量值
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
root@ubuntu:~#

3、sudo

sudo是linux系統管理指令,是容許系統管理員讓普通用戶執行一些或者所有的root命令的一個工具,如halt,reboot,su等等。這樣不只減小了root用戶的登陸 和管理時間,一樣也提升了安全性。sudo不是對shell的一個代替,它是面向每一個命令的。

在sudo於1980年先後被寫出以前,通常用戶管理系統的方式是利用su切換爲超級用戶。可是使用su的缺點之一在於必需要先告知超級用戶的密碼。這樣用戶得到root權限後就能夠肆無忌憚的作任何操做,這樣萬一用戶設置的不當就有可能讓整個系統癱瘓。
sudo使通常用戶不須要知道超級用戶的密碼便可得到權限。首先超級用戶將普通用戶的名字、能夠執行的特定命令、按照哪一種用戶或用戶組的身份執行等信息,記錄在特殊的文件中(一般是/etc/sudoers),即完成對該用戶的受權(此時該用戶稱爲「sudoer」);在通常用戶須要取得特殊權限時,其可在命令前加上「sudo」,此時sudo將會詢問該用戶本身的密碼(以確認終端機前的是該用戶本人),回答後系統即會將該命令的進程以超級用戶的權限運行。以後的一段時間內(默認爲5分鐘,不一樣的發行版可能不同,可在/etc/sudoers自定義),使用sudo不須要再次輸入密碼。
因爲不須要超級用戶的密碼,部分Unix系統甚至利用sudo使通常用戶取代超級用戶做爲管理賬號,例如Ubuntu、Mac OS X等。

sudo也有點相似Windows下面的以管理員身份運行這樣的功能。可是sudo可配置性會更多些。

編輯sudo的配置文件/etc/sudoers通常不要直接使用vi(vi /etc/sudoers)去編輯,由於sudoers配置有必定的語法,直接用vi編輯保存系統不會檢查語法,若有錯也保存了可能致使沒法使用sudo工具,最好使用visudo命令去配置。雖然visudo也是調用vi去編輯,可是保存時會進行語法檢查,有錯會有提示

一、查看sudo的命令幫助信息:

pipci@openSUSE:~> sudo -h
sudo - 以其餘用戶身份執行一條命令

usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...

選項:
  -A, --askpass                       使用助手程序進行密碼提示
  -b, --background                   在後臺運行命令
  -C, --close-from=num          關閉全部 >= num 的文件描述符
  -E, --preserve-env               在執行命令時保留用戶環境
  -e, --edit                                編輯文件而非執行命令
  -g, --group=group                 以指定的用戶組或 ID 執行命令
  -H, --set-home                     將 HOME 變量設爲目標用戶的主目錄。
  -h, --help                              顯示幫助消息並退出
  -h, --host=host                    在主機上運行命令(若是插件支持)
  -i, --login                              以目標用戶身份運行一個登陸 shell;可同時指定一條命令        #至關於su -
  -K, --remove-timestamp        徹底移除時間戳文件                                                                                                  
  -k, --reset-timestamp            無效的時間戳文件                                                                                                    
  -l, --list                                    列出用戶權限或檢查某個特定命令;對於長格式,使用兩次                                                                
  -n, --non-interactive               非交互模式,不提示                                                                                                  
  -P, --preserve-groups            保留組向量,而非設置爲目標的組向量                                                                                  
  -p, --prompt=prompt              使用指定的密碼提示                                                                                                  
  -r, --role=role                          以指定的角色建立 SELinux 安全環境                                                                                   
  -S, --stdin                               從標準輸入讀取密碼                                                                                                  
  -s, --shell                               以目標用戶運行 shell;可同時指定一條命令                    #至關於su                                                                           
  -t, --type=type                        以指定的類型建立 SELinux 安全環境                                                                                   
  -T, --command-timeout=timeout        在達到指定時間限制後終止命令
  -U, --other-user=user                         在列表模式中顯示用戶的權限
  -u, --user=user                                   以指定用戶或 ID 運行命令(或編輯文件)
  -V, --version                                       顯示版本信息並退出
  -v, --validate                                      更新用戶的時間戳而不執行命令
  --                                                       中止處理命令行參數
pipci@openSUSE:~>









java

相關文章
相關標籤/搜索