Linux之使用者管理--初級上,linux使用者管理--
系統管理使用者命令匯總
| 命令 |
注釋說明(特殊顏色的必須掌握) |
| useradd增 |
同adduser命令,執行此命令可在系統中添加使用者。(更改4個使用者檔案) |
| userdel刪 |
執行此命令可刪除使用者及相關使用者的配置或檔案(更改4個使用者檔案) |
| passwd |
執行此命令可為使用者佈建或修改密碼。更改/etc/shadow檔案 |
| chage |
修改使用者密碼屬性。管理/etc/shadow檔案 |
| usermod改 |
修改使用者資訊的命令,可以通過usermod來修改登入名稱,使用者的家目錄等等 |
| id查 |
查看使用者的UID,GID及所歸屬的使用者組 |
| su |
使用者角色切換工具。su - |
| sudo |
sudo是通過另一個使用者來執行命令,su 是用來切換使用者,然後通過切換到的使用者來完成相應的任務,但sudo能在命令後面直接接命令執行,
比如sudo ls /root,不需要root密碼就可以執行只有root才能執行的相應命令或具備的目錄許可權;這個許可權需要通過visudo命令或者直接編輯/etc/sudoers來實現
|
| visudo |
visudo配置sudo許可權的編輯命令;也可以不用這個命令,直接用vi來編輯/etc/sudoers實現。但推薦用visudo來操作(會自動檢查文法) |
系統管理使用者組命令匯總
| 命令 |
注釋說明(特殊顏色標記需要掌握) |
| groupadd |
添加使用者組 |
| groupdel |
刪除使用者組 |
/etc/skel目錄是用來存放新使用者環境變數檔案的目錄,當我們添加新使用者時,這個目錄下的所有檔案會自動被複製到新添加的使用者的家目錄下:預設情況下,/etc/skel目錄下的所有檔案都是隱藏檔案(以.點開頭的檔案);通過修改、添加、刪除/etc/skel目錄下的檔案,我們可為新建立的使用者提供統一的,標準的,初始化使用者環境。
[root@chengliang ~]# cd /etc/skel[root@chengliang skel]# lsreadme[root@chengliang skel]# ls -altotal 20drwxr-xr-x. 2 root root 4096 May 12 22:14 .drwxr-xr-x. 79 root root 4096 May 16 17:07 ..-rw-r--r--. 1 root root 18 May 11 2016 .bash_logout-rw-r--r--. 1 root root 176 May 11 2016 .bash_profile-rw-r--r--. 1 root root 124 May 11 2016 .bashrc-rw-r--r--. 1 root root 0 May 12 22:14 readme[root@chengliang skel]#
命令說明: 在/etc/skel/目錄下建立一個檔案readme,然後我們建立一個新使用者,發現在使用者的家目錄裡也預設有一個readme。因此,得出結論,/etc/skel/目錄下的所有檔案都會預設出現在建立使用者的家目錄裡。
[root@chengliang ~]# su - cheng[cheng@chengliang ~]$ ls -altotal 24drwx------. 2 cheng cheng 4096 May 13 01:23 .drwxr-xr-x. 7 root root 4096 May 12 22:15 ..-rw-------. 1 cheng cheng 125 May 13 01:23 .bash_history-rw-r--r--. 1 cheng cheng 18 May 11 2016 .bash_logout-rw-r--r--. 1 cheng cheng 176 May 11 2016 .bash_profile-rw-r--r--. 1 cheng cheng 124 May 11 2016 .bashrc-rw-r--r--. 1 cheng cheng 0 May 12 22:14 readme[cheng@chengliang ~]$
企業面試題:請問如下登入故障的原理及解決辦法?
-bash-4.1$-bash-4.1$
問題樣本: 命令說明:普通使用者強制移除了家目錄裡的變數檔案就會出現這種問題。
[teacher@chengliang ~]$ ls -altotal 20drwx------. 2 teacher teacher 4096 May 30 23:32 .drwxr-xr-x. 7 root root 4096 May 12 22:15 ..-rw-------. 1 teacher teacher 149 May 30 23:32 .bash_history-rw-r--r--. 1 teacher teacher 176 May 11 2016 .bash_profile-rw-r--r--. 1 teacher teacher 124 May 11 2016 .bashrc[teacher@chengliang ~]$ rm ./.bash*[teacher@chengliang ~]$ ls -altotal 8drwx------. 2 teacher teacher 4096 May 30 23:34 .drwxr-xr-x. 7 root root 4096 May 12 22:15 ..[teacher@chengliang ~]$ exitlogout[root@chengliang ~]# su - teacher-bash-4.1$
解決方案:我們去把/etc/skel/目錄下的變數檔案複製回來就好了
[root@chengliang ~]# su - teacher-bash-4.1$ -bash-4.1$ cp /etc/skel/.bash* ~-bash-4.1$ exitlogout[root@chengliang ~]# su - teacher[teacher@chengliang ~]$ ls -altotal 24drwx------. 2 teacher teacher 4096 May 30 23:36 .drwxr-xr-x. 7 root root 4096 May 12 22:15 ..-rw-------. 1 teacher teacher 80 May 30 23:36 .bash_history-rw-r--r--. 1 teacher teacher 18 May 30 23:36 .bash_logout-rw-r--r--. 1 teacher teacher 176 May 30 23:36 .bash_profile-rw-r--r--. 1 teacher teacher 124 May 30 23:36 .bashrc[teacher@chengliang ~]$
知識擴充*和.*的問題
[root@chengliang etc]# cp /etc/skel/* /tmp/[root@chengliang etc]# cd /tmp/[root@chengliang tmp]# lsetc mysql.sock readme[root@chengliang tmp]# ls -altotal 16drwxrwxrwt. 4 root root 4096 May 30 23:48 .dr-xr-xr-x. 24 root root 4096 May 12 15:28 ..drwxrwxrwt. 2 root root 4096 Nov 12 2016 .ICE-unixdrwxr-xr-x. 8 root root 4096 Nov 20 2016 etcsrwxrwxrwx. 1 mysql mysql 0 May 10 21:08 mysql.sock-rw-r--r--. 1 root root 0 May 30 23:48 readme[root@chengliang tmp]#
*不複製隱藏檔案,所以/etc/skel/目錄下的隱藏檔案不會複製到/tmp/目錄下
那麼在運行cp /etc/skel/.*之前,我們先看看.*裡都有什麼東西?[root@chensiqi1 ~]# ls /etc/skel/.*/etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc/etc/skel/.:readme/etc/skel/..:ConsoleKit inputrc quotatabDIR_COLORS iproute2 rcDIR_COLORS.256color issue rc.dDIR_COLORS.lightbgcolor issue.bak rc.localNetworkManager issue.net rc.sysinitX11 issue.net.bak rc0.dabrt kdump-adv-conf rc1.dacpi kdump.conf rc2.dadjtime krb5.conf rc3.daliases latrace.conf rc4.daliases.db latrace.d rc5.dalsa ld.so.cache rc6.d東西太多以下省略....
.*連etc下的東西都複製出來了,這是為什麼呢?別忘了,目錄下都還有些什麼東西,還有.和..
.代表目前的目錄,..代表上級目錄。因此.*就把上級目錄的所有檔案也複製了。所以我們在複製隱藏檔案的時候不能用.*來代表所有。
使用者管理命令詳解添加使用者命令useradd
- 添加使用者的命令有useradd和adduser,這兩個命令所能達到的效果是一樣的。當然除了useradd和adduser命令以外,我們還能通過修改使用者設定檔/etc/passwd和/etc/group及手動建立檔案的辦法來直接添加使用者,不過這裡並不推薦,這裡建議大家統一使用useradd命令,本文也僅會針對useradd命令進行舉例講解。
- 當使用useradd命令不加參數選項,後面直接跟所添加使用者名稱時,系統首先會讀取設定檔/etc/login.defs和/etc/default/useradd中所定義的參數或規則,根據設定的規則添加使用者,同時會向/etc/passwd和/etc/group檔案內添加建立使用者和使用者組記錄。
- 當然/etc/passwd和/etc/group的加密資訊檔案/etc/shadows和/etc/gshadow也會同步產生記錄,同時系統還會根據/etc/default/useradd檔案中所配置的資訊建立使用者的家目錄,並複製/etc/skel中的所有檔案(包括隱藏的環境設定檔)到新使用者的家目錄中。
useradd文法:
[root@chensiqi ~]# man useradd #下面的內容來源於此命令協助的結果,對於部分地方做了修改名稱: useradd - 帳號建立或更新新使用者資訊的工具文法: useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,....]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid[-o][-n][-r] login] useradd -D [-g default_group] [-b default_home] [-f default_inactive] [-e default_expire_date] [-s default_shell] 描述: 新帳號建立 當不加-D 參數時,useradd指令使用命令列來指定新帳號的設定值和使用系統上的預設值(指前文提到的/etc/login.defs和/etc/default/useradd等設定檔)。新使用者帳號將產生一些系統檔案,如使用者目錄的建立,拷貝起始檔案等,這些均可以利用命令列選項指定。此版本為Red Hat Linux 提供,可幫每個新加入的使用者建立和使用者同名的group,要達到這個目的,不能添加-n選項。
為了方便查看,我們用表格的方式把useradd可使用的參數選項展現給大家如下所示:
|useradd 參數選項|注釋說明(特殊顏色的需要掌握)|
|--|--|
|-c comment|新帳號password檔的說明欄|
|-d home_dir|新帳號每次登入時所使用的home_dir.預設值為default_home內login名稱,併當成登入時目錄名稱|
|-e expire_date|帳號終止日期。日期的指定格式為MM/DD/YY或者YYYY-MM-DD|
|-f inactive_day|帳號到期幾日後永久停權。當值為0時帳號則立刻被停權。而當值為-1時則關閉此功能,預設值-1|
|-g initial_group|group 名稱以數字來作為使用者登入起始使用者組(group)。使用者組名須為系統現有存在的名稱。使用者組數字也須為現有存在的使用者組,預設的使用者組數字為1.|
|-G group,[...]|定義此使用者為多個不同groups的成員,每個使用者組使用“,”逗號分隔。使用者組名同-g選項的限制。預設值為使用者的起始使用者組。|
|-m|使用者目錄如不存在則自動建立。|
|-M|不建立使用者家目錄,優先於/etc/login.defs檔案的設定。一般創虛擬使用者時不建立家目錄,部署服務時需要建立虛擬使用者。|
|-n|預設情況使用者的使用者組與使用者的名稱會相同。如果命令加了-n參數,就不會產生和使用者同名的使用者組了。|
|-r| 此參數是用來建立系統帳號。|
|-s shell|使用者登入後使用的shell名稱。預設值不填寫,這樣系統會幫你指定預設的登入shell(根據/etc/default/useradd預設的值)。cat /etc/shells系統支援的shell|
|-u uid|使用者的ID值。這個值必須是唯一的,除非用-o選項。數字不可為負值|
樣本1:useradd -c,-u,-G,-s,-d,-m多個參數組合例子,自訂使用者家目錄。
樣本2:建立使用者預設的帳號終止日期
樣本3:添加使用者時的預設shell類型/bin/bash改為/bin/sh
[root@chensiqi1 ~]# cat /etc/shells #查看當前系統支援的shell種類 /bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh[root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看當前預設的shell配置SHELL=/bin/bash[root@chensiqi1 ~]# useradd -D -s /bin/sh #修改為/bin/sh[root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看修改結果SHELL=/bin/sh #修改成功View Code
特別提示,這裡僅更改了設定檔的預設值,僅對之後建立的新使用者生效,和老使用者無關。
注意了,這裡我更改shell類型之後,useradd新增使用者時發現登陸,會出現如下登陸故障!
-bash-4.1$-bash-4.1$