linux系統用戶以及用戶組管理

認識/etc/passwd和/etc/shadow

  這兩個文件能夠說是linux系統中最重要的文件之一。若是沒有這兩個文件或者這兩個文件出問題,則你是沒法正常登陸linux系統的。php

[root@localhost ~]# cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#

  /etc/passwd由「:」分割成7個字段,每一個字段的具體含義是:mysql

  1)用戶名(如第一行中的root就是用戶名),表明用戶帳號的字符串。用戶名字符能夠是大小寫字母、數字、減號(不能出如今首位)、點以及下劃線,其餘字符不合法。雖然用戶名中能夠出現點,但不建議使用,尤爲是首位爲點時,另外減號也不建議使用,由於容易形成混淆。linux

  2)存放的就是該帳號的口令,爲何是‘x’呢?早期的linux系統口令確實是存放在這裏,但基於安全因素,後來就將其存放到/etc/shadow中了,在這裏只用一個‘x’代替。sql

  3)這個數字表明戶標識號,也叫作uid。系統識別用戶身份就是經過這個數字來的,0就是root,也就是說你能夠修改test用戶的uid爲0,那麼系統會認爲root和test爲同一帳戶。shell

  4)表示組標識號,也叫作gid。這個字段對應着/etc/group中的一條記錄,其實/etc/group和/etc/passwd基本上相似。安全

  5)註釋說明,該字段沒有實際意義,一般記錄該用戶的一些屬性,例如姓名、電話、地址等等。不過,當你使用finger的功能時會顯示這些信息的。bash

  6)用戶的家目錄,當用戶登陸時就處在這個目錄下。root的家目錄是/root,普通用戶的家目錄爲/home/username,這個字段是能夠自定義的,好比你創建一個普通用戶test1,要想讓test1的家目錄在/data目錄下,只要修改/etc/passwd文件中test1那行中的該字段爲/data便可。ssh

  7)shell,用戶登陸後要啓動一個進程,用來將用戶下達的指令給內核,這就是shell。linux的shell有不少種sh、csh、ksh、tcsh和bash等。查看/etc/passwd文件,該字段中除了/bin/bash外還有/sbin/nologin比較多,它表示不容許該帳號登陸。若是你想創建一個帳號不讓他登陸,那麼就能夠把該字段該成/sbin/nologin,默認是/bin/bash。post

[root@localhost ~]# cat /etc/shadow
root:$6$YeN8c9qp$kF/ccExwxWD56sKqq0fDZDGO5D4.OLivV2v3L.2wvG8uDlb9sK2zQtw9gij37AOeAE/8gdAObi8sU0A7YE.tC0:17753:0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
adm:*:17632:0:99999:7:::
lp:*:17632:0:99999:7:::
sync:*:17632:0:99999:7:::
shutdown:*:17632:0:99999:7:::
halt:*:17632:0:99999:7:::
mail:*:17632:0:99999:7:::
operator:*:17632:0:99999:7:::
games:*:17632:0:99999:7:::
ftp:*:17632:0:99999:7:::
nobody:*:17632:0:99999:7:::
systemd-network:!!:17743::::::
dbus:!!:17743::::::
polkitd:!!:17743::::::
sshd:!!:17743::::::
postfix:!!:17743::::::
mysql:!!:17745:0:99999:7:::
www:!!:17746:0:99999:7:::

  再來看看/etc/shadow這個文件,和/etc/passwd相似,用「:」分割成9個字段。ui

  1)用戶名,跟/etc/passwd對應

  2)用戶密碼,這個纔是該帳號的真正的密碼,不過這個密碼已經加密過了,可是有些黑客仍是可以解密的。因此爲了安全,這個文件屬性設置爲600,只容許root讀寫。

  3)上次更改面的日期,這個數字是這樣計算得來的,距離1970年1月1日到上次更改密碼的日期,例如上次更改密碼的日期是2012年1月1日,則這個值就是365*(2012-1970)+1=15331。

  4)要過多少天才能夠更改密碼,默認是0,即不限制。

  5)密碼多少天后到期。即在多少天內必須更改密碼,例如這裏設置成30,則30天內必須更改一次密碼,不然將不能登陸,默認是99999,能夠理解爲永遠不須要改。

  6)密碼到期前的警告期限,若這個值成7,則表示當7天后密碼過時時,系統就發出警告告訴用戶,提醒用戶的密碼將在7天后到期。

  7)帳號失效期限。你能夠這樣理解,若是設置這個值爲3,則表示:密碼已經到期,然而用戶並無在到期前修改密碼,那麼再過3天,則這個帳號就失效了,即鎖定了。

  8)帳號的生命週期。跟第三段同樣,是按距離1970年1月1日多少天算的。它表示的含義是,帳號在這個日期前可使用,到期後帳號做廢。

  9)做爲保留用的,沒有什麼意義。

 新增、刪除用戶和用戶組

  一、新增一個組 groupadd [-g GID] groupname

