su命令、sudo命令、限制root遠程登陸

 

su命令

一、su命令簡介

功 能:切換當前用戶身份到其餘用戶身份,變動時需輸入所要變動到用戶的賬號與密碼。linux

語 法:su    [選項]    [參數]bash

補 充: 普通用戶直接su,切換到root用戶;網絡

選項:ssh

-c:以要切換用戶的身份執行一條指令,執行完指定的指令後,即恢復原來的身份;ui

參 數:spa

二、切換用戶

#su - username

#su username

ctrl + d=exit

# su -colin和# su colin相比,多了一個 - ,- 的做用是切換到coin用戶的時候能夠徹底切換到colin用戶,而且有- 的切換到colin用戶後會直接切換到用戶的家目錄,初始化當前用戶的環境變量。而沒有加 - 的則會仍然在root目錄下,其環境變量加載的不完整;3d

ctrl + d能夠登出當前用戶,等同於exit命令;code

[root@colinlinux ~]# su - colin
[colin@colinlinux ~]$ whoami
colin
[colin@colinlinux ~]$ pwd
/home/colin
[colin@colinlinux ~]$ ls -la
總用量 16
drwx------. 2 colin colin  83 11月  2 06:17 .
drwxr-xr-x. 9 root  root   97 11月  1 07:11 ..
-rw-------. 1 colin colin  18 11月  2 06:18 .bash_history
-rw-r--r--. 1 colin colin  18 8月   3 2016 .bash_logout
-rw-r--r--. 1 colin colin 193 8月   3 2016 .bash_profile
-rw-r--r--. 1 colin colin 231 8月   3 2016 .bashrc

[colin@colinlinux ~]$ 登出
[root@colinlinux ~]# su colin
[colin@colinlinux root]$ whoami
colin
[colin@colinlinux root]$ pwd
/root
[colin@colinlinux root]$ ls -la
ls: 沒法打開目錄.: 權限不夠

三、root用戶su和普通用戶su

root用戶能夠不用輸入密碼就直接切換到普通用戶,可是普通用戶切換到其餘普通用戶或者普通用戶切換到root用戶都是須要輸入密碼才能切換成功的。orm

 

[root@colinlinux ~]# su - colin
上一次登陸:四 11月  2 06:29:30 CST 2017pts/2 上
[colin@colinlinux ~]$ id
uid=1000(colin) gid=1000(colin) 組=1000(colin) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


[user2@colinlinux ~]$ su - user2
密碼:
上一次登陸:四 11月  2 06:32:30 CST 2017pts/2 上
[user2@colinlinux ~]$ id
uid=1001(user2) gid=1010(group3) 組=1010(group3),1001(user2) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


[user2@colinlinux ~]$ su - root
密碼:
su: 鑑定故障

四、以其餘用戶身份執行命令

#su - -c "命令" username

以要切換用戶的身份執行一條指令,執行完指定的指令後,即恢復原來的身份。three

注意:一共兩個短橫槓,su後面的-,-c前面的-不要忘記,能夠保證完全切換,防止出錯;

注意:-c 後面的命令,須要用「」雙引號括起來;

查看當前用戶是root

[root@colinlinux ~]# id
uid=0(root) gid=0(root) 組=0(root) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

經過#su - -c "命令" username 命令建立/tmp/colin.txt文件,結果提示 user /tmp/aming.111 does not exist,由於用-c "命令"的時候,命令須要用「」雙引號括起來,不然touch後面的目錄或者文件名會被人爲是用戶名字;

id命令查看當前用戶還是root用戶,說明執行完命令後當即又切換回了原來用戶;

 

 

[root@colinlinux ~]# su - -c touch /tmp/colin.txt colin
su: user /tmp/colin.txt does not exist
[root@colinlinux ~]# su - -c "touch /tmp/colin.txt" colin
[root@colinlinux ~]# id
uid=0(root) gid=0(root) 組=0(root) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

建立完畢後查看/tmp/colin.txt的屬性,文件的全部者是colin,所屬組是colin。

 

[root@colinlinux ~]# ls -l /tmp/
總用量 4
-rw-rw-r--. 1 colin colin   0 11月  2 06:46 colin.txt
-rwx------. 1 root  root  836 10月 18 14:29 ks-script-4YL0zX
drwx------. 3 root  root   17 10月 19 06:00 systemd-private-0bce7e12c186488ab2690b2b5111395a-vmtoolsd.service-gju9XE
drwx------. 3 root  root   17 10月 18 14:46 systemd-private-507d7dcaa36549c7bdf8ce538f9cd4a4-vmtoolsd.service-BsBiAG
drwx------. 3 root  root   17 10月 18 20:38 systemd-private-91c6308734f642988598c0e23c3d657e-vmtoolsd.service-bWuvP7
drwx------. 3 root  root   17 10月 20 07:48 systemd-private-ca9f63b46bdc4c66bab494c627e26368-vmtoolsd.service-f5FLYu
drwx------. 3 root  root   17 10月 22 20:24 systemd-private-e1ad1a578c924f49be04609f92a37786-vmtoolsd.service-tJ1hfL
drwxrwx---. 3 root  root   45 10月 29 21:07 test1
-rw-------. 1 root  root    0 10月 18 14:26 yum.log

