关注微信公众号:CodingTechWork,一起学习进步。

引言

  在Linux系统中,我们常常会看到目录或文件的所属关系:

[root@linux01 ~]#  ll -d test.sh
-rw-r----- 1 root root 144 11月 20 2019 test.sh

  其中root root就是文件拥有者和群组,root是超管账号,接下来我们来详细学习这些账号相关的概念以及相关命令使用。

归属

文件拥有者

  User:Linux是一个多用户多任务的系统,一个物理机或者虚拟机往往会有很多人同时使用,每个用户在各自的家目录进行操作(如部署自己的应用、存储文件等),这个时候就需要将这些用户进行隔离,权限分开。用户A无权读写用户B的相关目录,用户B无权读写用户A的目录,保证每个人各自的隐私。

群组

  Group:多个使用者需要共享相同的东西,归属于同一个群组,举例来说,一个开发团队,在代码仓库中会属于同一个仓库地址下,这样一个团队的成员可以共享这个仓库地址下的代码进行读写,而其他开发团队的成员无权读写这个团队的代码仓库。

其他人

  Others:其他人这个概念比较好理解,相对于本群组而言,跟其无关的都是其他人。

关系

  1. 管家相当于root用户,所有幢都可以访问;
  2. 1幢101、1幢201、1幢301都是User,是用户,都有各自单独的家(家目录);
  3. 1幢和2幢都是Group,里面的1幢101、1幢201、1幢301等相当于用户,在一幢可以共享电梯的使用;
  4. 对于1幢而言,2幢就是Others,用不了1幢的电梯;

账号管理

账号识别码

  对于计算机而言,计算机不会认识账号昵称之类的别名,只会识别二进制(0和1),在Linux中也是同样的,主机对于账号只是识别ID。
  登录账号一般有两个ID,一个是使用者ID(UDI, User ID),存放在/etc/passwd中;一个是群组ID(GID, Group ID) ,存放在/etc/group中。我们可以通过id user_name的方式来查看UID和GID。
  文件或者目录查看属性时,首先会根据/etc/passwd和/etc/group的内容,利用UID和GID显示对应账号和群组名称,从而判断自己的拥有者和群组。

使用者账号

账号登录流程

  1. 在Linux系统中输入主机ip,账号和密码;
  2. 系统从/etc/passwd中寻找输入的账号,若没有找到,则退出;否则,从/etc/passwd以及/etc/group将该账号对应的UID与GID读取出来,同时也会读取用户家目录及shell设置;
  3. 系统进入/etc/shadow中找到对应账号与UID,核对输入密码;
  4. 若账号和密码都核对无误,则进入shell。

/etc/passwd详解

  /etc/passwd是系统用户配置文件,这个文件中存储了系统中所有用户的基本信息。
  该文件是对所有用户都可读的:

[root@linux01 ~]#  ll -d /etc/passwd
-rw-r--r-- 1 root root 1349 9月 3 10:18 /etc/passwd

  文件结构详解如下:

[root@linux01 ~]#  head -n 5 /etc/passwd
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:/bin/false
lp:x:4:7:lp:/var/spool/lpd:/bin/false

一共7个字段,每一行中的字段由:隔开。第一个一般都是root系统管理员账户信息。

  1. 账号名称:登录账号的名称,与UID对应。

  2. 密码:早起Unix系统密码放置在改字段中,后因安全问题,放置密码数据被窃取,改放到/etc/shadow中,所以这边显示为x

  3. UID:账号的使用者识别码。

id范围 id对应使用者的特性
0 (系统管理员) UID=0时,表示该账号为root权限(系统管理员),普通账户的UID改为0即拥有root权限,但不建议修改。
1~999(系统账号) UID=1~999时,即为系统保留的系统账号,用于更小的权限去操作系统中的服务。
1000~60000(可登陆账号) UID=1000~60000时,表示一般使用者的账号。
  1. GID:该信息与/etc/group相关联,下面会阐述该目录内容的结构。

  2. 使用者信息说明栏:解释说明作用,一般配合finger使用。

  3. 主文件夹:用户家目录,一般useradd userA后,会自动为userA用户创建/home/userA用户家目录,rott的用户家目录在/root下。

  4. shell:用户登录系统后会取得一个shell与系统核心联系,从而在系统上进行操作。

