Linux基礎(day13)

3.7 su命令

su命令介紹

  • su命令,它是用來切換用戶的
  • 快捷鍵ctrl+d,退出當前用戶

su命令用法

  • su - username 徹底切換當前用戶
[root@localhost ~]# whoami
root
[root@localhost ~]# su - hanfeng
[hanfeng@localhost ~]$ whoami
hanfeng
[hanfeng@localhost ~]$ pwd
/home/hanfeng
[hanfeng@localhost ~]$ ls -la
總用量 16
drwx------. 2 hanfeng ha1   83 11月  1 15:07 .
drwxr-xr-x. 4 root    root  34 10月 31 15:38 ..
-rw-------. 1 hanfeng ha1   21 11月  1 15:18 .bash_history
-rw-r--r--. 1 hanfeng ha1   18 8月   3 2016 .bash_logout
-rw-r--r--. 1 hanfeng ha1  193 8月   3 2016 .bash_profile
-rw-r--r--. 1 hanfeng ha1  231 8月   3 2016 .bashrc
[hanfeng@localhost ~]$ 登出
[root@localhost ~]#
其中這個 - ,目的就是完全的切換用戶,使用本身的配置、環境變量等
.bash開頭的文件都是用戶的配置文件
  • su username 看到用戶已經切換,但不是完全的切換過來,由於還在/root用戶下
[root@localhost ~]# su hanfeng
[hanfeng@localhost root]$ whoami
hanfeng
[hanfeng@localhost root]$ pwd
/root
[hanfeng@localhost root]$ exit
[root@localhost ~]#

su - -c用法

  • su - -c 「命令」 用戶名:是不進入這個帳戶,可是以這個帳戶的身份執行命令
[root@localhost ~]# su - -c "touch /tmp/han.111" hanfeng
[root@localhost ~]# ls -lt /tmp/ |head
總用量 0
-rw-r--r--. 1 hanfeng ha1   0 11月  1 15:45 han.111
drwx------. 3 root    root 17 11月  1 10:21 systemd-private-5909416742444897abc72857986169b4-vmtoolsd.service-klBF7K
[root@localhost ~]# id hanfeng
uid=1000(hanfeng) gid=1001(ha1) 組=1001(ha1),1002(user3)
[root@localhost ~]#
這裏會看到文件的屬組是ha1,由於hanfeng用戶的屬組就是ha1
  • su命令切換用戶後,再切換到另外一個用戶下
    • 只要輸入再次切換用戶的密碼便可登陸
[root@localhost ~]# su - hanfeng
上一次登陸:三 11月  1 16:09:37 CST 2017pts/0 上
[hanfeng@localhost ~]$ su - user5
密碼:
最後一次失敗的登陸:三 11月  1 16:10:09 CST 2017pts/0 上
最有一次成功登陸後有 1 次失敗的登陸嘗試。
[user5@localhost ~]$ ls -la
總用量 12
drwx------. 2 user5 user5  62 11月  1 16:07 .
drwxr-xr-x. 5 root  root   47 11月  1 16:07 ..
-rw-r--r--. 1 user5 user5  18 8月   3 2016 .bash_logout
-rw-r--r--. 1 user5 user5 193 8月   3 2016 .bash_profile
-rw-r--r--. 1 user5 user5 231 8月   3 2016 .bashrc
[user5@localhost ~]$ 登出
[hanfeng@localhost ~]$ 登出
[root@localhost ~]#

/etc/skel文件

  • useradd -M 不要自動創建用戶的登入目錄,就是說建立的用戶沒有配置文件
  • /etc/skel是存放模板配置文件
[root@localhost ~]# useradd -M ll
[root@localhost ~]# su - ll
su: 警告:沒法更改到 /home/ll 目錄: 沒有那個文件或目錄
-bash-4.2$ 
-bash-4.2$ 登出
[root@localhost ~]# mkdir /home/ll
[root@localhost ~]# chown ll:ll /home/ll/
[root@localhost ~]# su - ll
上一次登陸:三 11月  1 16:20:29 CST 2017pts/0 上
-bash-4.2$ pwd
/home/ll
-bash-4.2$ ls -la
總用量 0
drwxr-xr-x. 2 ll   ll    6 11月  1 16:28 .
drwxr-xr-x. 6 root root 57 11月  1 16:28 ..
-bash-4.2$ 登出
[root@localhost ~]# cp  /etc/skel/.bash* /home/ll/
[root@localhost ~]# chown -R ll:ll !$
chown -R ll:ll /home/ll/
[root@localhost ~]# su - ll
上一次登陸:三 11月  1 16:55:28 CST 2017pts/0 上
[ll@localhost ~]$ 登出
[root@localhost ~]#
  • 普通用戶也能夠 su - 到root用戶下,只須要root用戶的密碼
