1. 程式人生 > >su、sudo,限制root遠程登錄

su、sudo,限制root遠程登錄

改變 人的 oot 絕對路徑 是我 登錄 tmp onf 權限

su:切換用戶的命令,在root用戶下,可以用這個命令來切換。
[root@localhost ~]# su - aming
上一次登錄:日 1月 21 20:36:34 CST 2018pts/0 上
[aming@localhost ~]$
我們可以看到,用戶已經從root轉換到了aming。我們也可以輸入命令id來查看它是誰
[aming@localhost ~]$ id
uid=1001(aming) gid=1001(aming) 組=1001(aming) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
還有就是我們在su後面加了一個“-”,它是為了徹底的切換用戶,包括它自己的設置,環境變量等等,如果不加“-”,那你會看見它還在/root下。
[root@localhost ~]# su aming
[aming@localhost root]$ pwd
/root
而加了“-”後你會發現,它已經切換到用戶自己的家目錄下。
[root@localhost ~]# su - aming
上一次登錄:日 1月 21 20:36:34 CST 2018pts/0 上
[aming@localhost ~]$ pwd
/home/aming
這樣他就會加載自己家目錄的配置文件。所以我們以後切換用戶的時候一定要加“-”,這樣才會切換的徹底。
我們也可以用指定的用戶去執行命令
[root@localhost ~]# su - -c "touch /tmp/aming.111" aming
[root@localhost ~]# ls -lt /tmp/ |head -n3
總用量 0
-rw-rw-r--. 1 aming aming 0 1月 21 20:49 aming.111
drwx------. 3 root root 17 1月 21 20:12 systemd-private-4bdc2a92b8c349a6b32a5ecb8338ff3a-vmtoolsd.service-1eX2h5
然後我們可以看到用aming用戶執行的一個命令。

我麽也可以從普通用戶切換到普通用戶,只要輸入要切換用戶的密碼就行。
[aming@localhost ~]$ su - user5
[user@localhost ~]$ su - user5

密碼:
上一次登錄:日 1月 21 21:00:19 CST 2018pts/0 上
su: 警告:無法更改到 /home/user5 目錄: 沒有那個文件或目錄
-bash-4.2$
我們可以看到,切換到user5時和其他的用戶不一樣,這是因為user5的家目錄不存在,所以他也沒有用戶的配置文件可加載,所以才顯示成這個樣子,那麽怎樣才能顯示正常呢?我們只要給user5添加一個家目錄就可以了。
首先我們先用ID命令查看一下user5
-bash-4.2$ id user5
uid=1002(user5) gid=1002(user5) 組=1002(user5)
首先,我們先切換到root用戶下,創建user5的家目錄
[root@localhost ~]# mkdir /home/user5
然後改變他的所屬組和所屬主
[root@localhost ~]# chown user5:user5 /home/user5
但是這時候切換還是不行,因為這裏面缺少裏面的配置文件
[root@localhost ~]# su - user5
上一次登錄:日 1月 21 21:33:02 CST 2018pts/0 上
-bash-4.2$
我們只能去其他地方去找配置文件,然後拷貝到user5的家目錄下面去,系統有一個模板目錄/etc/skel
[root@localhost ~]# ls -la /etc/skel/
總用量 24
drwxr-xr-x. 2 root root 62 12月 14 21:57 .
drwxr-xr-x. 74 root root 8192 1月 21 21:00 ..
-rw-r--r--. 1 root root 18 8月 3 05:11 .bash_logout
-rw-r--r--. 1 root root 193 8月 3 05:11 .bash_profile
-rw-r--r--. 1 root root 231 8月 3 05:11 .bashrc
然後我們拷貝到user5家目錄下
[root@localhost ~]# cp /etc/skel/.bash* /home/user5
然後從新改變他的所屬組和所屬主
[root@localhost ~]# chown -R user5:user5 !$ (這時裏面要加-R,因為裏面有了文件,!$這是重復上一個命令最後一條的參數)
然後我們再登錄就恢復正常了
[root@localhost ~]# su - user5
上一次登錄:日 1月 21 21:35:16 CST 2018pts/0 上
[user5@localhost ~]$

root用戶可以su到普通用戶,那普通用戶可以su到root用戶下嗎?當然可以,只要你知道root的密碼就行。
[user@localhost ~]$ su -
密碼:
上一次登錄:日 1月 21 21:53:48 CST 2018pts/0 上
[root@localhost ~]#

sudo命令,它可以讓普通用戶用指定的用戶權限去執行一條命令,多以root用戶居多。
我們先打開配置文件
[root@localhost ~]# visudo(在這裏我們不要用vi去打開這個配置文件,因為這是系統很重要的文件,一旦我們用的語法錯誤,vi是檢測不出來的,所以我們要用visudo來打開它)
然後我們向下,找到這一行,這是這個配置文件最核心的一句配置,它的意思是允許root用戶在任何地方使用命令,然後我們模仿一下,讓aming用戶可一個在任何地方執行命令

Allow root to run any commands anywhere

root ALL=(ALL) ALL
aming ALL=(ALL) ls,mv,cat
然後輸入:wq保存退出
但是系統提示我們有錯誤

>> /etc/sudoers: 語法錯誤 near line 93 <<<
現在做什麽?
選項有:
重新編輯 sudoers 文件(e)
退出,不保存對 sudoers 文件的更改(x)
退出並將更改保存到 sudoers 文件(危險!)(Q)
在visudo中有一些使用的範例,可供我們查看。
45 # Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
我們可以看到,我們要執行的命令必須要輸入它的絕對路徑,只寫一個路徑它不知道你的命令在哪裏
aming ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
然後我們保存退出,這樣就沒問題了
然後我們去aming用戶下去ls /root/
[aming@localhost ~]$ ls /root/
ls: 無法打開目錄/root/: 權限不夠
這時我們就要用sudu這個命令去完成
[aming@localhost ~]$ sudo /usr/bin/ls /root/

我們信任您已經從系統管理員那裏了解了日常註意事項。
總結起來無外乎這三點:

#1) 尊重別人的隱私。
#2) 輸入前要先考慮(後果和風險)。
#3) 權力越大,責任越大。

[sudo] aming 的密碼:
這時他需要我們輸入aming用戶的密碼,我們輸入密碼後就可以顯示結果了
aming anaconda-ks.cfg
而第二次則不需要輸入密碼
[aming@localhost ~]$ sudo /usr/bin/ls /root/
aming anaconda-ks.cfg
我們也可以cat一個文件
[aming@localhost ~]$ cat /root/1.txt
cat: /root/1.txt: 權限不夠
[aming@localhost ~]$ sudo /usr/bin/cat /root/1.txt
[aming@localhost ~]$
這樣就可以讓普通用戶擁有指定幾項命令的root用戶權限,而不讓root用戶的密碼泄露出去,保證安全。

visudo還有其他的一些用法,我們也可以不輸入密碼
只要在輸入命令的絕對路徑前輸入NOPASSWD:即可
user5 ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/cat
[user5@localhost ~]$ ls /root
ls: 無法打開目錄/root: 權限不夠
[user5@localhost ~]$ sudo ls /root
111.txt 1.txt 2.txt aming anaconda-ks.cfg
這樣就可以不輸入密碼直接使用了

su、sudo,限制root遠程登錄