Linux下帳戶管理與權限控制

近期整理了一番備忘錄內容,把有些在工做中用到的比較基礎的地方進行強化記錄下來。ios

1、用戶與組

新建用戶正則表達式

useradd zyy

# 參數示意:
# -c comment 指定一段註釋性描述
# -d 目錄 指定用戶主目錄,若是此目錄不存在,則同時使用-m選項,能夠建立主目錄
# -g 用戶組 指定用戶所屬的用戶組
# -G 用戶組,用戶組 指定用戶所屬的附加組
# -s Shell文件 指定用戶的登陸Shell
# -u 用戶號 指定用戶的用戶號,若是同時有-o選項,則能夠重複使用其餘用戶的標識號

查看新建用戶的默認主目錄shell

[root@V1 ~]# cat /etc/passwd |grep zyy      
zyy:x:1008:1010::/home/zyy:/bin/bash

變動用戶的主目錄安全

[root@V1 ~]# usermod -d /tmp/zyy zyy  
[root@V1 ~]# 
[root@V1 ~]# cat /etc/passwd |grep zyy      
zyy:x:1008:1010::/tmp/zyy:/bin/bash

# 參數示意:
# -c comment 指定一段註釋性描述
# -d 目錄 指定用戶主目錄,若是此目錄不存在,則同時使用-m選項,能夠建立主目錄
# -g 用戶組 指定用戶所屬的用戶組
# -G 用戶組,用戶組 指定用戶所屬的附加組
# -s Shell文件 指定用戶的登陸Shell
# -u 用戶號 指定用戶的用戶號,若是同時有-o選項,則能夠重複使用其餘用戶的標識號

禁用用戶登陸bash

[root@V1 ~]# usermod -s /sbin/nologin zyy  
[root@V1 ~]# 
[root@V1 ~]# cat /etc/passwd |grep zyy      
zyy:x:1008:1010::/tmp/zyy:/sbin/nologin

新建組oop

groupadd xydwl

把已有用戶加入到組中ui

[root@V1 ~]# usermod -G nagios,zyy zyy
[root@V1 ~]# 
[root@V1 ~]# id zyy
uid=1008(zyy) gid=1010(key) groups=1010(key),1008(nagios),1009(zyy)

咱們也能夠在新建的時候直接將用戶加入到已有的組中spa

useradd  -s  /bin/sh  -g  group  –G  adm,root   gem

# 此命令新建了一個用戶 gem
# 該用戶的登陸 Shell 是 /bin/sh
# 它屬於 group 用戶組,同時又屬於 adm 和 root 用戶組,其中 group 用戶組是其主組

 

2、用戶切換

用戶之間的切換咱們主要使用 su 和 sudo 兩種,這裏咱們主要記錄下 sudo。.net

2.1 如何定義sudo條目

假設咱們如今想要使得hadoop用戶可以以root用戶的身份去執行useradd和usermod命令,實現的方法以下:3d

wKiom1hSlDjgkHjmAAAr20YVa9I169.png

執行完該命令後咱們發現,咱們沒法使用該命令,緣由是 hadoop 用戶沒有在 root 用戶的 sudoers 文件裏面定義,因此咱們只有在 root 用戶的 sudoers 文件裏面定義了該條目以後才能使用該命令,咱們能夠在 root 用戶下使用 visudo 命令定義便可,將該條目定義在 root 用戶的 sudoers 文件的最後一行便可:

wKioL1hSlo3jpfpwAAAHiR4G-e8025.png

ALL 是一種宏,一種通配符,能夠表示全部主機,也能夠表示全部用戶,還能夠表示全部命令,而且 hadoop 用戶只能只用咱們定義給它的這兩個命令,其他的命令沒法執行:

wKioL1hSlvmxtCJnAAAVL0iXsDs213.png

wKiom1hSl4iQxgBTAAASTgaZa-k132.png

溫故: usermod -s 命令能夠修改用戶的默認 shell:

wKioL1hSl_GxBy3aAAAVYhCY1ro087.png

咱們在第一次使用 sudo 命令的時候系統會要求咱們輸入當前用戶的密碼:

wKiom1hSmF2DDgSyAAANU3U7_4g159.png