[root@hf-01 ~]# su - hanfeng
上一次登陸:五 10月 27 05:14:42 CST 2017pts/1 上
[hanfeng@hf-01 ~]$ su -
密碼:
上一次登陸:四 11月  2 01:26:08 CST 2017從 192.168.74.1pts/0 上
[root@hf-01 ~]# whoami
root
[root@hf-01 ~]# 登出
[hanfeng@hf-01 ~]$ 登出
[root@hf-01 ~]# 登出
[root@hf-01 ~]#

3.8 sudo命令

sudo命令介紹

  • sudo命令,能夠不切換用戶就能夠獲取其餘用戶的權限來執行相關命令。(一般狀況就是,給普通用戶受權root用戶的身份)
    • visudo命令,能夠打開sudo命令的配置文件(會看到其實代開的是/etc/sudoers.tmp這個文件)
    [root@hf-01 ~]# visudo  會進入/etc/sudoers.tmp的配置文件中
    
     97 ## Allow root to run any commands anywhere
     98 root    ALL=(ALL)       ALL
     99 hanfeng ALL=(ALL)       /usr/bin/ls, /usr/bin/mv, /usr/bin/ls
     [root@hf-01 ~]#
    1. 輸入 :set nu 來顯示行號
    2. 咱們在root用戶下面一行,在添加一個用戶,並能夠運/usr/bin/ls, usr/bin/mv, /usr/bin/cat命令,可寫多個, 也可寫ALL(表示全部)
    3. 而後 :wq 保存退出
  1. 默認root支持sudo,由於文件中默認有root ALL=(ALL) ALL 。
  2. 在這一行下面加入 hanfeng ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/ls ,意思是hanfeng這個用戶在執行sudo這個命令時,能夠獲取部分root用戶的權限。
  • 從左到右依次爲,第一個ALL就能夠理解爲主機的意思,第二個ALL是能夠獲取哪一個用戶的權限,All就是全部包括root,第三個ALL是指使用sudo執行全部命令。

sudo命令的用法

sudo命令用法一

  • su命令能夠切換用戶身份
  • 在 su 在切換成普通用戶後,是沒法查看/root/目錄的,這時用sudo命令,則可讓該用戶臨時擁有root用戶的權限
  • 使用在visudo命令中,編輯的命令要使用絕對路徑