五、su相關故障排除

切換到colin用戶,以普通用戶colin的身份切換到user5用戶,結果失敗;

[root@colinlinux ~]# su - colin
上一次登陸:四 11月  2 06:57:04 CST 2017pts/2 上
[colin@colinlinux ~]$ su - user5
密碼:
su: 鑑定故障

而後查看user5用戶是否是被鎖定了,可是當前是colin用戶,以colin普通用戶的身份固然是不能查看shadow文件的;

接着切換到rooot用戶去查看shadow文件;

 

而後就發現,user5用戶密碼段有兩個歎號!!,說明user5用戶沒有設置密碼,被鎖定了;

因此須要給user5用戶建立密碼,當前是root用戶,能夠直接給user5設置密碼;

 

 

 

 

[colin@colinlinux ~]$ tail /etc/shadow
tail: 沒法打開"/etc/shadow" 讀取數據: 權限不夠
[colin@colinlinux ~]$ su
密碼:
[root@colinlinux colin]# tail -n 3 /etc/shadow
user2:$6$mExurBM8$V3eth9GmkFDOE6HaYmO6T1vvn2SeUBGrND33pFQfiJcJO3Tdit4IoRARPXaOllvoIX6M6mbwX7IleUcKzDEwE0:17471:0:99999:7:::
user3:!!:17468:0:99999:7:::
user5:!!:17471:0:99999:7:::
[root@colinlinux colin]# passwd user5
更改用戶 user5 的密碼 。
新的 密碼:
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
[root@colinlinux colin]# tail -n 3 /etc/shadow
user2:$6$mExurBM8$V3eth9GmkFDOE6HaYmO6T1vvn2SeUBGrND33pFQfiJcJO3Tdit4IoRARPXaOllvoIX6M6mbwX7IleUcKzDEwE0:17471:0:99999:7:::
user3:!!:17468:0:99999:7:::
user5:$6$MJQV5vrw$sPuYA691FFLacjpJ8SDSH9UR8TSt.DWLrg5lQYkztV35LUJ1zzYGXjL8PR5EjtggTB1QujniY0cRDRjyfIBqb0:17471:0:99999:7:::
[root@colinlinux colin]# exit

切換到colin用戶,以普通用戶colin的身份切換到user5用戶,結果發現雖然切換到了普通用戶user5,可是卻不正常。

su: 警告:沒法更改到 /home/user5 目錄: 沒有那個文件或目錄。

查看/home/目錄,發現真的沒有user5用戶家目錄;

打印當前路徑,發現是在coin用戶的家目錄還;

查看家目錄,發現沒有user5用戶的家目錄,切換回root用戶在passwd中看到,user5用戶的家目錄確實是在/home,路徑是/home/user5,因此user5用戶要麼是建立的時候沒有建立家目錄,要麼是家目錄被刪除了。

 

 

[colin@colinlinux ~]$ su - user5
密碼:
最後一次失敗的登陸:四 11月  2 06:58:02 CST 2017pts/2 上
最有一次成功登陸後有 1 次失敗的登陸嘗試。
su: 警告:沒法更改到 /home/user5 目錄: 沒有那個文件或目錄
-bash-4.2$ id
uid=1005(user5) gid=1011(user5) 組=1011(user5) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
-bash-4.2$ ls /home/
colin  user2  user3
-bash-4.2$ pwd
/home/colin
-bash-4.2$ 登出
[colin@colinlinux ~]$ 登出
[root@colinlinux ~]# tail -n 3 /etc/passwd
user2:x:1001:1010::/home/user2:/bin/bash
user3:x:1004:1005::/home/user3:/bin/bash
user5:x:1005:1011::/home/user5:/bin/bash
[root@colinlinux ~]#

想要正常登陸,就須要給user5用戶補全相關文件;

 

首先給查看user5用戶的全部者和所屬組,分別是user5和user5。

而後咱們知道他的家目錄是/home/user5,那就給user5建立家目錄;

[root@colinlinux ~]# id user5
uid=1005(user5) gid=1011(user5) 組=1011(user5)
[root@colinlinux ~]# mkdir /home/user5
[root@colinlinux ~]# ls -l /home/
總用量 0
drwx------. 2 colin colin  83 11月  2 06:17 colin
drwx------. 2 user2 group3 83 11月  2 06:34 user2
drwx------. 2 user3 group2 62 10月 30 07:51 user3
drwxr-xr-x. 2 root  root    6 11月  2 07:18 user5
[root@colinlinux ~]# chown user5:user5 /home/user5/
[root@colinlinux ~]# ls -ld /home/user5
drwxr-xr-x. 2 user5 user5 6 11月  2 07:18 /home/user5

