centos

sys.4.2 Linux用户、组的基本管理

 

额外引言:
安全上下文:
## 进程以其发起者的身份运行;
## 进程对文件的访问权限,取决于发起此进程的用户及用户所在组的权限;
## 为了能让后台进程或服务类进程以非管理员身份运行,通常需要创建多个无需登录系统的普通用户,此类用户就是系统用户;

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 ~]#

 

Leave a Reply

Your email address will not be published. Required fields are marked *