[root@hf-01 ~]# su - hanfeng
上一次登陸:四 11月  2 03:52:44 CST 2017pts/0 上
[hanfeng@hf-01 ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
[hanfeng@hf-01 ~]$ sudo /usr/bin/ls /root/  在執行命令後,會提示輸入hanfeng用戶的密碼

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for hanfeng: 
11.txt	234    33.txt   ha.txt
[hanfeng@hf-01 ~]$ ls /root/    在hanfeng用戶下直接去執行會發現沒法打開/root/目錄
ls: 沒法打開目錄/root/: 權限不夠
[hanfeng@hf-01 ~]$ sudo /usr/bin/ls /root/
11.txt	234    33.txt   ha.txt
[hanfeng@hf-01 ~]$ mv /root/ha.txt /root/haha.txt
mv: 沒法打開目錄/root/: 權限不夠
[hanfeng@hf-01 ~]$ sudo /usr/bin/mv /root/ha.txt /root/haha.txt
[hanfeng@hf-01 ~]$ 登出
[root@hf-01 ~]#

sudo命令用法二

  • 在visudo命令中, 編輯/etc/sudoers.tmp配置文件,設置NOPASSWD: ALL,則以後不再須要輸入密碼。
  • 在sudo命令下,可使用絕對路徑命令,也能夠直接使用命令去執行,獲得的結果相同
[root@hf-01 ~]# visudo
[root@hf-01 ~]# su - user2
上一次登陸:四 11月  2 07:17:04 CST 2017pts/0 上
[user2@hf-01 ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
[user2@hf-01 ~]$ sudo ls /root/
11.txt	234    33.txt  haha.txt
[user2@hf-01 ~]$ sudo /usr/bin/ls /root/
11.txt	234    33.txt  haha.txt
[user2@hf-01 ~]$ 登出
[root@hf-01 ~]#

sudo命令用法三

  • 在visudo命令中,給一些用戶設置一些別名,這裏的別名至關於一個虛擬的用戶
    • 如:User Aliases 給用戶作一個別名
    • 其中的ADMINS是虛擬用戶,jsmith, mikem是兩個真實用戶,因此說虛擬用戶裏面存在兩個真實用戶
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
  • 在visudo命令中,給命令設置一些別名
## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient        , /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig        , /sbin/mii-tool

例子:html

[root@hf-01 ~]# visudo 進入到配置環境中

而後到
## Networking   那一段落最後加上
HANFENG_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

並將用戶名hanfeng後面,去除那些絕對路徑命令,修改上HANFENG_CMD,而後保存退出
root    ALL=(ALL)       ALL
hanfeng ALL=(ALL)       HANFENG_CMD

[root@hf-01 ~]# su - hanfeng
上一次登陸:四 11月  2 05:46:40 CST 2017pts/0 上
[hanfeng@hf-01 ~]$ sudo ls /root/       這裏會發現能夠查看/root/目錄下的文件
[sudo] password for hanfeng: 
11.txt	234    33.txt   haha.txt
[hanfeng@hf-01 ~]$ sudo ls /root/
11.txt	234    33.txt   haha.txt
[hanfeng@hf-01 ~]$ sudo cat /root/haha.txt
[hanfeng@hf-01 ~]$ 登出
[root@hf-01 ~]#
  • 對用戶組作出一些限制
## Allows people in group wheel to run all commands
    109 %wheel  ALL=(ALL)       ALL

sudo命令總結:

  1. 在visudo命令中的配置文件下,輸入 :set nu 則每行會顯示出行號。
  2. 在第一次使用sudo命令,去執行某條命令,會要求輸入當前用戶的密碼,但在第二次執行該條命令時,直接輸入便可執行(或者,在visudo的配置文件中,在該用戶的寫上無需密碼,如hanfeng ALL=(ALL) NOPASSWD:ALL 就可直接登陸,無需密碼了),再添加命令須要使用絕對路徑
  3. 在visudo的配置文件中寫錯了,保存退出後,會報錯,這時選擇 e 而後回車繼續進去編輯便可。
  4. 在visudo的配置文件中,添加命令,須要使用絕對路徑(使用命令的時候可使用絕對路徑命令或命令去執行)
  5. sudo命令,就是用普通用戶臨時擁有root用戶的身份,去執行某一條命令。(這樣就能夠避免將root用戶給普通用戶了)
  6. 給用戶、命令作一些別名,對用戶組作出一些限制

3.9 限制root遠程登陸

sudo su - root 命令(root可省略)

  • 設置不須要密碼直接切換到root用戶下
    • 在visudo中
    • 在User_Alias HANS = hanfeng, user2, user4
    • HANS ALL=(ALL) NOPASSWD: /usr/bin/su
    • 設置完成後就可直接切換到root用戶下了
[root@hf-01 ~]# visudo  在配置環境中設置

 在## User Aliases一段末尾處的下一行設置
    User_Alias HANS = hanfeng, user2, user4
在 ## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
hanfeng ALL=(ALL)       HANFENG_CMD
user10  ALL=(ALL)       NOPASSWD: /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
user2   ALL=(ALL)       NOPASSWD: /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
在這裏加上一下點,而後保存退出
HANS    ALL=(ALL)       NOPASSWD: /usr/bin/su

而後執行命令
[root@hf-01 ~]# su - hanfeng
上一次登陸:四 11月  2 07:51:34 CST 2017pts/0 上
[hanfeng@hf-01 ~]$ sudo su -
上一次登陸:四 11月  2 05:38:13 CST 2017從 192.168.74.1pts/1 上
[root@hf-01 ~]# whoami
root
[root@hf-01 ~]# 登出
[hanfeng@hf-01 ~]$ 登出
[root@hf-01 ~]#

限制root用戶遠程登陸

  • 在vi /etc/ssh/sshd_config文件中設置
    • 在/etc/ssh/sshd_config裏面搜索關鍵詞用法和less同樣,是 /關鍵詞 就會出現
[root@hf-01 ~]# vi /etc/ssh/sshd_config    在這裏搜索/Root

#LoginGraceTime 2m
PermitRootLogin no     將前面的 #號 去除並將yes改成no,表示不容許遠程登陸了
#StrictModes yes

而後保存退出,再重啓配置服務
[root@hf-01 ~]# systemctl restart sshd.service
[root@hf-01 ~]#
  • 而後再去xshell鏈接,會發現密碼和祕鑰都沒法登陸
  • 使用putty去登錄普通用戶,就會看到普通用戶沒法去訪問/root/目錄,可是使用sudo su - root就可切換到root用戶下使用

擴展

  1. sudo與su比較shell

  2. sudo配置文件樣例bash

  3. sudo -i 也能夠登陸到root嗎?app

相關文章
相關標籤/搜索