修改完畢後再次切換到user5發現仍是不正常;

[root@colinlinux ~]# su - user5
上一次登陸:四 11月  2 07:09:27 CST 2017pts/2 上
-bash-4.2$ 
-bash-4.2$

切換到root用戶,對比查看colin用戶和user5用戶的家目錄發現,colin用戶的家目錄比user5用戶的家目錄多出幾個。bash開頭的文件(這幾個文件其實就是用戶須要的配置文件),user5用戶家目錄還缺乏配置文件。

-bash-4.2$ su 
密碼:
[root@colinlinux user5]# ls -la /home/colin/
總用量 16
drwx------. 2 colin colin  83 11月  2 06:17 .
drwxr-xr-x. 6 root  root   58 11月  2 07:18 ..
-rw-------. 1 colin colin 121 11月  2 07:15 .bash_history
-rw-r--r--. 1 colin colin  18 8月   3 2016 .bash_logout
-rw-r--r--. 1 colin colin 193 8月   3 2016 .bash_profile
-rw-r--r--. 1 colin colin 231 8月   3 2016 .bashrc
[root@colinlinux user5]# ls -la /home/user5
總用量 0
drwxr-xr-x. 2 user5 user5  6 11月  2 07:18 .
drwxr-xr-x. 6 root  root  58 11月  2 07:18 ..
[root@colinlinux user5]#

普通用戶家目錄配置文件模版位置/etc/skel/

而後到/etc/skel/中把幾個配置文件拷貝到user5家目錄下,拷貝完了,這幾個文件的全部者和所屬組仍是root用戶,須要更改文件的全部者和所屬組都變成user5。

 

[root@colinlinux user5]# ls -la /etc/skel/
總用量 24
drwxr-xr-x.  2 root root   62 10月 18 14:27 .
drwxr-xr-x. 77 root root 8192 11月  2 07:00 ..
-rw-r--r--.  1 root root   18 8月   3 2016 .bash_logout
-rw-r--r--.  1 root root  193 8月   3 2016 .bash_profile
-rw-r--r--.  1 root root  231 8月   3 2016 .bashrc
[root@colinlinux user5]# cp /etc/skel/.bash* /home/user5
[root@colinlinux user5]# ls -la /home/user5
總用量 12
drwxr-xr-x. 2 user5 user5  62 11月  2 07:25 .
drwxr-xr-x. 6 root  root   58 11月  2 07:18 ..
-rw-r--r--. 1 root  root   18 11月  2 07:25 .bash_logout
-rw-r--r--. 1 root  root  193 11月  2 07:25 .bash_profile
-rw-r--r--. 1 root  root  231 11月  2 07:25 .bashrc
[root@colinlinux user5]# chown -R /home/user5
chown: "/home/user5" 後缺乏操做數
Try 'chown --help' for more information.
[root@colinlinux user5]# chown -R user5:user5 /home/user5
[root@colinlinux user5]# ls -la /home/user5
總用量 12
drwxr-xr-x. 2 user5 user5  62 11月  2 07:25 .
drwxr-xr-x. 6 root  root   58 11月  2 07:18 ..
-rw-r--r--. 1 user5 user5  18 11月  2 07:25 .bash_logout
-rw-r--r--. 1 user5 user5 193 11月  2 07:25 .bash_profile
-rw-r--r--. 1 user5 user5 231 11月  2 07:25 .bashrc
[root@colinlinux user5]#

改完以後再次以普通用戶colin登陸user5,發現正常了。

[root@colinlinux user5]# su - colin
上一次登陸:四 11月  2 06:57:45 CST 2017pts/2 上
[colin@colinlinux ~]$ su - user5
密碼:
上一次登陸:四 11月  2 07:20:09 CST 2017pts/2 上
[user5@colinlinux ~]$

sudo命令

一、sudo命令簡介

功 能:用來以其餘身份來執行命令,預設的身份爲root。在/etc/sudoers中能夠進行相關的配置,設置用戶能夠用sudo命令 以哪些用戶的身份 執行哪些指令;若其未經受權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,以後有5分鐘的有效期限,超過時限則必須從新輸入密碼。

語 法:sudo(選項)(參數)

補 充: 能夠用來管理普通用戶的權限,防止普通用戶獲取過多的root權限;

參 數:

 

二、visudo命令

用來打開並編輯sudo的配置文件/etc/sudoers,用visudo編輯能夠檢查出編輯這個文件的時候的語法錯誤,若是用vi直接編輯,就無法檢測數來,因此不要用vi去編輯。

