linux基础命令--userdel 删除用户帐户和相关文件

时间:2021-01-28 16:29:31

描述

  • userdel命令用于删除用户帐户和相关文件
  • userdel命令修改系统账户文件,删除所有涉及用户的信息,指定的用户(LOGIN)必须存在。

语法

  • userdel [options] LOGIN

选项列表

选项(常用的已加粗) 说明
-f, --force

强制删除用户账户,即使用户处于登录状态。它强制删除用户家目录和邮件池(一般在/var/spool/mail/目录下),即使其他用户家目录和指定的用户家目录同名或指定的用户没有邮件池

如果在/etc/login.defs中将USERGROUPS_ENAB定义为yes,并且存在与删除的用户同名的组,那么这个组也会被删除,即使它是另一个用户的主组。

注意:该选项很危险,可能会导致系统处于不一致的情况,谨慎使用。

-r, --remove

删除用户的家目录和邮件池(文件),包括它们自身。必须搜索和手动删除其他文件系统下的相关文件

-R, --root CHROOT_DIR 指定在CHROOT_DIR(改变后的根目录)下更改生效以及使用CHROOT_DIR目录下的配置文件
-Z, --selinux-user 删除用户登录的任何SELinux用户映射

说明

  • 应该先手动检查所有的文件系统,确保没有任何文件仍然属于该用户。
  • 不能删除NIS客户端上的任何NIS属性,这必须在NIS服务器上执行。
  • 如果正在运行属于该账户的进程,userdel将不会允许删除该账户;此时,你需要先kill该进程或锁定用户的口令(或账户),然后再删除账户;当前也可以使用-f选项强制删除。
  • 如果/etc/login.defs的USERGROUPS_ENAB设置为yes, userdel将删除与用户同名的组。为了避免口令和组数据库中的不一致,userdel会检查该组不会作为另一个用户的主组,否则只会警告而不会删除组。-f选项可以强制删除该组

实例

  • 分别使用-f和-r选项测试删除共享的主组。

[root@pople ~]# ls -la /home/test/ /var/mail/test /var/spool/mail/test 
-rw-rw---- 1 test mail  0 Apr 10 13:05 /var/mail/test
-rw-rw---- 1 test mail  0 Apr 10 13:05 /var/spool/mail/test

/home/test/:
total 16
drwx------  2 test test  83 Apr 10 18:53 .
drwxr-xr-x. 5 root root  41 Apr 10 13:05 ..
-rw-------  1 test test  41 Apr 10 18:53 .bash_history
-rw-r--r--  1 test test  18 Oct 31 01:07 .bash_logout
-rw-r--r--  1 test test 193 Oct 31 01:07 .bash_profile
-rw-r--r--  1 test test 231 Oct 31 01:07 .bashrc
[root@pople ~]# useradd -g test test_userdel                                    # 添加一个新用户,设置它的初始主组为用户test的主组
[root@pople ~]# id test && id test_userdel                       # 共享一个用户组:test
uid=1002(test) gid=1002(test) groups=1002(test)
uid=1003(test_userdel) gid=1002(test) groups=1002(test)
[root@pople ~]# userdel -r test                              # 删除用户test,提示不能删除组test,因为该组也是另一个用户的主组,但除用户组之外的信息都已经删除了。
userdel: group test is the primary group of another user and is not removed.
[root@pople ~]# tail -2 /etc/passwd && tail -2 /etc/group               # 可以发现test组还存在,用户test已删除。
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
test_userdel:x:1003:1002::/home/test_userdel:/bin/bash
tss:x:59:
test:x:1002:
[root@pople ~]# useradd -g test test                           # 恢复用户test,进行下一步测试。
[root@pople ~]# id test && id test_userdel                               # 对比两用户信息。
uid=1004(test) gid=1002(test) groups=1002(test)
uid=1003(test_userdel) gid=1002(test) groups=1002(test)
[root@pople ~]# userdel -f test                                        # 可以看到跟使用-r选项不同的是使用-f选项没有报任何异常,强制性删除。
[root@pople ~]# tail -2 /etc/passwd && tail -2 /etc/group              # 所有有关用户test的信息已删除,包括其主组,即使该组是另一个用户的主组。
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
test_userdel:x:1003:1002::/home/test_userdel:/bin/bash
stapdev:x:158:
tss:x:59:
[root@pople ~]# id test_userdel                              # 可以发现/etc/group文件里已经没有组test文件的信息,用户test_userdel的gid是不存在的,无效的。
uid=1003(test_userdel) gid=1002 groups=1002
[root@pople ~]# su - test_userdel
/usr/bin/id: cannot find name for group ID 1002                                 # 切换到该用户下提示没有找到用户的gid对应的组名
[test_userdel@pople ~]$ touch a.txt                                             # 但是依旧能创建一个文件,不过文件的属组是不存在的。
[test_userdel@pople ~]$ ls -l a.txt 
-rw-r--r-- 1 test_userdel 1002 0 Apr 15 15:36 a.txt

总结:删除一个用户账户,应该确保没有任何文件仍然属于该账户,而且应谨慎使用-f选项,手动检查用户组不被其他用户当作主组来使用,否则会导致组信息异常。