公司动态
Linux操作系统-用户与组管理
一、用户和用户组概念Linux系统是一个多用户多任务的分时操作系统任何一个要使用系统资源的用户都必须首先向系统管理员申请一个账号然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪并控制他们对系统资源的访问另一方面也可以帮助用户组织文件并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后就能够进入系统和自己的主目录。1、用户和组用户User系统使用者的身份标识每个用户有唯一的 UIDUser ID每个用户必须属于一个主组Primary Group可以属于多个附加组Supplementary Groups分为三类超级用户rootUID0拥有最高权限系统用户UID 1-999用于运行系统服务普通用户UID≥1000普通使用者用户组Group用户集合方便权限管理每个组有唯一的 GIDGroup ID组类型主要组 (Primary Group)附加组 (Supplementary Groups)2、用户和组相关配置文件/etc/passwd该文件是用户账户信息文件内容格式如下albert:x:1000:1000:albert:/home/albert:/bin/bash分别表示账号密码用户id组id账号描述家目录shell/etc/shadow该文件存储加密的用户密码信息文件内容格式如下albert:$6$X51sD/Dlxiz2L5y.$w2QAMZgWrL3E94Mzj96QQI9/NvlpdrQ1Jx1olqyXtX8x7dBgwbwm6vKZOeuE/uIKVrS63.Q/LpdTkiaWxmAzq.:20549:0:99999:7:::分别表示账号加密密码最近修改密码的日期密码不可被更改的天数密码需要更改的天数密码过期前的警告天数密码过期后的宽限时间账号失效天数保留字段/etc/group该文件记录用户组信息文件内容格式如下albert:x:1000:分别表示群组号组密码GID组包含的成员/etc/gshadow该文件存储加密的组密码信息较少用/etc/login.defs[rootcentos7-test ~]# cat /etc/login.defs |grep -vE ^$|^#MAIL_DIR /var/spool/mailPASS_MAX_DAYS 99999PASS_MIN_DAYS 0PASS_MIN_LEN 5PASS_WARN_AGE 7UID_MIN 1000UID_MAX 60000SYS_UID_MIN 201SYS_UID_MAX 999GID_MIN 1000GID_MAX 60000SYS_GID_MIN 201SYS_GID_MAX 999CREATE_HOME yesUMASK 077USERGROUPS_ENAB yesENCRYPT_METHOD SHA512该配置文件的作用密码和时间设密码最长用多久、过期前几天提醒、两次改密码最少隔几天比如设 90 天过期。账号和目录定新建用户的 UID 和 GID 编号范围决定要不要自动建家目录还有默认权限和邮箱位置。加密方式指定密码存进系统时用什么算法加密现在常用 SHA512。/etc/default/useradduseradd默认配置内容如下/etc/default/useradd 是 Linux 系统中定义useradd命令创建新用户时默认行为的配置文件用于指定家目录路径、默认 Shell、初始组、模板目录等基础参数。HOME/home新用户家目录的父路径如/home/usernameSHELL/bin/bash新用户的默认登录 ShellGROUP100新用户的默认主组 GID若系统未启用私有组机制SKEL/etc/skel复制到新家目录的默认配置文件模板目录INACTIVE-1密码过期后账户宽限期-1 表示永不自动锁定EXPIRE账号失效日期空表示永久有效CREATE_MAIL_SPOOLyes是否在/var/spool/mail/下创建邮箱文件/etc/sudoersetc/sudoers 是 Linux 系统中管理 sudo 命令权限 的核心配置文件决定了哪些用户能以管理员身份执行命令 。修改该文件时严禁直接编辑必须使用 visudo 命令以确保语法正确防止系统权限损坏。二、用户管理命令用户账号的管理工作主要涉及到用户账号的添加、修改和删除添加用户账号就是在系统中创建一个新账号然后为新账号分配用户号、用户组、主目录和登录Shell等资源。1、创建新用户创建新用户使用useradd命令其语法如下useradd 选项 用户名选项:-c comment 指定一段注释性描述。-d 目录 指定用户主目录如果此目录不存在则同时使用-m选项可以创建主目录。-g 用户组 指定用户所属的用户组。-G 用户组用户组 指定用户所属的附加组。-s Shell文件 指定用户的登录Shell。-u 指定用户id。2、删除用户如果一个用户的账号不再使用可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令其格式如下userdel 选项 用户名常用的选项是 -r它的作用是把用户的主目录一起删除。# userdel -r sam此命令删除用户sam在系统文件中主要是/etc/passwd, /etc/shadow, /etc/group等的记录同时删除用户的主目录。3、修改用户账号修改用户账号就是根据实际情况更改用户的有关属性如用户号、主目录、用户组、登录Shell等。修改已有用户的信息使用usermod命令其格式如下usermod 选项 用户名常用的选项包括-c, -d, -m, -g, -G, -s, -u等这些选项的意义与useradd命令中的选项一样可以为用户指定新的资源值。另外有些系统可以使用选项-l 新用户名这个选项指定一个新的账号即将原来的用户名改为新的用户名。例如# usermod -s /bin/ksh -d /home/z –g developer sam此命令将用户sam的登录Shell修改为ksh主目录改为/home/z用户组改为developer。4、用户口令的管理用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令但是被系统锁定无法使用必须为其指定口令后才可以使用即使是指定空口令。指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令普通用户只能用它修改自己的口令。命令的格式为passwd 选项 用户名可使用的选项-l 锁定口令即禁用账号。-u 口令解锁。-d 使账号无口令。-f 强迫用户下次登录时修改口令。如果默认用户名则修改当前用户的口令。为了系统安全起见用户应该选择比较复杂的口令例如最好使用8位长的口令口令中包含有大写、小写字母和数字并且应该与姓名、生日等不相同。为用户指定空口令时执行下列形式的命令# passwd -d zhang此命令将用户 zhang 的口令删除这样用户 zhang 下一次登录时系统就不再允许该用户登录了。passwd 命令还可以用 -l(lock) 选项锁定某一用户使其不能登录例如# passwd -l zhang5、修改用户密码过期时间命令格式chage [选项] 用户名常用选项-l列出所有信息-m密码最小天数-M密码最大天数-W警告天数-I密码过期后锁定天数-E账户过期日期-d上次密码修改日期使用示例1. 查看用户密码过期信息chage -l zhang2. 设置密码策略chage -m 7 -M 90 -W 7 -I 14 zhang结果-m 77天内不能改密码-M 9090天密码过期-W 7过期前7天警告-I 14过期后14天账户锁定3. 设置账户过期chage -E 2024-12-31 zhang4. 设置密码立即过期chage -d 0 zhang结果强制zhang下次登录时改密码5. 交互式设置chage zhang交互式问答设置所有参数6、显示用户身份信息命令格式id [选项] [用户名]常用选项-u只显示UID-g只显示主组GID-G显示所有组GID-n显示名称而不是ID与u/g/G一起使用-r显示真实ID而非有效ID使用示例1. 显示当前用户信息id #[rootcentos7-test ~]# iduid0(root) gid0(root) groups0(root) contextunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c10232. 显示指定用户信息id zhang3. 只显示UIDid -u zhang4. 只显示主组GIDid -g zhang5. 显示所有组GIDid -G zhang6. 显示所有组名id -Gn zhang7. 显示用户名id -un zhang8. 检查用户是否存在[rootcentos7-test ~]# if id testuser2 /dev/null;then echo 用户存在;else echo 用户不存在;fi用户存在三、用户组管理命令每个用户都有一个用户组系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同如Linux下的用户属于与它同名的用户组这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。1、新增用户组使用groupadd命令新增用户组。其格式如下groupadd 选项 用户组可以使用的选项有-g GID 指定新用户组的组标识号GID。-o 一般与-g选项同时使用表示新用户组的GID可以与系统已有用户组的GID相同。实例1# groupadd group1此命令向系统中增加了一个新组group1新组的组标识号是在当前已有的最大组标识号的基础上加1。实例2# groupadd -g 101 group2此命令向系统中增加了一个新组group2同时指定新组的组标识号是101。2、删除用户组使用groupdel命令其格式如下groupdel 用户组例如# groupdel group1此命令从系统中删除组group1。3、修改用户组的属性使用groupmod命令。其语法如下groupmod 选项 用户组常用的选项有-g GID 为用户组指定新的组标识号。-o 与-g选项同时使用用户组的新GID可以与系统已有用户组的GID相同。-n新用户组 将用户组的名字改为新名字实例1# groupmod -g 102 group2此命令将组group2的组标识号修改为102。实例2# groupmod –g 10000 -n group3 group2此命令将组group2的标识号改为10000组名修改为group3。4、newgrp - 切换到其他组命令格式newgrp 组名使用示例# 1. 查看当前组id -gn# 2. 切换到其他组newgrp developers# 3. 切换回原组newgrp alice# 4. 需要密码的情况如果组有密码newgrp securegroup四、root用户管理1. 禁止root直接SSH登录编辑 /etc/ssh/sshd_configPermitRootLogin no2. 设置root密码passwd root3. 锁定root密码passwd -l root4. 切换到rootsudo -i # 切换并加载环境sudo -s # 切换但不加载环境su - # 传统方式五、su 命令Switch User切换到 root 用户需要知道 root 密码su切换到指定用户需要知道该用户密码su username切换到指定用户并加载该用户的环境变量su - username以指定用户身份执行单个命令后返回su -c command username保留当前环境变量不加载目标用户的环境su -m指定使用的 shellsu -s /bin/bash username六、密码策略1. 安装密码质量检查库yum install libpwquality # CentOS/RHEL2. 配置密码策略 /etc/security/pwquality.confcat /etc/security/pwquality.conf EOFminlen 12dcredit -1ucredit -1ocredit -1lcredit -1EOF3. 配置PAM /etc/pam.d/common-passwordpassword requisite pam_pwquality.so retry34. 设置密码历史在 /etc/pam.d/common-password 添加password requisite pam_pwhistory.so remember55. 检查密码强度echo password | pwscore七、账户锁定策略1. 配置账户锁定 /etc/pam.d/common-authauth required pam_tally2.so deny5 unlock_time600 onerrfail2. 查看失败登录次数pam_tally2 --userzhang3. 重置失败计数pam_tally2 --userzhang --reset4. 手动锁定账户passwd -l zhangusermod -L zhang5. 检查锁定状态passwd -S zhangLK 表示锁定PS 表示正常八、sudo权限管理1. 编辑sudoers文件使用visudo命令visudo2. 给用户完整权限zhang ALL(ALL:ALL) ALL3. 给组完整权限%zhang ALL(ALL:ALL) ALL4. 免密码sudozhang ALL(ALL) NOPASSWD: ALL5. 限制特定命令zhang ALL(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx6. 限制特定用户执行zhang ALL(devops) /usr/bin/passwd7. 查看用户sudo权限sudo -l