/etc/shadow文件结构

  /etc/shadow是用于存储 Linux 系统中所有用户对应的密码信息,我们也称为“影子文件”。
  除了root用户,其他用户没有权限访问该文件。

[root@linux01 ~]#  ls -al /etc/shadow
-r-------- 1 root root 1101 9月 3 10:25 /etc/shadow
[t1@linux01 ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

  文件结构详解如下:

[root@linux01 ~]#  head -n 5 /etc/shadow
root:$6$T211m/bzdf7/N$AV4IJJWMgmCNuovXSlu6LvkUwQ5W1JKTVgy7fdarewvdsfs.SB7j7oJSuKvV9sg1VXrTw3M03FfRsn8NqY6cQ/:18225:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:!*:17110:0:99999:7:::
lp:!*:17110:0:99999:7:::
  1. 账号名称:与/etc/passwd对应,账号名称。

  2. 密码:存放加密的密码。

  3. 最近更改密码的累积天数:该字段记录的是变更密码的那天日期,从1970年1月1日作为1开始累积,这个累积的天数可以通过代码进行计算。

echo $(($(date --date="2020/09/03" +%s)/86400+1))

  其中,86400是一天的秒数,+1是为了补齐1970年1月1日那天。

  1. 密码不可被更改的天数:该字段限制了密码从最后一次变更后,需要经过多少天才可以进行变更。若为0,则表示无限制,可以随时更改密码。

  2. 密码需要重新更改的天数:该字段限制了密码从最后一次变更后,需要经过多少天就应该再次变更。若为99999,表示273年,也就是无限制。

  3. 密码需要更改前警告提示的天数:账号密码有效期快到的时候,会提前进行提示警告。

  4. 密码失效时间:密码更新时间(第3字段)+重新变更时间(第5字段)为有效期,过期后,还没有更新密码,密码就会过期。

  5. 账号失效日期:类似于第三个字段进行累计失效日期计算,过期后,账号无法使用。

  6. 保留:保留字段。

群组

  我们在上述的/etc/passwd账号配置文件中发现有GID字段, 而这个字段是在/etc/group相关联。

/etc/group文件结构

  /etc/group文件存储群组相关配置信息。

[root@linux01 ~]#   head -n 5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
  1. 群组名称:群组的名称,与GID对应。

  2. 群组密码:群组的密码,通常给群组管理员使用,一般不设置,密码不会再此显示,会在/etc/gshadow中显示,在此只会显示x

  3. GID:群组的ID,也就是/etc/passwd第四个字段的GID。

  4. 群组支持的其他账号名称:一个账号可以加入多个群组,当其他账户加入该群组后,会填入到该字段中,逗号隔开。

/etc/gshadow

  /etc/gshadow是存放群组的密码等信息;

[root@linux01 ~]#  head -n 5 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
  1. 群组名称:对应账户的群组名称;

  2. 群组密码:群去的密码;若开头为!则表示无合法密码,无群组管理员;

  3. 群组管理员账号:群组管理员的账号名称

  4. 有加入该群组支持的所属账号:群组下所支持的账号,与/etc/group中的保持一致。

三文件的关系

/etc/passwd、/etc/shadow、/etc/group

群组分类

  群组分为初始群组有效群组,初始群组就是/etc/passwd中的第四个字段中GID对应的群组;有效群组就是某个用户userA可以加入到其他群组userB中,这个群组userB对于这个用户userA来说就是有效群组。
  举例:假设通过useadd命令创建了t1和t2用户,然后通过usermod命令将t1用户加入到t2群组内。

[root@linux01 ~]#  usermod -G t2 t1

其中-G是指定有效群组。

  1. 我们可以在/etc/group中看到t1用户已加入到t2群组的第四个字段中。
[root@linux01 ~]#  grep t1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:t1:x:1002:1002::/home/t1:/bin/bash
/etc/shadow:t1:$6$9OxP0pfl$0qLlLCi4WNHcK5yuGHDIXPKQ2A/Ilm1zBkf73fS8v1g0EsLa9.0Vavi8oInFfGLyvfU9ulsgWVUzJRbGUJuEq/:18508:0:60:7:::
/etc/group:t1:x:1002:
/etc/group:t2:x:1003:t1
  1. 我们也可以登录t1账号后,通过groups命令查看所支持的群组
[root@linux01 ~]#  su - t1
上一次登录:四 9月 3 16:22:46 CST 2020pts/0 上
[t1@linux01 ~]$ groups
t1 t2
[t1@linux01 ~]$ touch test0.txt
[t1@linux01 ~]$ ll -d test0.txt
-rw-r----- 1 t1 t1 0 Sep 3 17:53 test0.txt

第一个t1是有效群组,查看到新建的文件的使用者是t1,所属群组也是t1。

  1. 我们可以通过newgrp来切换有效群组
[t1@linux01 ~]$ newgrp t2
[t1@linux01 ~]$ groups
t2 t1
[t1@linux01 ~]$ touch test.txt
[t1@linux01 ~]$ ll -d test.txt
-rw-r----- 1 t1 t2 0 Sep 3 18:01 test.txt

我们可以看到文件使用者是t1,所属群组是t2。

账号命令

useradd

概述

  useradd命令是新建账号命令。

语法格式

useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 主目录的绝对路径] [-s shell] 使用者账号名

