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=`hostname -I`
    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
    
posted @ 2022-04-10 17:44  浅笑人伤  阅读(360)  评论(0)    收藏  举报