Table of Contents
额外引言:
安全上下文:
## 进程以其发起者的身份运行;
## 进程对文件的访问权限,取决于发起此进程的用户及用户所在组的权限;
## 为了能让后台进程或服务类进程以非管理员身份运行,通常需要创建多个无需登录系统的普通用户,此类用户就是系统用户;
useradd , userdel , usermod , passwd ;
groupadd , groupdel , groupmod , gpasswd ;
newgrp , chage , id , su , pwck , grpck ;
一、Linux用户、组的基本管理
1、用户的基本管理
1.1 useradd : 创建新用户或更新默认新用户信息 ;
useradd – create a new user or update default new user information
useradd [options] LOGIN
useradd -D
useradd -D [options]
OPTION:
-u, –uid UID : 添加用户,并指定UID;
-g, –gid GROUP : 添加用户,并指定基本组,此基本组需事先存在或事先创建;
-G, –groups GROUP1[,GROUP2,…[,GROUPN]]] : 添加用户,可以指定多个附加组,多个组之间用逗号分隔;
-c, –comment COMMENT : 对创建的用户标识信息;
-d, –home-dir HOME_DIR : 指定路径为用户的主目录 ,通过复制 /etc/skel 目录并重命名实现 ;如果指定的目录路径事先存在,则不会为用户复制环境配置文件,但此用户可以创建成果,只是在该指定的用户主目录路径下没有此用户的环境配置文件;
-s, –shell SHELL : 指定用户的默认shell,可用的所有shell列表存储在 /etc/shells 文件汇总;
-r, –system : 创建系统用户;
-M, –no-create-home : 不为用户创建主目录;
-f, –inactive INACTIVE : 用户密码过期后,账户被彻底禁用之前的天数。 后接数字0,表示立即禁用用户登录;后接数字 -1 ,表示禁用此功能,即表示用户密码虽已过期,但用户下次登录更改密码后依然可以登录系统,不对账户进行禁用操作;
useradd -D : 显示创建用户时的默认属性信息;
useradd -D 选项 : 修改上面默认选项的值;
备注: 创建用户时的诸多默认设定都源自于配置文件 /etc/login.defs , 修改的结果保存于 /etc/default/useradd 文件中;
[root@localhost ~]# [root@localhost ~]# useradd -u 3001 tom ## 例1:创建用户,并指定UID; [root@localhost ~]# tail -1 /etc/passwd tom:x:3001:3001::/home/tom:/bin/bash [root@localhost ~]# [root@localhost ~]# useradd -g tom kari ## 例2:创建用户,并指定基本组; [root@localhost ~]# id kari uid=3002(kari) gid=3001(tom) groups=3001(tom) [root@localhost ~]# [root@localhost ~]# useradd -G tom,centos,redhat lucifer ## 例3:创建用户,并指定多个附加组; [root@localhost ~]# id lucifer uid=3003(lucifer) gid=3003(lucifer) groups=3003(lucifer),1000(centos),1001(redhat),3001(tom) [root@localhost ~]# [root@localhost ~]# useradd -c "my name is fitz" fitz ## 例4:创建用户,并做标识说明; [root@localhost ~]# tail -1 /etc/passwd fitz:x:3004:3004:my name is fitz:/home/fitz:/bin/bash [root@localhost ~]#
[root@localhost home]# [root@localhost home]# ls centos fitz kari lucifer redhat tom ## 例5:没有 abc 目录存在; [root@localhost home]# [root@localhost home]# id docker ## 没有 docker 用户; id: docker: no such user [root@localhost home]# [root@localhost home]# mkdir abc ## 创建 abc 目录,做为新用户 docker 的主目录; [root@localhost home]# ls abc centos fitz kari lucifer redhat tom [root@localhost home]# [root@localhost home]# useradd -d /home/abc docker ## 指定 docker 用户的主目录为已经存在的 abc 目录; useradd: warning: the home directory already exists. Not copying any file from skel directory into it. ## 提示指定的用户主目录已经存在,指定用户主目录路径失败; Creating mailbox file: File exists [root@localhost home]# [root@localhost home]# id docker uid=3005(docker) gid=3005(docker) groups=3005(docker) ## 但可以成功创建用户 docker ; [root@localhost home]# [root@localhost home]# ls -a centos . .. .bash_logout .bash_profile .bashrc [root@localhost home]# [root@localhost home]# ls -a abc ## abc 目录下并没有 docker 用户的环境变量; . .. [root@localhost home]# [root@localhost home]# su - docker -bash-4.2$ pwd /home/abc -bash-4.2$ ## 给用户赋予密码,用户可以登录系统,但没有自己的主目录环境配置文件; [root@localhost home]# su - centos [centos@localhost ~]$ ## 只是正常普通用户的登录提示符;
[root@localhost home]# [root@localhost home]# useradd -D ## 显示创建用户时的默认属性信息; GROUP=100 ## 基本组 HOME=/home ## 用户主目录 INACTIVE=-1 ## 密码过期后不立即禁用用户登录 EXPIRE= ## 密码永不过期 SHELL=/bin/bash ## 默认shell SKEL=/etc/skel ## 给用户指定环境配置文件 CREATE_MAIL_SPOOL=yes ## 默认为用户创建邮件目录 [root@localhost home]#
[root@localhost home]# [root@localhost home]# grep -v '#' /etc/login.defs MAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 UID_MIN 1000 UID_MAX 60000 SYS_UID_MIN 201 SYS_UID_MAX 999 GID_MIN 1000 GID_MAX 60000 SYS_GID_MIN 201 SYS_GID_MAX 999 CREATE_HOME yes UMASK 077 USERGROUPS_ENAB yes ENCRYPT_METHOD SHA512 [root@localhost home]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes [root@localhost home]#
1.2 usermod : 修改用户属性;
usermod – modify a user account
usermod [options] LOGIN
OPTIONS:
-u, –uid UID : 修改用户的ID为此处指定的新UID;
-g, –gid GROUP : 修改用户的基本组;
-G, –groups GROUP1[,GROUP2,…[,GROUPN]]] :
-a, –append : 与 -G 一同使用,为用户追加新的附加组;
-c, –comment COMMENT : 修改用户的注释信息;
-d, –home HOME_DIR : 修改用户的主目录,用户原有的文件不会被转移至新的用户主目录中;
-m, –move-home : 只能与 -d 选项一同使用,用于将用户原来的主目录移动为新的主目录;
-s, –shell SHELL : 修改用户的默认shell;
-L, –lock : 锁定用户密码,即在用户原来的密码字符串之前添加一个感叹号 ! ;
-U, –unlock : 解锁用户的密码;
-l, –login NEW_LOGIN : 修改用户名;
1.3 userdel : 删除用户 ;
userdel – delete a user account and related files
userdel [options] LOGIN
OPTIONS:
-r, –remove : 删除用户时一并删除其主目录;不带 -r 选项,则默认只删除用户,不删除用户的主目录;
2、组的基本管理
2.1 groupadd : 添加组 ;
groupadd – create a new group
groupadd [options] group
OPTIONS:
-g GID : 指定GID ; 默认是上一个组的GID+1 ;
-r : 创建系统组 ;
2.2 groupdel : 删除组 ;
groupdel – delete a group
groupdel [options] GROUP
2.3 groupmod : 修改组的属性 ;
groupmod – modify a group definition on the system
groupmod [options] GROUP
OPTION:
-g GID : 修改GID ;
-n new_groupname : 修改组名 ;
3. passwd
passwd – update user’s authentication tokens
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]
passwd : 修改用户自己的密码;
passwd USERNAME : 修改指定用户的密码,但仅root有此权限;
passwd -l USERNAME : 锁定用户,禁止登陆;
passwd -u USERNAME : 解锁用户;
passwd -d USERNAME : 清除用户密码;
passwd -e 日期 USERNAME : 设置用户的密码过期期限;
passwd -i DAYS USERNAME : 用户密码过期后,还能活动多长时间;
passwd -n DAYS USERNAME : 密码的最短使用期限;
passwd -x DAYS USERNAME : 密码的最长使用期限;
passwd -w DAYS USERNAME : 密码过期前警告期限;
echo “password” | passwd –stdin USERNAME
4. gpasswd
gpasswd – administer /etc/group and /etc/gshadow
gpasswd [option] group
gpasswd -a USERNAME GROUP : 向组中添加用户;
gpasswd -d USERNAME GROUP : 从组中移除用户;
5. newgrp : 临时切换到指定的组为基本组; 退出临时组,用命令 exit 即可;
newgrp – log in to a new group
newgrp [-] [group]
newgrp GROUP : 如果GROUP是用户的附加组,用户临时加入GROUP做为自己的基本组不需要GROUP的密码;如果GROUP不是用户的附加组,则用户需要GROUP的密码;
newgrp – GROUP : 模拟用户重新登录,以实现重新初始化用户的工作环境;
lucifer 用户有个基本组 lucifer , 有多个附加组(lucifer , centos , redhat , tom);
lucifer 临时加入附加组 centos ,做为 lucifer 用户的基本组;
lucifer 临时加入其他组 docker , 做为 lucifer 用户的基本组;
[root@localhost ~]# [root@localhost ~]# id lucifer uid=3003(lucifer) gid=3003(lucifer) groups=3003(lucifer),1000(centos),1001(redhat),3001(tom) [root@localhost ~]# [root@localhost ~]# id docker uid=3005(docker) gid=3005(docker) groups=3005(docker) [root@localhost ~]# [root@localhost ~]# su - lucifer [lucifer@localhost ~]$ [lucifer@localhost ~]$ pwd /home/lucifer [lucifer@localhost ~]$ newgrp centos ## lucifer 临时加入附加组 centos, 做为自己的基本组,此时lucifer 无需 centos 组的密码; [lucifer@localhost ~]$ [lucifer@localhost ~]$ id lucifer uid=3003(lucifer) gid=3003(lucifer) groups=3003(lucifer),1000(centos),1001(redhat),3001(tom) [lucifer@localhost ~]$ [lucifer@localhost ~]$ touch asd [lucifer@localhost ~]$ ll total 0 -rw-r--r-- 1 lucifer centos 0 Mar 22 02:08 asd ## 此时用户 Lucifer 创建的文件的属组就是 centos 组; [lucifer@localhost ~]$ [lucifer@localhost ~]$ [lucifer@localhost ~]$ exit ### 退出临时组,用命令 exit ; exit [lucifer@localhost ~]$ [lucifer@localhost ~]$ newgrp docker ## Lucifer 临时加入其他组 docker,做为自己的基本组,此时需要 docker 组的密码; Password: [lucifer@localhost ~]$ [lucifer@localhost ~]$ touch aabbcc [lucifer@localhost ~]$ [lucifer@localhost ~]$ ll total 0 -rw-r--r-- 1 lucifer docker 0 Mar 22 01:59 aabbcc ### 此时创建的文件的属组就是 docker ; -rw-r--r-- 1 lucifer centos 0 Mar 22 01:58 abcd [lucifer@localhost ~]$ [lucifer@localhost ~]$ exit exit [lucifer@localhost ~]$
6. chage : 更改用户密码过期信息;
chage – change user password expiry information
chage [options] LOGIN
OPTIONS:
-d 更改 最近一次修改密码的时间;
-m 密码最短使用期限;
-M 密码最长时间期限;
-W 密码过期前的警告时间;
-I 密码过期后的禁用期间;
-E 账户过期时间;
7. id : 显示用户的真实和有效的UID , GID ;
id – print real and effective user and group IDs
id [OPTION]… [USER]
OPTIONS:
-u USERNAME : 仅显示用户的UID;
-g USERNAME : 仅显示用户的基本组ID;
-G USERNAME : 仅显示用户所属的所有组的ID;
-n USERNAME : 显示名字而非ID号;
8. su : switch user ;
登录式切换:通过重新读取目标用户的配置文件来重新初始化;
~]# su – USERNAME
~]# su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化;
~]# su USERNAME
管理员可无密码切换至其他任何用户;
非管理员切换至其他任何用户时,需要目标用户的密码才能切换;
不切换用户,但以其他用户身份运行某个命令:
~]# su – USERNAME -c ‘COMMAND’
[root@localhost ~]# [root@localhost ~]# su - redhat -c 'whoami' redhat [root@localhost ~]# whoami root [root@localhost ~]#
9. pwck – verify integrity of password files
10. grpck – verify integrity of group files
[root@localhost ~]# [root@localhost ~]# pwck user 'ftp': directory '/var/ftp' does not exist pwck: no changes [root@localhost ~]# grpck [root@localhost ~]#