visudo用法和vi同樣。

用 visudo 命令打開後在屏幕下方發現,實際編輯的是/etc/sudoers。

vi命令,顯示行號用:set nu 可讓打開的文件每行前面顯示行號;

因此visudo也是用:set nu顯示行號;

直接輸入:set nu便可;

下面是配置文件中相當重要的一行,表示:容許root用戶 運行任何命令 在任何路徑;

## Allow root to run any commands anywhere

root     ALL=(ALL)     ALL

colin    ALL=(root)     /usr/bin/ls, /usr/bin/cat

colin,這裏能夠是用戶,能夠是用戶組;

ALL=(root):想要讓coiln用戶擁有root用戶的身份,括號裏面表示前面的用戶能夠擁有哪一個用戶的身份;

/usr/bin/ls, /usr/bin/cat 想要讓用戶aming能夠root用戶身份執行的命令,這裏必須寫絕對路徑,格式也不能錯。

90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL
     92 
     93 colin   ALL=(root)      /usr/bin/ls, /usr/bin/cat

配置完成後,:wq,保存退出;

切換到su - colin切換到colin用戶,ls /root/ 查看root目錄提示權限不夠,由於colin是普通用戶;

用sudo ls /root/ 就能夠查看root目錄下的內容了,第一次執行命令須要輸入當前用戶的密碼。

[colin@colinlinux ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
[colin@colinlinux ~]$ sudo ls /root/

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 colin: 
anaconda-ks.cfg
[colin@colinlinux ~]$ sudo ls /root/
anaconda-ks.cfg
[colin@colinlinux ~]$

在sudoers配置文件中添加NOPASSWD: 可讓用戶在執行命令的時候不須要輸入密碼;

切換到colin用戶,再使用sudo命令就不用再輸入密碼了。

90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL
     92 
     93 colin   ALL=(root)      NOPASSWD:       /usr/bin/ls, /usr/bin/cat
[root@colinlinux ~]# visudo
[root@colinlinux ~]# su - colin
上一次登陸:四 11月  2 07:53:35 CST 2017pts/1 上
[colin@colinlinux ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
[colin@colinlinux ~]$ sudo ls /root/
anaconda-ks.cfg
[colin@colinlinux ~]$

sudoers中有不少地方能夠設置別名,

## Host Aliases 用來設置主機別名

## User Aliases 用來設置用戶別名

## Command Aliases 用來設置命令別名

## Networking 是系統設置的一些網絡相關的配置;

設置 /usr/bin/ls, /usr/bin/cat命令的別名是COLIN_CMD

Cmnd_Aliases COLIN_CMD= /usr/bin/ls, /usr/bin/cat

而後再把給colin用戶的配置換成COILN_CMD,就能夠等同於 /usr/bin/ls, /usr/bin/cat

使用visudo命令,編輯sudoers時候編輯若是有問題會提示,以下,而vi /etc/sudoers就不會;

[root@colinlinux ~]# visudo
visudo:>>> /etc/sudoers:syntax error 在行 25 附近<<<
如今作什麼?visudo
選項有:
  從新編輯 sudoers 文件(e)
  退出,不保存對 sudoers 文件的更改(x)
  退出並將更改保存到 sudoers 文件(危險!)(Q)

如今作什麼?e
[root@colinlinux ~]# su - colin
上一次登陸:四 11月  2 07:58:12 CST 2017pts/1 上
[colin@colinlinux ~]$ id
uid=1000(colin) gid=1000(colin) 組=1000(colin) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[colin@colinlinux ~]$ sudo ls /root/
anaconda-ks.cfg
[colin@colinlinux ~]$

sudoers中還能夠對用戶組,也就是多個用戶進行相關配置操做;

限制root遠程登陸

限制root用戶遠程登陸,只容許普通用戶遠程登陸;

普通用戶登陸完成後容許su切換到root用戶;

 

在sudoers配置文件中設置用戶別名變量;

這樣就可讓普通用戶不須要命令就能夠直接切換到root用戶了。

打開配置文件sshd_config,

找到#PermitRootLogin yes,改成#PermitRootLogin no,表示不容許root用戶登陸。

記得去掉前面的註釋符號,井號#,不然命令不會生效。

改完配置文件後重啓sshd的服務;

這時候不論是密碼仍是ssh,root用戶都不能登陸了。

經過普通用戶aming,密碼登陸到主機;

而後用ls查看root目錄下的文件,發現權限不夠;

用su切換到root用戶,又不知道root用戶的密碼;

這時候由於剛剛設定過,aming用戶在經過sudo命令執行su命令的時候能夠有全部用戶的權限,而且不須要輸入密碼。因此能夠直接經過

sudo su - root

直接切換到root用戶,並且不須要密碼;

就能夠以root用戶的身份進行操做了。

相關文章
相關標籤/搜索