[root@localhost ~]# groupadd grptest1
[root@localhost ~]# tail -n 5 /etc/group
postfix:x:89:
mysql:x:1000:
www:x:1001:
zhouguowei:x:1002:
grptest1:x:1003:
[root@localhost ~]#

  不加-g則按照系統默認的gid建立組。

[root@localhost ~]# groupadd -g 1004 grptest2
[root@localhost ~]# tail -n 5 /etc/group
mysql:x:1000:
www:x:1001:
zhouguowei:x:1002:
grptest1:x:1003:
grptest2:x:1004:
[root@localhost ~]#

  -g選項能夠自定義gid

  二、刪除組 groupdel groupname

[root@localhost ~]# groupdel grptest1
[root@localhost ~]# groupdel grptest2
[root@localhost ~]# tail -n 5 /etc/group
postdrop:x:90:
postfix:x:89:
mysql:x:1000:
www:x:1001:
zhouguowei:x:1002:
[root@localhost ~]#

  三、增長用戶 useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]

  -u自定義UID

  -g使其屬於已經存在的某個GID

  -d自定義用戶的家目錄

  -M不創建家目錄

  -s自定義shell

[root@localhost ~]# useradd test10
[root@localhost ~]# tail -n 5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
www:x:1001:1001::/home/www:/bin/bash
zhouguowei:x:1002:1002::/home/zhouguowei:/bin/bash
test10:x:1003:1003::/home/test10:/bin/bash
[root@localhost ~]# useradd -u 1004 -g 1004 -M -s /sbin/nologin test11
[root@localhost ~]# tail -n 5 /etc/passwd
mysql:x:1000:1000::/home/mysql:/bin/bash
www:x:1001:1001::/home/www:/bin/bash
zhouguowei:x:1002:1002::/home/zhouguowei:/bin/bash
test10:x:1003:1003::/home/test10:/bin/bash
test11:x:1004:1004::/home/test11:/sbin/nologin
[root@localhost ~]# cd /home
[root@localhost home]# ls
mysql  test10  www  zhouguowei
[root@localhost home]#

  你會發現,建立test11時,加上了-M選項後,在/etc/passwd文件中test11那行的第六字段依然有/home/test11.但是ls查看該目錄是,會提示該目錄不存在。

  四、刪除用戶userdel [-r] username

[root@localhost home]# userdel test11
[root@localhost home]# userdel -r test10
[root@localhost home]# ls /home/test10
ls: cannot access /home/test10: No such file or directory
[root@localhost home]#

  -r選項的做用是刪除用戶時,連同用戶的加目錄一塊兒刪除。

 chfn更改用戶finger

  前面內容中提到了finger,即在/etc/passwd文件中的第5個字段中所顯示的信息,那麼如何去設定這個信息呢?

[root@localhost home]# chfn test
Changing finger information for test.
Name []: test
Office []: test'office
Office Phone []: 123456789
Home Phone []: 123654789