参数详解

[root@linux01 ~]#  useradd -help
用法:useradd [选项] 登录
useradd -D
useradd -D [选项] 选项:
-b, --base-dir BASE_DIR 新账户的主目录的基目录
-c, --comment COMMENT 新账户的 GECOS 字段,也就是/etc/passwd的第五字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER

默认配置

[root@linux01 ~]#  useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
  1. GROUP=100:新建账号的初始群组使用GID为100(群组为users);但是CentOS是私有群组机制,所以系统会创建一个与账号一样的群组给用户作为初始群组,该系统不会参考100数值。只有遵守公有群组机制的系统才会参考该数值。
  2. HOME=/home:用户主文件夹的基准目录(basedir,用户家目录),用户的主文件夹通常就是与账号同名的目录,目录将会拼接在该设置值的目录后,所以一般用户家目录为/home/user_name格式。
  3. INACTIVE=-1:密码过期后是否会失效,-1代表密码永远不会失效,若为其他数值n,则表示过期n天后失效。该值对应在/etc/shadow中的第7个字段。
  4. EXPIRE=:账号失效日期,对应/etc/shadow中的第8个字段,可以设置账号在某个日期后是失效,而不管密码是否失效。默认不设置。
  5. SHELL=/bin/bash:默认使用的shell程序文件名
  6. SKEL=/etc/skel:用户主文件夹参考基准目录,一个新建的账号对应的用户家目录,如/home/userA这个目录的各个数据都是从/etc/skel中复制过去,如果在该目录下创建了/etc/skel/test,则后续新增用户时,主文件夹中会包含test文件。如下示例:
[root@linux01 ~]#  touch /etc/skel/test
[root@linux01 ~]# useradd t3
[root@linux01 ~]# cd /home/t3/
[root@linux01 /home/t3]# ll
总用量 0
-rw-r----- 1 t3 t3 0 9月 4 09:44 test
  1. CREATE_MAIL_SPOOL=yes:创建使用者的mailbox,查看路径等信息,可以通过cat /etc/login.defs查看路径。如下示例查看:
[root@linux01 ~]#  ll /var/spool/mail/t3
-rw-rw---- 1 t3 mail 0 9月 4 09:44 /var/spool/mail/t3

示例

示例1

无参创建:

[root@linux01 ~]#  useradd u1
[root@linux01 ~]# ll -d /home/u1/
drwx------ 2 u1 u1 4096 9月 4 09:11 /home/u1/
[root@linux01 ~]# grep u1 /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:u1:x:1004:1004::/home/u1:/bin/bash
/etc/shadow:u1:!!:18509:0:90:7:::
/etc/group:u1:x:1004:
/etc/gshadow:u1:!::

说明:

  1. /etc/passwd中创建一行与账号相关的数据,包含了UID、GID、用户家目录等信息;
  2. /etc/shadow中创建一行与账号密码相关的数据,如果没有指定密码,则无密码填入;若需要指定密码,则需要使用passwd user_name命令来指定密码;
  3. /etc/group中创建一行与账号群组相关的数据,加入一个与账号名称一样的群组名称;
  4. /etc/gshadow中创建一行与账号群组密码相关的数据,包含群组名称、群组管理密码等信息;
  5. /home下创建一个与账号名称相同的用户家目录,用于使用者主文件夹,且权限为700(drwx------)

示例2

加参创建:

[root@linux01 ~]#  useradd -u 1009 -g users u2
[root@linux01 ~]# ll -d /home/u2/
drwx------ 2 u2 users 4096 9月 4 09:16 /home/u2/
[root@linux01 ~]# grep u2 /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:u2:x:1009:100::/home/u2:/bin/bash
/etc/shadow:u2:!!:18509:0:90:7:::

说明:

  1. -u是指定了账号的UID,我们可以看到/etc/passwd中的第3栏的UID是我们指定的1009;
  2. -g是指定了初始群组,我们可以看到/etc/passwd中的第4栏的GID是群组users对应的100;因为指定了初始群组,/etc/group中就不会主动创建与账号同名的群组,所以在/etc/group/etc/gshadow中没有查看到u2相关的数据。

示例3

系统账号:

[root@linux01 ~]#  useradd -r u3
[root@linux01 ~]# ll -d /home/u3
ls: 无法访问/home/u3: 没有那个文件或目录
[root@linux01 ~]# grep u3 /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:u3:x:996:992::/home/u3:/bin/bash
/etc/shadow:u3:!!:18509::::::
/etc/group:u3:x:992:
/etc/gshadow:u3:!::

说明:

  1. -r参数代表创建一个系统账号;
  2. /etc/passwd中的第3栏看到数字为996,符合规定,1000及以后的号为一般账号,1000之前的号为系统账号;
  3. 由于系统账号主要用于进行运行系统所需服务的权限设置,所以系统账号默认没有创建用户家目录。

useradd命令总结

  useradd命令执行后,会涉及到以下文件或目录的变动:

  1. 用户账号和密码相关文件:/etc/passwd,/etc/shadow
  2. 用户群组和密码相关文件:/etc/group,/etc/gshadow
  3. 用户的主文件夹(用户家目录):/home/账号名称

passwd命令

概述

  passwd命令是修改账号密码的命令。

语法格式

  1. root或者账号自己使用:passwd [--stdin] [账号名称]
  2. root账号使用:passwd [-l] [-u] [--stdin] [-S] [-n 天数] [-x 天数] [-w 天数] [-i 日期] 账号

参数详解

[root@linux01 ~]#  passwd --help
用法: passwd [选项...] <帐号名称>
-k, --keep-tokens 保持身份验证令牌不过期
-d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
-l, --lock 锁定指名帐户的密码(仅限 root 用户)
-u, --unlock 解锁指名账户的密码(仅限 root 用户)
-e, --expire 终止指名帐户的密码(仅限 root 用户)
-f, --force 强制执行操作
-x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作)
-n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作)
-w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
-i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
-S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作)
--stdin 从标准输入读取令牌(只有根用户才能进行此操作) Help options:
-?, --help Show this help message
--usage Display brief usage message

