1. 程式人生 > 其它 >Linux使用者和組管理命令

Linux使用者和組管理命令

使用者管理命令

  • useradd
    • 作用:建立新的Linux使用者
    • 格式:useradd [OPTION]... USERNAME
    • 常見選項:
      -u UID 
      -o 配合-u 選項,不檢查UID的唯一性
      -g GID 指明使用者所屬基本組,可為組名,也可以GID
      -c "COMMENT" 使用者的註釋資訊
      -d HOME_DIR 以指定的路徑(不存在)為家目錄
      -s SHELL 指明使用者的預設shell程式,可用列表在/etc/shells檔案中
      -G GROUP1[,GROUP2,...] 為使用者指明附加組,組須事先存在
      -N 不建立私用組做主組,使用users組做主組
      -r 建立系統使用者 CentOS 6之前: ID<500,CentOS7 以後: ID<1000
      -m 建立家目錄,用於系統使用者
      -M 不建立家目錄,用於非系統使用者
      -p 指定加密的密碼
      
    • 範例:
      useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
      
    • useradd命令的預設值由/etc/default/useradd定義
      [root@centos8 ~]#cat /etc/default/useradd
      # useradd defaults file
      GROUP=100
      HOME=/home
      INACTIVE=-1    #對應/etc/shadow檔案第7列,即使用者密碼過期的寬限期
      EXPIRE=        #對應/etc/shadow檔案第8列,即使用者帳號的有效期
      SHELL=/bin/bash
      SKEL=/etc/skel
      CREATE_MAIL_SPOOL=yes
      
    • 顯示並更改預設設定
      useradd -D 
      useradd –D -s SHELL
      useradd –D –b BASE_DIR
      useradd –D –g GROUP
      
    • 新建使用者的相關檔案
      /etc/default/useradd
      /etc/skel/* 	#系統會將該目錄下的檔案拷貝到新建使用者的家目錄
      /etc/login.defs
      
  • usermod
    • 作用:修改使用者屬性
    • 格式:usermod [OPTION]... USERNAME
    • 常見選項:
      -u UID: 新UID
      -g GID: 新主組
      -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項
      -s SHELL:新的預設SHELL
      -c 'COMMENT':新的註釋資訊
      -d HOME: 新家目錄不會自動建立;若要建立新家目錄並移動原家資料,同時使用-m選項
      -l login_name: 新的名字
      -L: lock指定使用者,在/etc/shadow 密碼欄的增加 ! 
      -U: unlock指定使用者,將 /etc/shadow 密碼欄的 ! 拿掉
      -e YYYY-MM-DD: 指明使用者賬號過期日期
      -f INACTIVE: 設定非活動期限,即寬限期
      
  • userdel
    • 作用:刪除Linux使用者
    • 格式:userdel [OPTION]... USERNAME
    • 常見選項:
      -f, --force 	強制刪除使用者
      -r, --remove	刪除使用者家目錄和郵箱
      
    • 範例:強制刪除使用者和資料
      [root@centos8 ~]#useradd test
      [root@centos8 ~]#id test
      uid=1001(test) gid=1001(test) groups=1001(test)
      
      #在另一終端用test登入
      [root@centos8 ~]#su - test
      [test@centos8 ~]$
      
      #刪除正在登入的使用者失敗
      [root@centos8 ~]#userdel -r test
      userdel: user test is currently used by process 29909
      [root@centos8 ~]#id test
      uid=1001(test) gid=1001(test) groups=1001(test)
      
      #強制刪除使用者
      [root@centos8 ~]#userdel -rf test
      userdel: user test is currently used by process 29909
      [root@centos8 ~]#id test
      id: ‘test’: no such user
      

組賬號管理命令

  • groupadd

    • 作用:建立組
    • 格式:groupadd [OPTION]... group_name
    • 常見選項:
      -g GID 指明GID號;[GID_MIN, GID_MAX]
      -r 建立系統組,CentOS 6之前: ID<500,CentOS 7以後: ID<1000
      
    • 範例:
      groupadd -g 48 -r apache
      
  • groupmod

    • 作用:修改組屬性
    • 格式:groupmod [OPTION]... GROUP
    • 常見選項
      -n group_name: 新名字
      -g GID: 新的GID
      
  • groupdel

    • 作用:刪除組
    • 格式:groupdel [options] GROUP
    • 常見選項:
      -f, --force 強制刪除,即使是使用者的主組也強制刪除組,但會導致無主組的使用者不可用無法登入
      

示例

  1. 請總結描述使用者和組管理類命令的使用方法並完成以下練習:

    (1)、建立組distro,其GID為2019;
    [root@centos8 ~]# groupadd -g 2019 distro 
    [root@centos8 ~]# getent group distro	#檢視修改結果
    distro:x:2019:
    
    (2)、建立使用者mandriva, 其ID號為1005;基本組為distro;
    [root@centos8 ~]# useradd -u 1005 -g distro mandriva
    [root@centos8 ~]# id mandriva	#檢視修改結果
    uid=1005(mandriva) gid=2019(distro) groups=2019(distro)
    
    (3)、建立使用者mageia,其ID號為1100,家目錄為/home/linux;
    [root@centos8 ~]# useradd -u 1100 -d /home/linux mageia
    [root@centos8 ~]# id mageia	#檢視uid
    uid=1100(mageia) gid=1100(mageia) groups=1100(mageia)
    [root@centos8 ~]# getent passwd mageia 	#檢視家目錄
    mageia:x:1100:1100::/home/linux:/bin/bash
    
    (4)、給使用者mageia新增密碼,密碼為mageedu,並設定使用者密碼7天后過期
    [root@centos8 ~]# echo 'mageedu' | passwd mageia --stdin	#修改密碼
    Changing password for user mageia.
    passwd: all authentication tokens updated successfully.
    [root@centos8 ~]# chage -E `date +%F -d '7 days'` mageia	#修改賬戶過期時間
    [root@centos8 ~]# chage  -l mageia	#檢視賬戶資訊
    Last password change					: Apr 10, 2022
    Password expires					: never
    Password inactive					: never
    Account expires						: Apr 17, 2022	#賬戶過期時間
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    [root@centos8 ~]# 
    [root@centos8 ~]# date +%F	#當前系統時間
    2022-04-10
    
    (5)、刪除mandriva,但保留其家目錄;
    [root@centos8 ~]# userdel mandriva 	#刪除使用者(預設保留家目錄)
    [root@centos8 ~]# ls /home/ | grep mandriva	#家目錄仍存在
    mandriva
    
    (6)、建立使用者slackware,其ID號為2002,基本組為distro,附加組peguin;
    [root@centos8 ~]# groupadd peguin	#建立組
    [root@centos8 ~]# useradd slackware -u 2002 -g distro -G peguin	#建立使用者並指定基本組和附加組
    [root@centos8 ~]# id slackware	#檢視結果
    uid=2002(slackware) gid=2019(distro) groups=2019(distro),2020(peguin)
    
    (7)、修改slackware的預設shell為/bin/tcsh;
    [root@centos8 ~]# usermod -s /bin/tcsh slackware
    [root@centos8 ~]# getent passwd slackware
    slackware:x:2002:2019::/home/slackware:/bin/tcsh
    
    (8)、為使用者slackware新增附加組admins,並設定不可登陸。
    [root@centos8 ~]# groupadd admins	#建立組
    [root@centos8 ~]# usermod -s /bin/nologin -G admins slackware
    [root@centos8 ~]# getent passwd slackware	#檢視賬號資訊
    slackware:x:2002:2019::/home/slackware:/bin/nologin
    [root@centos8 ~]# su salckware	#使用者不可登入
    su: user salckware does not exist
    
  2. 建立使用者user1、user2、user3。在/data/下建立目錄test

    [root@centos8 ~]# useradd user1; useradd user2; useradd user3	#新增使用者
    (1)、目錄/data/test屬主、屬組為user1
    [root@centos8 ~]# mkdir /data/test	#建立目錄
    [root@centos8 ~]# chown user1.user1 /data/test/	#修改屬主和屬組
    [root@centos8 ~]# ll -d /data/test/	#檢視結果
    drwxr-xr-x. 2 user1 user1 6 Apr 10 14:33 /data/test/
    
    (2)、在目錄屬主、屬組不變的情況下,user2對檔案有讀寫許可權
    [root@centos8 ~]# ll -d /data/test/	#觀察發現,/data/test目錄其他人許可權為r-x,因此user2預設可以檢視並修改該目錄下的檔案
    drwxr-xr-x. 2 user1 user1 6 Apr 10 14:33 /data/test	
    
    (3)、user1在/data/test目錄下建立檔案a1.sh, a2.sh, a3.sh, a4.sh,設定所有使用者都不可刪除1.sh,2.sh檔案、除了user1及root之外,所有使用者都不可刪除a3.sh, a4.sh
    [root@centos8 ~]# chattr +i /data/test/a{1,2}.sh	#新增特殊許可權i(非檔案所有者,不可以刪除對應的檔案)
    [root@centos8 ~]# lsattr /data/test/a{1,2}.sh	#檢視修改結果
    ----i--------------- /data/test/a1.sh
    ----i--------------- /data/test/a2.sh
    
    [root@centos8 ~]# ll /data/test/a{1,2}.sh	檢視檔案屬性
    -rw-r--r--. 1 root root 0 Apr 10 14:43 /data/test/a1.sh
    -rw-r--r--. 1 root root 0 Apr 10 14:43 /data/test/a2.sh
    
    [root@centos8 ~]# rm -rf /data/test/a{1,2}.sh	#檔案屬主和陣列均為root,但是root不可以刪除目標檔案
    rm: cannot remove '/data/test/a1.sh': Operation not permitted
    rm: cannot remove '/data/test/a2.sh': Operation not permitted
    
    [root@centos8 ~]# ll -d /data/test/a{3,4}.sh	#檢視檔案屬性
    -rw-r--r--. 1 root root 0 Apr 10 14:43 /data/test/a3.sh
    -rw-r--r--. 1 root root 0 Apr 10 14:43 /data/test/a4.sh
    
    [root@centos8 ~]# chmod o+t /data/test/a{3,4}.sh	#新增特殊許可權sticky
    [root@centos8 ~]# ll -d /data/test/a{3,4}.sh	檢視檔案特殊許可權(顯示為 T )
    -rw-r--r-T. 1 root root 0 Apr 10 14:43 /data/test/a3.sh
    -rw-r--r-T. 1 root root 0 Apr 10 14:43 /data/test/a4.sh
    
    [user3@centos8 root]$ exit	#切換為root使用者
    [root@centos8 ~]# chown user1 /data/test/a{3,4}.sh	#更改檔案所有者為user1
    [root@centos8 ~]# ll -d /data/test/a{3,4}.sh	#檢視檔案屬性
    -rw-r--r-T. 1 user1 root 0 Apr 10 14:43 /data/test/a3.sh
    -rw-r--r-T. 1 user1 root 0 Apr 10 14:43 /data/test/a4.sh
    
    [root@centos8 ~]# su user3	#切換任一使用者(其他人)
    [user3@centos8 root]$ rm -rf /data/test/a3.sh	#沒有刪除許可權
    rm: cannot remove '/data/test/a3.sh': Permission denied
    
    [root@centos8 ~]# su user1	#切換使用者為user1(檔案所有者)
    [user1@centos8 root]$ rm -rf /data/test/a3.sh	#可以刪除目標檔案
    [user1@centos8 root]$ exit	#切換root使用者
    [root@centos8 ~]# rm -rf /data/test/a4.sh	#可以刪除目標檔案
    
    (4)、user3增加附加組user1,同時要求user1不能訪問/data/test目錄及其下所有檔案
    [root@centos8 ~]# usermod -G user1 user3	#新增附加組
    [root@centos8 ~]# id user3
    uid=2005(user3) gid=2005(user3) groups=2005(user3),2003(user1)
    
    [root@centos8 ~]# ll -d /data/test/	檢視目錄屬性
    d---------+ 2 user1 user1 32 Apr 10 15:06 /data/test/
    [root@centos8 ~]# chown root /data/test/	#更改目錄所有者為root
    [root@centos8 ~]# ll -d /data/test/	#檢視更改結果
    d---------+ 2 root user1 32 Apr 10 15:06 /data/test/
    
    [root@centos8 ~]# su user1	#切換使用者為user1
    [user1@centos8 root]$ ls /data/test/	#user1無檢視許可權
    ls: cannot open directory '/data/test/': Permission denied
    [user1@centos8 root]$ vim /data/test/	#user1無編輯許可權
    bash: vim: command not found
    [user1@centos8 root]$ cd /data/test/	#user1無進入目錄的許可權
    bash: cd: /data/test/: Permission denied
    [user1@centos8 root]$ 
    [user1@centos8 root]$ 
    
    (5)、清理/data/test目錄及其下所有檔案的acl許可權
    [user3@centos8 root]$ setfacl -R -b /data/test/
    [user3@centos8 root]$ getfacl -R /data/test/	#檢視結果
    getfacl: Removing leading '/' from absolute path names
    # file: data/test/
    # owner: user1
    # group: user1
    # flags: --t
    user::rwx
    group::r-x
    other::r-x
    ...
    
  3. 統計出/etc/passwd檔案中其預設shell為非/sbin/nologin的使用者個數,並將使用者都顯示出來

    [root@centos8 ~]# cat /etc/passwd | grep -v '/sbin/nologin' | cut -d ':' -f 1
    root
    sync
    shutdown
    halt
    mageia
    slackware
    user1
    user2
    user3
    [root@centos8 ~]#
    
  4. 查出使用者UID最大值的使用者名稱、UID及shell型別
    參考連結 https://www.jianshu.com/p/f010af661ba0

    [root@centos8 ~]# getent passwd | sort -t: -k3 -n | tail -1 | cut -d: -f1,3,7
    nobody:65534:/sbin/nologin
    
  5. 統計當前連線本機的每個遠端主機IP的連線數,並按從大到小排序

    [root@centos8 ~]# ss -nt|tail -n 2|tr -s ' ' :|cut -d: -f6|sort|uniq -c|sort -n
      2 10.0.0.1
    
  6. 編寫指令碼disk.sh,顯示當前硬碟分割槽中空間利用率最大的值

    [root@centos8 ~]# cat disk.sh 	#指令碼內容
    #!/bin/bash
    #
    maxvalue=`df -h | tr -s ' ' | cut -d' ' -f5 | sort -rn | head -1`
    echo -e "The value of the maximum space utilization in the current hard disk partition is:\033[1;4;31m$maxvalue\033[0m"
    [root@centos8 ~]# ./disk.sh 	#指令碼執行結果
    The value of the maximum space utilization in the current hard disk partition is:17%
    
  7. 編寫指令碼 systeminfo.sh,顯示當前主機系統資訊,包括:主機名,IPv4地址,作業系統版本,核心版本,CPU型號,記憶體大小,硬碟大小
    參考連結 https://www.cnblogs.com/Gao-Wen/p/15060029.html

    點選檢視程式碼
    [root@centos8 ~]# cat systeminfo.sh 
    #!/bin/bash
    #
    HOSTNAME=`hostname`
    IP=`ip a s | grep "inet" | grep -v "inet6" | grep -v "inet 127.0.0.1" | awk '{print $2}' | cut -d'/' -f1 | tr '\n' "  "`
    SYSTEM=`cat /etc/centos-release`
    CORE=`uname -r`
    CPU=`cat /proc/cpuinfo | grep 'model name' |uniq | cut -d: -f2`
    MEMORY=`free -mh | grep -i "mem" | awk '{print$2}'`
    DISKNUM=`fdisk -l | grep -i "/dev" | grep -i "disk" | wc -l`
    systemname=("HOSTNAME" "IP" "SYSTEM VERSION" "CORE VERSION" "CPU" "MEMORY SIZE")
    systeminfo=("$HOSTNAME" "$IP" "$SYSTEM" "$CORE" "$CPU" "$MEMORY")
    for s in `seq 1 $DISKNUM`;do
    	eval DISK$s=`fdisk -l | grep -i "/dev" | grep -i "disk" | head -$s | tail -1|  awk '{print $2$3$4}' | cut -d',' -f1`
    	eval systeminfo[$(($s+5))]='$'DISK$s
    	systemname[$(($s+5))]="DISK$s SIZE"
    done
    for i in ${!systeminfo[*]};do
    	echo "---------------------------------------------------------------------"
    	printf "|%-15s| %-50s|\n" "${systemname[$i]}" "${systeminfo[$i]}"
    done
    echo "---------------------------------------------------------------------"
    
    #執行結果
    [root@centos8 ~]# ./systeminfo.sh 
    ---------------------------------------------------------------------
    |HOSTNAME       | centos8.3.magedu.com                              |
    ---------------------------------------------------------------------
    |IP             | 10.0.0.153 3.3.3.3                                |
    ---------------------------------------------------------------------
    |SYSTEM VERSION | CentOS Linux release 8.3.2011                     |
    ---------------------------------------------------------------------
    |CORE VERSION   | 4.18.0-240.el8.x86_64                             |
    ---------------------------------------------------------------------
    |CPU            |  11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz   |
    ---------------------------------------------------------------------
    |MEMORY SIZE    | 1.9Gi                                             |
    ---------------------------------------------------------------------
    |DISK1 SIZE     | /dev/nvme0n1:200GiB                               |
    ---------------------------------------------------------------------
    
  8. 20分鐘內通關vimtutor(可參考https://yyqing.me/post/2017/2017-02-22-vimtutor-chinese-summary)li

    #安裝並啟動中文版vimtutor
    [root@centos8 ~]# rpm -qi vim-enhanced || yum install -y vim-enhanced && vimtutor zh