介紹
在日常的維護過程中創建用戶操作用的相對會多一些,但是在這個過程中涉及到的知識點就不單單就是useradd了,接下來就來詳細了解賬號管理的相關信息。
用戶信息
先從用戶信息開始分析,可以通過查詢/etc/password文件,每一行代表一個用戶信息
1
2
3
4
5
6
7
|
root:x:0:0:root: /root : /bin/bash bin:x:1:1:bin: /bin : /sbin/nologin daemon:x:2:2:daemon: /sbin : /sbin/nologin mysql:x:496:501:: /home/mysql : /bin/bash |
每個冒號分隔一部分,整行總共分為7個部分。
1.用戶名
2.用戶密碼,早期版本的賬號密碼是直接存在這里,為了兼容所以也保留下了這部分,用x代替。
3.uid:所屬的用戶id,每個文件的前面都有該文件所屬的用戶和組,其實存的是uid只不過是通過uid再去etc/password、/etc/shadow中找到對應的uid和gid的名稱。
超級用戶的uid=0
系統用戶(1-499):其中1-99是系統創建的,100-499是用戶創建的系統賬戶,系統用戶不能登入但是可以執行系統的一些命令,這個跟最后指定的shell有關;有一個特殊的shell是/sbin/nologin
普通用戶(500-65535)
4.gid:賬號所屬的用戶組id,和/etc/group組文件有關聯
5.用戶描述
6.用戶的家目錄:創建用戶的家目錄默認是在/home/用戶/,在創建用戶的時候可以指定用戶的家目錄,系統用戶的家目錄比較特殊,比如root用戶的家目錄是/root
7.shell:shell是終端和kernel(內核)溝通的橋梁、內核再和低層的硬件交互(包括cpu、主板、硬盤、顯卡、光驅等),linux默認的shell是/bin/bash
密碼信息
用戶密碼文件中每一行記錄一個用戶的密碼信息,總共有九個部分
1
2
|
[root@localhost ~] # cat /etc/shadow root:$1$4 /cbv0uu $gz1mevqxy6 /9uatgi9yut0 :16862:0:99999:7::: |
1.用戶名:對應/etc/password文件中的用戶信息
2.密碼:密碼存的是密文
3.最近更改密碼的日期:linux將1970年1月1日作為1,所以上面的16862是累加的,具體就不去算了
4.密碼不可被更改的天數:0代表密碼隨時可以被更改,通常可以用來設置某個用戶在多少天密碼不能被更改
5.密碼需要重新更改的天數:99999為273年,改時間是在第3部分的基礎上再相加的。
6.密碼需要修改前的警告天數:改天數是在第5的基礎上計算的,這里默認是7天也就是密碼在需要更改前的第7天開始就發出警告。
7.密碼過期后賬號寬限的天數:當密碼超過了需要更改的天數后,如果用戶依然沒有更改密碼,那么該密碼就過期了,在過期的這幾天里密碼依舊可以登入當用戶在寬限的時間內登入系統系統會強制用戶修改密碼,如果用戶在寬限的天內還未修改密碼那么密碼就永久過期無法再登入,只有賬戶超出了密碼過期的天數之后賬戶才失效,所以一個賬戶總的有效時間是3+6+7。
8.用戶失效的日期:改日期同第3部分一樣都是從1970年1月1日開始計算出來的數字,超過這個日期之后無論用戶密碼是否過期用戶都失效不能再使用,改日期通常會用在規定一個用戶在規定的日期之后就用戶就不能使用的收費系統中。
9.保留部分
計算當前日期通過1970年換算過來的數字
1
2
|
[root@localhost ~] # echo $(($(date +'%s')/86400+1)) 16927 |
計算指定日期通過1970年換算過來的數字
1
2
|
[root@localhost ~] # echo $(($(date --date="2016-01-01" +'%s')/86400+1)) 16802 |
創建用戶
明白了上面的概念之后就可以來創建用戶了,創建用戶的命令是useradd,接下來看幾個主要的參數。
useradd [-u uid] [-g 初始群組] [-g 次要群組] [-m\m] [-c 說明] [-d 家目錄絕對路徑] [-s shell] 賬號名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
-c, --comment comment 用戶說明 -d, --home-dir home_dir 用戶的家目錄 -d, --defaults 默認的用戶配置 -e, --expiredate expire_date 用戶的失效日期,這里需要指定的是從1970年1月1日開始計算出來的數字,比如16925代表2016年5月4日過期,對應密碼文件的第8部分 -f, --inactive inactive 指定密碼過期的時間,這里指定的是數字,比如10代表密碼在過期的10天內還可以登入但是登入后需要強制修改密碼, 對應密碼文件的第7部分 -g, --gid group 用戶的gid -g, --groups groups 列出用戶還能加人的組、次要組 -h, --help 幫助信息 -k, --skel skel_dir use this alternative skeleton directory -k, --key key=value override /etc/login.defs defaults -l, --no-log-init do not add the user to the lastlog and faillog databases -m, --create-home 強制需要創建家目錄 -m, --no-create-home 強制不創建家目錄 -n, --no-user-group 不創建用戶的組名和用戶名一樣 -o, --non-unique 允許創建的用戶uid相同,默認情況下用戶的uid是唯一的,加上-o參數可以創建相同uid的不用用戶 -p, --password password 指定創建用戶的密碼,這里的密碼存儲的是密文,所以還需要知道密文對應的明文密碼是多少 -r, --system 創建一個系統用戶 -s, --shell shell 指定用戶的shell -u, --uid uid 指定用戶的uid -u, --user-group 創建的用戶組名同用戶名,這是默認的 -z, --selinux-user seuser use a specific seuser for the selinux user mapping |
1.創建用戶test
創建用戶不加參數默認會創建一個同名的用戶組、密碼為空,用戶的uid和gid都是500之后在現有的uid和gid的基礎上往后自動添加、默認會創建一個同名的家目錄家目錄的默認權限是700
1
2
3
4
5
6
7
8
|
[root@localhost ~] # useradd test [root@localhost ~] # grep test /etc/passwd /etc/shadow /etc/group /etc/passwd : test :x:501:502:: /home/test : /bin/bash /etc/shadow : test :!!:16925:0:99999:7::: /etc/group : test :x:502: [root@localhost ~] # ll -d /home/test drwx------. 4 test test 4096 may 4 16:25 /home/test |
2.創建用戶new備注用戶為test,指定用戶uid為600,用戶的組初始組為test、用戶的次要組為mysql,指定用戶的失效日期(注意這里的失效日期也是需要通過1970年1月1日進行換算)、指定用戶的過期天數
3.創建系統用戶old
創建的系統用戶雖然在用戶文件中有指定家目錄,但是實際上在home目錄下并不會創建對應用戶的目錄,且不會創建用戶郵件通知目錄。
4.創建不允許登入的用戶
5.指定用戶家目錄
先創建用戶家目錄
1
2
|
[root@localhost ~] # mkdir -p /test/home [root@localhost ~] # mkdir /test/home/testuser |
創建用戶并指定家目錄
1
2
3
|
[root@localhost ~] # useradd -d /test/home/testuser testuser useradd : warning: the home directory already exists. not copying any file from skel directory into it. |
注意:這里的家目錄是絕對路徑,也就是你指定了那個目錄家目錄就是哪個目錄不會在你指定的目錄下再創建目錄,這里會有警告說用戶不能拷貝文件到家目錄,因為家目錄的權限還是之前創建目錄用戶的權限,這個時候需要給家目錄賦予用戶擁有者。
1
2
3
4
5
|
[root@localhost ~] # chown testuser:testuser /test/home/testuser [root@localhost ~] # ll /test/home total 4 drwxr-xr-x. 2 testuser testuser 4096 may 5 06:22 testuser [root@localhost ~] # |
刪除用戶
1
|
userdel [options] login |
-f, --force 強制刪除用戶,不管該用戶是否在使用
-h, --help 幫助信息
-r, --remove 刪除用戶和組并且刪除用戶的家目錄和郵件通知目錄
-z, --selinux-user 刪除selinux用戶
1.不加參數刪除用戶
1
|
userdel testuser |
不加參數刪除只會刪除用戶、密碼、用戶組,不會刪除用戶的家目錄和用戶的郵件目錄
2.刪除用戶同時刪除用戶的家目錄和郵件通知目錄
1
|
userdel -r test |
使用-r參數刪除用戶會同時刪除用戶的家目錄和用戶的郵件通知目錄,如果用戶的用戶組是使用其它用戶的用戶組,其它用戶組不會被刪除。
用戶組
創建用戶組
1
|
groupadd groupname |
刪除用戶組
1
|
groupdel groupname |
修改用戶組
1
2
3
4
5
|
--修改用戶組名 groupmod -h newname oldname --修改用戶組id groupmod -g newgid oldgid |
單獨對用戶組的操作用的不會很多,這里只需要了解一下就好。
總結
修改用戶這里就不做詳細的解釋,跟創建用戶的語法相差不大,
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/chenmh/p/5459359.html