密码一般要求

  1. 密码不能和账号同名;
  2. 密码尽量不尧选字典中的字符;
  3. 密码需要超过8个字符;
  4. 密码不尧使用个人信息(身份证、手机号、生日等);
  5. 密码不尧使用简单的关系式,如1+2=3;
  6. 密码计量使用大小写字符数字、特殊字符($,_,-等)组合。

示例

示例1

无参更改

[root@linux01 ~]#  passwd u1
更改用户 u1 的密码 。
新的 密码:
无效的密码: 过短
无效的密码: 过于简单
重新输入新的 密码:
抱歉,密码不匹配。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
抱歉,密码不匹配。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

我们可以看到,不管是过短、还是过于简单都会有提示,一直更改到符合密码规范才会生效。在/etc/login.defs中我们可以看到对于密码的一些要求。

示例2

有参更改,通过--stdin参数,从标准输入读取令牌(只有根用户才能进行此操作)。

[root@linux01 ~]#  echo "1234qwer" | passwd --stdin u1
更改用户 u1 的密码 。
passwd:所有的身份验证令牌已经成功更新。

示例3

查询密码状态,通过-S参数,报告已命名帐号的密码状态(只有根用户才能进行此操作)

[root@linux01 ~]#  passwd -S u1
u1 PS 2020-09-04 0 90 7 -1 (密码已设置,使用 SHA512 算法。)

示例4

加解锁密码,通过-l锁定,加锁时,查看状态,会出现LK状态,查看/etc/shadow中的第2个密码栏会发现多了!!两个字符;-u解锁,解锁后恢复PS状态,且/etc/shadow中的第2个密码栏会去掉!!

[root@linux01 ~]#  passwd -l u1
锁定用户 u1 的密码 。
passwd: 操作成功
[root@linux01 ~]# passwd -S u1
u1 LK 2020-09-04 0 90 7 -1 (密码已被锁定。)
[root@linux01 ~]# grep u1 /etc/shadow
u1:!!$6$bw/GP7Lv$s8fQGoLvGiRK.sgV2KSZ1sUeKUGbgEQH1NzQq9DZ8x1jWbg86wG3aGE25T7f4.77rhRBEIe1eQL55C6ftrmB5/:18509:0:90:7:::
[root@linux01 ~]# passwd -u u1
解锁用户 u1 的密码。
passwd: 操作成功
[root@linux01 ~]# passwd -S u1
u1 PS 2020-09-04 0 90 7 -1 (密码已设置,使用 SHA512 算法。)
[root@linux01 ~]# grep u1 /etc/shadow
u1:$6$bw/GP7Lv$s8fQGoLvGiRK.sgV2KSZ1sUeKUGbgEQH1NzQq9DZ8x1jWbg86wG3aGE25T7f4.77rhRBEIe1eQL55C6ftrmB5/:18509:0:90:7:::

chage命令

概念

  chage命令用于展示更详细的密码参数信息。

语法格式

chage [-ldEImMW] 账号名称

参数详解

[root@linux01 ~]#   chage -help
用法:chage [选项] 登录 选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”

示例

[root@linux01 ~]#  chage -l u1
最近一次密码修改时间 :9月 04, 2020
密码过期时间 :12月 03, 2020
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :90
在密码过期之前警告的天数 :7

说明:-l参数可以展示出账号密码相关的时间信息。

usermod命令

概念

  usermod命令用于修改账号相关配置。

语法格式

usermod [-cdegGlsuLU] 账号名称

参数详解

[root@linux01 ~]#  usermod -help
用法:usermod [选项] 登录 选项:
-c, --comment 注释 GECOS 字段的新值
-d, --home HOME_DIR 用户的新主目录
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-U, --unlock 解锁用户帐号
-Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射

示例

