Linux用户组和管理

# Linux用户组和管理 ## 用户分类 Linux 中用户角色分成三类: 超级用户、系统用户和普通用户。所有 Linux 用户都分配了唯一的用户 ID(uid),uid 是一个整数。普通用户以 1000 或更大的数字开始 1、超级用户 (root 用户): 每个Linux 系统都必须有,并且只有一个。它拥有最高的权限,可以删除、终止任何程序。另外,通常为减少风险要避免普通用户得到 root 用户权限。UID (UserID)值为0 2、系统用户是与系统运行和系统提供的服务密切相关的用户,通常在安装相关的软件包时自动创建并保持默认状态。系统用户不能登录计算机,UID 值 1--999. 3、普通用户是在系统安装后由超级用户创建的,通常完成指定权限的操作,而且也只能操作自己所拥有权限的文件和目录,UID 值 1000--65535. ## 用户管理文件 ### 用户账户文件:/etc/passwd /etc/passwd 文件是用户管理工作涉及的最重要的一个文件。Linux 系统中的每个用户都在/etc/passwd 文件中有一个对应的记录行,它记录了这个用户的一些基本属性。这个文件对所有用户都是可读的。 ​![image](https://bu.dusays.com/2024/05/27/6654103c06442.png)​ 从上面的例子我们可以看到,/etc/passwd 中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下: > 用户名:口令:用户标识号:组标识号:注释性描述:主日录:登录 Shell 1.用户名:在系统中是唯一的,可由字母、数字和符号组成 2.口令:此字段用“x”代替,而将口令保存在/etc/shadow 文件中 3.用户标识号 (UID): 系统内部用它来标识用户且唯一。 超级用户:UID-0,GID-0; 普通用户:UID>1000; 系统用户:0<1000。 4.组标示号 (GID):系统内部用它来标识组属性。 5.用户相关信息:该用户的描述,比如全名 6.用户主目录:用户登录系统后所进入的目录。 7.用户登录环境:用户第一次登录的 Shell 环境 ## 用户影子文件:/etc/shadow 用户影子文件/etc/shadow 中的记录行与/etc/passwd 中的一一对应,它由 pwconv 命令根据/etc/passwd 中的数据自动产生它的文件格式与/etc/passwd 类似,由若干个字段组成字段之间用":"隔开。这些字段分别是 > 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 1.用户名:用户登录到系统时使用的名字,而且是惟一的。 2.加密口令:存放MD5 加密过的口令。 (若为空,表示该用户不需口令即可登录;若为!!,表示该用户从来没有设置过密码,不能登录系统;为*,表示该帐号被禁用;若为!!MD5 密码,则表示用户密码被 passwd -l命令锁住;若为!MD5 密码,则表示用户密码被 usermod -L命令锁住。) 3.标识从1970年1月1日到用户最近一次修改口令所经过的天数。 4.口令保持有效的最小天数,即口令在多少天内不能被用户修改 5.口令在多少天后需要被修改。 6.口令到期前多少天内给用户发出警告。 7.口令过期多少天后口令失效。 8.帐号失效日。 9.保留域。 ## 用户账户管理 ### 添加用户 1.添加用户 添加新用户使用 useradd 完成,删除现有用户使用 userdel 完成。下列命令是添加一个新用户student 的账户: ```shell $ sudo useradd -m -c "A teacher from cs department" -s /bin/bash yangshu ``` 其中的选项和参数描述如下 ​`-m`​ 创建用户的主目录 ​`-c`​当前用户的描述,A teacher from cs department。 ​`-s`​ 指定 Shell,设置 shell 为/bin/bash。 默认情况下, 该用户的主目录设置为 /home/student,这个文件夹下会从/etc/skel 拷贝一些文件,另外还会在/etc/passwd 文件中添加一条记录如下: ```shell yangshu:x:1000:1000: A teacher from cs department:/home/yangshu:/bin/bash ``` 输入不带参数的命令 id 查看当前用户信息。或者在 id 命今后添加参数 yangshu. ```shell id yangshu ``` 建好用户后可以用 passwd yangshu 修改新建用户的密码 ### 修改用户密码 ```shell sudo passwd [option] username ``` -S: 查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。 -l: 暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加"!",使密码 失效。 -u: 解锁用户,和 -1 选项相对应。 -stdin: 可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用 -n 天数: 设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4个字段。 -x 天数: 设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段。 -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段。 -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。 下列命令用于设置账户的过期时间,选项为 -e 参数为2021-5-1,意味着 student 用户的口令2021年5月1日过期。 ```shell # usermod -e 2021-5-1 yangshu ``` ### 删除用户 删除用户命令 ```shell userdel username ``` 这个命令会保存用户文件夹,如果不需要保留用户文件夹可以使用下面的命令 ```shell userdel -r yangshu ``` ## 组账户管理 ### 组账户管理文件 组账户管理 文件包括: #### 组账户文件:/etc/group 组影子文件:/etc/gshadow 用户组的所有信息都存放在/etc/group文件中,字段信息有 > 组名:口令:组标识号:组内用户列表 "组名"是用户组的名称,由字母或数字构成。与/etc/passwd 中的登录名一样,组名不应重复。 "口令"字段存放的是用户组加密后的口令字。一般 Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。 "组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组 "组内用户列表"是属于这个组的所有用户的列表,不同用户之间用逗号(.)分隔。这个用户组可能是用户的主组,也可能是次要组。 #### 组影子文件:/etc/gshadow gshadow文件组成如下: > 组名:组口令:组管理员:组内用户列表 ### 添加用户组账户 ```shell sudo groupadd students ``` ### 删除用户组账户 ```shell sudo groupdel students ``` 删除指定组,只有超级用户才能使用此命令。需要注意的是被删除的组账号必须存在,当有用户使用组账号作为主要组时不能和三处,用用户同名的组账号在使用userdel命令删除用户时会被同时删除 ### 更改用户所属组 在进行下面操作时,我们还是先要建立好一个 student 用户账户和一个students 用户组账户。现在我们要更改用户 student 的主要组,使用带有-g 选项和组名称的 usermod 命令。下列命令是将 student 的主组设置为了students。 ``` usermod -g students student ``` 要将用户加入到次要组中,使用带有 -G 选项和组名称的 usermod 命令。下列命令是在系统添加一个用户 yangshu,然后将 yangshu 添加到 teachers 的次要组中 ``` sudo usermod -a -G teachers yangshu ``` 上述命令请确保加上选项-a,这样可以保证用户追加到别的次要组里,而不是移动到别的次要组。将用户从次要组中移除也可使用带有-G 选项和组名称的 usermod 命令。 ```shell usermod -G yangshu yangshu ``` 使用 groups 命令查看 yangshu 所属用户组 ```shell groups yangshu ``` ### 在组中添加用户 将 wangjing 添加到 teachers 组中,命令如下: ```shell sudo gpasswd -a wangjing teachers ``` 使用-A 选项向 teachers 组中添加管理员 ```shell sudo gpasswd -A yangshu teachers ``` 查看组影子文件 ```shell sudo tail -n1 /etc/gshadow ``` 通过上述操作后,组管理员就获得了向组中添加和删除成员的权限 groupmod 用于修改指定组,只有超级用户才能使用此命令。该指令的执行将修改 /etc/group 文件相应记录的内容 修改组 id命令如下: ```shell groupmod -g 105 teachers ``` -g: 改变组账号的 GID,组账号名保持不变 -n 选项用于改变组账号名,命令如下: ```shell groupmod -n tutors teachers ``` ## 切换用户名令 在Linux中,切换账户可以使用`su`​或`sudo`​命令: 1. **使用**​**​`su`​**​**命令**: ```bash su - username ``` 输入目标用户的密码后,即可切换到该用户。 2. **使用**​**​`sudo -i`​**​**命令**(需要sudo权限): ```bash sudo -i -u username ``` 这将以目标用户的身份启动一个新的登录Shell。 3. **切换回原账户**: 输入`exit`​或按`Ctrl+D`​即可返回到原账户。