Finger information changed.
[root@localhost home]# tail -n 5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
www:x:1001:1001::/home/www:/bin/bash
zhouguowei:x:1002:1002::/home/zhouguowei:/bin/bash
test:x:1003:1003:test,test'office,123456789,123654789:/home/test:/bin/bash
[root@localhost home]#

  就是chfn這個命令。修改完後,就會在/etc/passwd文件中的那一行第5個字段中看到相關信息了,默認是空的。

建立、修改一個用戶的密碼 passwd [username]

  等建立完帳戶後,默認是沒有設置密碼的,雖然沒有密碼,但該帳戶一樣登陸不了系統。只有設置好密碼後方可登陸系統。

[root@localhost home]# passwd
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost home]# passwd test
Changing password for user test.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost home]#

  passwd後面不跟用戶名則是更改當前用戶的密碼,當前用戶爲root,因此此時修改的是root的密碼,後面跟test,則修改的是test的密碼。

用戶身份切換

  在linux系統中,有時候普通用戶有些事情是不能作的,除非是root用戶才能作到。這是就須要切換到root身份來作事了。

  用test帳號登陸linux系統,而後使用su -就能夠切換成root身份,前提是知道root的密碼。

Last login: Wed Sep  5 22:22:05 2018
[test@localhost ~]$ su -
Password: 
Last login: Wed Sep  5 22:23:20 CST 2018 on pts/0
[root@localhost ~]#

  你可使用echo $LOGNAME來查看當前登陸的用戶名

[root@localhost ~]# echo $LOGNAME
root
[root@localhost ~]# su - test
Last login: Wed Sep  5 22:24:37 CST 2018 from 10.0.30.1 on pts/0
[test@localhost ~]$ echo $LOGNAME
test
[test@localhost ~]$

  su的語法爲:su [-] username

  後面能夠跟「-」也能夠不跟,普通用戶su不加username時就是切換到root用戶,當前root用戶一樣能夠su到普通用戶。

  加「-」後會連同用戶的環境變量一塊兒切換過來。su test後雖然切換到了test用戶,可是當前目錄仍是切換前的/root目錄,而後當用su - test時切換用戶後則到了test的家目錄/home/test。當用root切換普通用戶時,是不須要輸入密碼的。這也體現了root用戶至高無上的權利。

  用su是能夠切換用戶身份,若是每一個普通用戶都能切換到root身份,若是某個用戶不當心泄露了root的密碼,那豈不是系統很是的不安全?沒有錯,爲了改進這個問題,產生了sudo這個命令。使用sudo執行一個root才能執行的命令是能夠辦到的,可是須要輸入密碼,這個密碼並非root的密碼而是用戶本身的密碼,默認只有root用戶能使用sudo命令,普通用戶想要使用sudo,則須要root預先設定的,即,使用visudo命令去相關的配置文件/etc/sudoers,若是沒有visudo這個命令,請先會用yum install -y sudo安裝。

root    ALL=(ALL)       ALL
test    ALL=(ALL)       ALL

  默認root可以sudo是由於這個文件中有一行「root ALL=(ALL) ALL」,在該行下面加入「test ALL=(ALL) ALL」,就可讓test用戶擁有sudo的權利。若是沒增長一個用戶就設置一行,這樣太麻煩了,因此你能夠這樣設置。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

  把這一行前面的「#」去掉,這一行生效。它的意思是,wheel這個組下面的全部用戶擁有了sudo的權限。

[root@localhost ~]# su test
[test@localhost root]$ touch 1.txt
touch: cannot touch 鈥.txt鈥 Permission denied
[test@localhost root]$ sudo touch 1.txt

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 test: 
[test@localhost root]$ ls -l 1.txt
ls: cannot access 1.txt: Permission denied
[test@localhost root]$ sudo ls -l 1.txt
-rw-r--r--. 1 root root 0 Sep  5 22:51 1.txt
[test@localhost root]$
相關文章
相關標籤/搜索