[root@linux01 ~]#  grep u1 /etc/passwd
u1:x:1004:1004::/home/u1:/bin/bash
[root@linux01 ~]# usermod -c "u1 test describe info" u1
[root@linux01 ~]# grep u1 /etc/passwd
u1:x:1004:1004:u1 test describe info:/home/u1:/bin/bash

说明:通过-c参数添加说明信息后,我们可以看到/etc/passwd中更新说明生效。

userdel命令

概念

  userdel命令用于删除用户账号相关数据。主要涉及如下方面:

  1. 使用者账号/密码相关数据:/etc/passwd, /etc/shadow
  2. 使用者群组相关数据:/etc/group, /etc/gshadow
  3. 使用者个人文件数据:/home/user_name, /var/spool/mail/user_name等。

该命令要慎用,真的确认要删除账号及所有数据的时候才使用该命令,否则可以去/etc/shadow账号中的第8个字段进行设置为0,就可以使账号失效,但数据还在。

语法格式

userdel [-r] 账号名称

参数详解

[root@linux01 ~]#  userdel -help
用法:userdel [选项] 登录 选项:
-f, --force force some actions that would fail otherwise
e.g. removal of user still logged in
or files, even if not owned by the user
-h, --help 显示此帮助信息并推出
-r, --remove 删除主目录和邮件池
-R, --root CHROOT_DIR chroot 到的目录
-Z, --selinux-user 为用户删除所有的 SELinux 用户映射

示例

示例1

不删除用户家目录

[root@linux01 ~]#  userdel u1
[root@linux01 ~]# ll -d /home/u1
drwx------ 2 1004 1004 4096 9月 4 17:17 /home/u1

示例2

删除用户家目录,使用-r参数

[root@linux01 ~]#  userdel -r u2
[root@linux01 ~]# ll -d /home/u2
ls: 无法访问/home/u2: 没有那个文件或目录

groupadd命令

概念

  groupadd命令用于添加群组。

语法格式

groupadd [-g GID] [-r] 群组名称

参数详解

[root@linux01 ~]#  groupadd -help
用法:groupadd [选项] 组 选项:
-f, --force 如果组已经存在则成功退出
并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录

示例

[root@linux01 ~]#  groupadd g1
[root@linux01 ~]# grep g1 /etc/group /etc/gshadow
/etc/group:g1:x:1011:
/etc/gshadow:g1:!::
[root@linux01 ~]# groupadd -g 1007 g2
[root@linux01 ~]# grep g2 /etc/group /etc/gshadow
/etc/group:g2:x:1007:
/etc/gshadow:g2:!::

说明:要注意的是,不带-g时,群组的GID会从1000以上最大的GID+1来创建。

groupmod命令

概念

  groupmod命令类似于usermod命令,用于修改群组group的相关配置参数。

语法格式

groupmod [-g 新GID] [-n 新群组名称] 旧群组名称

参数详解

groupmod -help
用法:groupmod [选项] 组 选项:
-g, --gid GID 将组 ID 改为 GID
-h, --help 显示此帮助信息并推出
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
-o, --non-unique 允许使用重复的 GID
-p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
-R, --root CHROOT_DIR chroot 到的目录

示例

[root@linux01 ~]#
[root@linux01 ~]# groupmod -g 1008 -n g1_new g1
[root@linux01 ~]# grep g1 /etc/group /etc/gshadow
/etc/group:g1_new:x:1008:
/etc/gshadow:g1_new:!::
[root@linux01 ~]# grep g1_new /etc/group /etc/gshadow
/etc/group:g1_new:x:1008:
/etc/gshadow:g1_new:!::

说明:我们可以看到/etc/group/etc/group中已经不存在g1了。

groupdel命令

概念

  groupdel命令用于删除群组。需要注意的是,在/etc/passwd中被使用为有效群组的群组不能被删除。

如:

[root@linux01 ~]#  groupdel t1
groupdel:不能移除用户“t1”的主组

语法格式

groupdel [groupname]

参数详解