可是噹噹前用戶第一次認證經過的時候系統會將當前用戶的認證信息記錄下來並讓它的有效期爲 5 分鐘,因此咱們使用 sudo 命令在第一次輸入了密碼以後的 5 分鐘以內再次使用 sudo 命令的時候,就不用再次輸入當前用戶的密碼了,這是 sudo 的一種安全機制:

wKiom1hSmWiTESCbAAAYmGvUMUQ553.png

可是爲了不在這僅有的 5 分鐘以內,有人惡意的使用咱們的 sudo 命令的時候,sudo 給咱們提供了一個 -k 選項,-k 選項表示不管咱們每次使用 sudo 命令的間隔有多長,都得輸入當前用戶的密碼,即便得咱們每次使用 sudo 命令時的輸入的認證信息失效,並在下一次使用的時候從新進行認證:

wKiom1hSnBzjt5MOAABSUf6_aZE552.png

最安全的用法就是咱們在每次使用 sudo 命令的時候都帶上 -k 選項,-k 選項表示使得認證信息失效,咱們能夠在每次執行 sudo 命令的時候都使用 -k 選項,這樣即便咱們在執行 sudo 命令的那一刻輸入了認證信息,系統也不會將該認證信息記錄下來。

做爲一個普通用戶來說,咱們可使用 sudo -l 命令來列出當前用戶全部可使用的 sudo 類命令:

wKiom1hSnLHy-JfxAAA-VHicIaE100.png

做爲管理員,咱們去定義 sudo 條目的時候,也可使得普通用戶在使用 sudo 命令的時候一直都不用輸入密碼,咱們只需在定義 sudo 條目的時候,在命令前面加上標籤(TAG)便可,格式:

who  which_hosts=(runas)  TAG:command

這些標籤中最經常使用的就是 NOPASSWD,這個標籤表示任何用戶在使用 sudo 命令的時候都不用輸入密碼去驗證,全部位於該標籤後面的命令在執行的時候都不用輸入密碼去驗證:

wKioL1hSogPyHeXMAAAIuhexTuM037.png

wKioL1hSop_xHq71AAAX-JFGFsQ039.png

可是咱們若是隻但願某些命令在執行時不須要輸入密碼,而另外一些命令在執行的時候須要輸入密碼,能夠在但願不輸入密碼的命令前面加上 NOPASSWD 標籤,而在但願輸入密碼的命令前面加上 PASSWD 標籤便可:

wKioL1hSo1LSP8wyAAAI2uGowHM619.png

wKiom1hSo6XwOUMoAAAc4uf6ICw261.png

若是咱們須要定義的命令有不少,咱們徹底能夠將這些命令所有定義爲命令別名:

wKiom1hSpQriUZbKAAAYXVd_pwU968.png

wKiom1hSpbXSw5uXAABJLGN2JxE684.png

wKioL1hSphGQinE_AAAY_GouKnM563.png

由上圖知,雖然咱們定義了 hadoop 用戶的用戶別名中不能使用 passwd root 命令去修改 root 的密碼,可是仍然能夠修改 root 的密碼,那麼這種問題咱們該如何解決呢?

因此咱們僅僅簡單的在定義 sudo 條目的時候去取反是不行的,咱們能夠在定義 sudo 條目的時候去使用 globby 通配符 *,注意,不是正則表達式通配符,正則表達式通配符 "*" 表示的是 "*" 前的字符出現 0-任意次,而 globby 的通配符的 "*" 表示 "*" 前的字符至少得出現一次,因此咱們像下圖中這樣修改便可:

wKioL1hSskmhfxafAAANxkqM1Rc308.png

wKiom1hSspDg9ftTAAAuajxGLvs167.png

sudo 還有一個功能就是,其它任何用戶以管理員的身份去執行命令的時候,都會被記錄到 root 用戶的日誌文件裏面,並且會明確說明是哪個用戶以管理員的身份去執行了哪些命令的,/var/log/secure 文件裏面就記錄了這樣的信息:

wKiom1hSszniejKeAAAZ_Hd-60M378.png

 

 

參考資料

1. Linux 新建用戶、用戶組,給用戶分配權限

2. sudo詳解

相關文章
相關標籤/搜索