[root@linux01 ~]#  groupdel -help
用法:groupdel [选项] 组 选项:
-h, --help 显示此帮助信息并推出
-R, --root CHROOT_DIR chroot 到的目录

示例

[root@linux01 ~]#  groupdel g1_new
[root@linux01 ~]# grep g1_new /etc/group /etc/gshadow

参考
《鸟哥的Linux私房菜》

Linux—账号管理及命令使用详解的更多相关文章

  1. [转帖]Linux系列之SAR命令使用详解

    Linux系列之SAR命令使用详解 sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工 ...

  2. Linux 执行文件查找命令 which 详解

    某个文件不知道放在哪里了,通常可以使用下面的一些命令来查找: which  查看可执行文件的位置 whereis 查看文件的位置 locate   配合数据库查看文件位置 find   实际搜寻硬盘查 ...

  3. Linux备份数据库,mysqldump命令实例详解

    mysqldump是mysql数据库中备份工具,用于将MYSQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 语法: mysqldump (选项) 选项: --add-drop-ta ...

  4. Linux 下的dd命令使用详解(摘录)

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  5. Linux 下的dd命令使用详解(摘录)【转】

    转自:https://www.cnblogs.com/jikexianfeng/p/6103500.html 一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意 ...

  6. Linux 下的dd命令使用详解

    转自:https://www.cnblogs.com/jikexianfeng/p/6103500.html 一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意 ...

  7. 入门学习Linux常用必会命令实例详解

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...

  8. (转) Linux 下的dd命令使用详解(摘录)

    使用dd命令克隆整个系统------http://www.cnblogs.com/jikexianfeng/p/6103504.html 原文:https://www.cnblogs.com/jike ...

  9. linux下的dd命令使用详解

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

随机推荐

  1. Docker初探之常用命令

    在正式使用Docker之前,我们先来熟悉下Docker中常用的命令,因为对Docker的操作就如同操作Linux一样,大部分操作通过命令完成. 一.登录 为什么要使用登录? 因为我们使用Docker, ...

  2. jquery 效果笔记

    jquery效果 显示隐藏     show()     语法     show([speed,[easing],[fn]])     参数可以省略,无动画直接使用     hide()     to ...

  3. Java泛型是什么?实战demo

    1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法时有形参,然后调用 ...

  4. 2020-04-08:为什么TCP握手需要三次?

    假想一下,如果我们去掉了第三次呢?如果只是第二次建立的话,服务端和客户端就已经建立,但是如果客户端没有收到服务端的回应?这个时候,客户端认为没有建立,服务端却为认为建立成功,并保存了必要的资源,如果出 ...

  5. LeetCode 647. Palindromic Substrings的三种解法

    转载地址 https://www.cnblogs.com/AlvinZH/p/8527668.html#_label5 题目详情 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同 ...

  6. vue的使用规范之v-if 与 v-for 一起使用

    当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中 所以,不推荐v-if和v-for同时使用 使用推荐方 ...

  7. vue项目发布后带路径打开页面报404问题

    环境: 后端,python+uwsgi启动 前端:vue  用nginx运行,指定静态目录 问题 :发布后带路径打开页面报404问题,带路径打开即不是打开的主页 解决方案: https://route ...

  8. 洛谷P1149.火柴棒等式(暴力搜索)

    题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注 ...

  9. 图的DFS与BFS

    图的DFS与BFS(C++) 概述 大一学生,作为我的第一篇Blog,准备记录一下图的基本操作:图的创建与遍历.请大佬多多包涵勿喷. 图可以采用邻接表,邻接矩阵,十字链表等多种储存结构进行储存,这里为 ...

  10. 编写有提示的listbox控件 2008-06-29 17:13

    在MFC中几乎所有的控件都有信息提示,而惟有listbox却没有这样的一个功能,每当我们把鼠标移到listbox上控件时,啥玩意儿都没有是不是很气馁啊,所以我今天特地写了一个简单的有提示的listbo ...