一、上集回顾
1、bash globing,IO重定向及管道
glob:*,?,[],[^]
IO重定向:
>,>>,
2>,2>>
&>,&>>
> /PATH/TO/SOMEWHERE 2>&1
<,<<(Here Document)
COMMAND1 | COMMAND2
命令:tr,tee
2、用户管理基础概念
a、用户类别:
管理员,普通用户(系统用户和登陆用户)
b、组类别:
管理员组,普通用户组
基本组和附加组(主组和附加组)
私有组,公共组
c、数据库文件:
/etc/passwd
login:password:uid:gid:comment:home:shell
/etc/shadow
login:encrpted_password:最近一次修改密码日期:密码最短使用期限:最长使用期限:警告时长:非活动时间:过期时间:保留字段
/etc/group
group:password:gid:user_list
密码存储格式:单向加密,并借助于salt完成
md5
sha1
sha224
sha256
sha384
sha512
二、Linux用户和组管理
1、groupadd:添加组 groupadd [options] group
a、groupadd -g:自定义gid如果不指定那么默认是上一个组的gid + 1
b、groupadd -r:创建系统组
[root@node1 ~]# tail -2 /etc/group centos:x:5002: gentoo:x:5003: [root@node1 ~]# groupadd -r testgrp [root@node1 ~]# tail -2 /etc/group gentoo:x:5003: testgrp:x:990:
[root@node1 ~]# groupadd -g 2000 grp1 [root@node1 ~]# groupadd -r -g 306 mariadb [root@node1 ~]# tail -2 /etc/group grp1:x:2000: mariadb:x:306:
2、安全上下文模型:
进程以其发起者的身份运行:
进程对文件的访问权限,取决于发起此进程的用户的权限:
系统用户:为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不用登陆系统。
3、groupmod:修改组属性 groupmod [options] GROUP
a、groupmod -g:GID,修改GID
[root@node1 ~]# tail -2 /etc/group grp1:x:2000: mariadb:x:306: [root@node1 ~]# groupmod -g 702 mariadb [root@node1 ~]# tail -2 /etc/group grp1:x:2000: mariadb:x:702:
b、group -n new_name old_name:修改组名称
[root@node1 ~]# groupmod -n perconaserver mariadb [root@node1 ~]# tail -2 /etc/group grp1:x:2000: perconaserver:x:702:
4、groupdel:删除组 groupdel GROUP
[root@node1 ~]# groupdel perconaserver
[root@node1 ~]# groupdel grp1
5、useradd命令:创建用户 useradd [options] LOGIN
[root@node1 ~]# file $(which adduser) /usr/sbin/adduser: symbolic link to `useradd'
a、useradd wohaoshuai1
[root@node1 ~]# useradd wohaoshuai1 [root@node1 ~]# tail -1 /etc/passwd wohaoshuai1:x:5004:5004::/home/wohaoshuai1:/bin/bash
[root@node1 ~]# tail -1 /etc/group wohaoshuai1:x:5004:
b、useradd -u UID:指明uid
[root@node1 ~]# useradd -u 3000 openstack [root@node1 ~]# tail -1 /etc/group openstack:x:5005:
c、useradd -g GROUP:指定基本组ID,此组得事先存在,否则可能出错。(指明组名称或组ID都可以)。创建用户的时候如果不指明组那么就会创建默认的私有组。-g表示将用户加入此基本组,-G表示将此用户加入附加组。
[root@node1 ~]# useradd -g openstack wohaoshuai2 [root@node1 ~]# tail -1 /etc/passwd wohaoshuai2:x:5005:5005::/home/wohaoshuai2:/bin/bash [root@node1 ~]# useradd -g 5005 wohaoshuai3 [root@node1 ~]# tail -1 /etc/passwd wohaoshuai3:x:5006:5005::/home/wohaoshuai3:/bin/bash [root@node1 ~]# tail -1 /etc/group openstack:x:5005:
d、useradd -c :增加注释信息
[root@node1 ~]# useradd -c "MogileFS DFS" mogilefs [root@node1 ~]# tail -1 /etc/passwd mogilefs:x:5004:5004:MogileFS DFS:/home/mogilefs:/bin/bash
e、useradd -G && useradd --groups:指明用户所属的附加组,多个组之间用逗号分隔。
[root@node1 ~]# cat /etc/group|grep ygrp
mygrp:x:3000:testuser
[root@node1 ~]# useradd -G mygrp archlinux
[root@node1 ~]# tail -1 /etc/passwd
archlinux:x:5005:5006::/home/archlinux:/bin/bash
[root@node1 ~]# tail -1 /etc/group
archlinux:x:5006:
[root@node1 ~]# cat /etc/group|grep ygrp
mygrp:x:3000:testuser,archlinux
f、useradd -d HOME_DIR:以指定的路径为用户的家目录,通过复制/etc/skel此目录并重命名来实现,指定的家目录路径如果事先存在则不会为用户复制环境配置文件。
[root@node1 ~]# useradd -d /tmp/moosefs moosefs [root@node1 ~]# ls /tmp/ moosefs systemd-private-310789de41c149e295ca734de6eb34ff-vgauthd.service-2RCX6b systemd-private-310789de41c149e295ca734de6eb34ff-vmtoolsd.service-fjAVWv [root@node1 ~]# ls -la /tmp/moosefs/ total 12 drwx------ 2 moosefs moosefs 62 Dec 19 20:43 . drwxrwxrwt. 10 root root 267 Dec 19 20:44 .. -rw-r--r-- 1 moosefs moosefs 18 Aug 3 2017 .bash_logout -rw-r--r-- 1 moosefs moosefs 193 Aug 3 2017 .bash_profile -rw-r--r-- 1 moosefs moosefs 231 Aug 3 2017 .bashrc [root@node1 ~]# mkdir /tmp/mytest [root@node1 ~]# useradd -d /tmp/mytest mytest useradd: warning: the home directory already exists. Not copying any file from skel directory into it. [root@node1 ~]# ls -la /tmp/mytest/ total 0 drwxr-xr-x 2 root root 6 Dec 19 20:46 . drwxrwxrwt. 11 root root 281 Dec 19 20:47 ..
[root@node1 ~]# ls -la /etc/skel/ total 24 drwxr-xr-x. 2 root root 62 Jun 4 2019 . drwxr-xr-x. 96 root root 8192 Dec 19 20:47 .. -rw-r--r--. 1 root root 18 Aug 3 2017 .bash_logout -rw-r--r--. 1 root root 193 Aug 3 2017 .bash_profile -rw-r--r--. 1 root root 231 Aug 3 2017 .bashrc
g、useradd -s SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中
[root@node1 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin #表示系统用户的不登录 /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh
[root@node1 ~]# useradd -s /bin/csh keystone [root@node1 ~]# tail -1 /etc/passwd keystone:x:5008:5009::/home/keystone:/bin/csh
h、useradd -r 创建系统用户
i、useradd -M:不要创建用户的主目录,即使/etc/login.defs(Create_Home)中的系统宽设置设置为yes。
j、用户创建时默认选项在/etc/login.defs文件中
[root@node1 ~]# cat /etc/login.defs |grep -Ev "^#|^$"
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
j、useradd -D:显示用户创建时默认的配置信息。默认信息保存路径为/etc/default/useradd。也可以直接编辑此文件进行修改
[root@node1 ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/csh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
[root@node1 ~]# useradd -D GROUP=100 #创建用户时同时创建一个与用户同名的私有组 HOME=/home #用户创建时是否创建家目录,如果创建那么家目录就在/home INACTIVE=-1 #非活动期限为禁用 EXPIRE= #默认过期期限为永不过期 SHELL=/bin/bash #用户创建时的默认shell SKEL=/etc/skel #默认在哪个目录复制信息 CREATE_MAIL_SPOOL=yes #是否给用户创建邮件路径。默认在/var/spool/mail/路径下
修改创建用户时默认的shell为cshell
[root@node1 ~]# useradd -D -s /bin/csh [root@node1 ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/csh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
[root@node1 ~]# useradd nova [root@node1 ~]# tail -1 /etc/passwd nova:x:5009:5010::/home/nova:/bin/csh
6、usermod命令:修改用户属性。 usermod [options] LOGIN
a、usermod -u UID:修改用户的ID为此处指定的新UID
b、usermod -g GID:修改用户所属的基本组为此处所指定的组,不过此组应该事先存在才可以
c、usermod -G GROUP [,GROUP2,...]:修改用户所属的附加组,原来的附加组会被覆盖,如果不想原来的附加组被覆盖那么加-a,即--append即可。
d、usermod -c,即--comment COMMENT:修改注释信息
e、usermod -d,即--home HOME_DIR:以指定的路径为用户的家目录。如果用户本来有家目录并且创建了其它文件的话那么修改过后就会没有了,因此我们一般和参数-m一起使用,即 --move-home
f、usermod -l:即--login NEW_LOGIN,修改用户名
g、usermod -s,--shell SHELL:修改用户指定的shell
h、usermod -L:即--lock,锁定用户密码,即在用户原来的密码字符串之前添加一个"!",如果要解锁用户的密码,那么需要使用-U,即--unlock,解锁用户的密码
7、userdel命令:删除用户
a、userdel -r:删除用户时默认不会删除其家目录,添加-r时会一并删除其家目录。
三、练习
1、创建用户gentoo,UID为4001,基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001)
2、创建用户fedora,其注释信息为"Fedora Core",默认shell为/bin/tcsh
3、修改gentoo用户的家目录为/var/tmp/gentoo:要求其原有文件仍能被用户访问
4、为gentoo新增附加组为netadmin
四、其它命令
1、passwd:密码管理
a、passwd :修改用户自己的密码
b、passwd USERNAME:修改指定用户的密码,但仅root有此权限。
c、-l,-u:锁定和解锁用户
d、-d --delete:清除用户的密码
e、-e DATE:过期期限
f、-i DAYS:非活动期限
g、-n DAYS:修改密码的最短使用期限
h、-x DAYS:密码的最长使用期限
i、-w DAYS:警告期限
j、--stdin,从标准输入获取密码
[root@node1 ~]# echo "wohaoshuai"|passwd --stdin nova Changing password for user nova. passwd: all authentication tokens updated successfully.
2、gpasswd:给组定义密码
a、-a USERNAME:向组中添加用户
b、-d USERNAME:从组中移除用户
c、gpasswd USERNAME:给组添加密码
[root@node1 ~]# gpasswd mygrp Changing the password for group mygrp New Password: Re-enter new password: [root@node1 ~]# cat /etc/gshadow |grep mygrp mygrp:$6$xdoRQ/GgErjlnaj$OjOXc7zCrU.1OwNA3InYcn1hous5Jmj6iiXwHawiAEsW0tt3rrzpFJzcdVd0JxJpHOJ2IgtZW0zTjckwtO0Ed.::testuser,archlinux [root@node1 ~]# su - archlinux [archlinux@node1 ~]$ whoami archlinux [archlinux@node1 ~]$ id uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp) [archlinux@node1 ~]$ touch test [archlinux@node1 ~]$ ll total 0 -rw-rw-r-- 1 archlinux archlinux 0 Dec 19 22:16 test [archlinux@node1 ~]$ newgrp mygrp #切换基本组为mygrp [archlinux@node1 ~]$ id uid=5005(archlinux) gid=3000(mygrp) groups=3000(mygrp),5006(archlinux) [archlinux@node1 ~]$ touch test2 [archlinux@node1 ~]$ ll total 0 -rw-rw-r-- 1 archlinux archlinux 0 Dec 19 22:16 test -rw-r--r-- 1 archlinux mygrp 0 Dec 19 22:19 test2 [archlinux@node1 ~]$ exit #退出基本组 exit [archlinux@node1 ~]$ id uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp) #之所以可以任意切换是因为archlinux本来就属于mygrp组 现在我们来使用nova用户 [root@node1 ~]# su - nova [nova@node1 ~]$ id uid=5009(nova) gid=5010(nova) groups=5010(nova) [nova@node1 ~]$ touch test [nova@node1 ~]$ ll total 0 -rw-rw-r-- 1 nova nova 0 Dec 19 22:22 test [nova@node1 ~]$ newgrp mygrp #此时就需要输入密码了 Password: [nova@node1 ~]$ touch test2 [nova@node1 ~]$ ll total 0 -rw-rw-r-- 1 nova nova 0 Dec 19 22:22 test -rw-r--r-- 1 nova mygrp 0 Dec 19 22:23 test2
3、newgrp命令:临时切换指定的组为其它组
a、- :会模拟用户重新登录以实现重新初始化其工作环境
4、chage命令:更改用户密码过期信息 chage [选项] 登录名
a、-d
b、-b
c、-w
d、-m
e、-M
5、id命令:显示用户的实际和有效的id
a、id :显示自己的
b、id username:显示其它人的id
c、-u:仅显示有效的UID
d、-g:仅显示用户的基本组GID
[root@node1 ~]# id archlinux uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp) [root@node1 ~]# id -g archlinux 5006
c、-G:仅显示用户所属的所有组GID
[root@node1 ~]# id archlinux uid=5005(archlinux) gid=5006(archlinux) groups=5006(archlinux),3000(mygrp) [root@node1 ~]# id -g archlinux 5006 [root@node1 ~]# id -G archlinux 5006 3000
d、-n:仅显示名字而非ID
6、su命令:switch user
a、登录式切换(完全式切换):会通过重新读取用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
[root@node1 ~]# su - nova Last login: Thu Dec 19 22:22:16 CST 2019 on pts/1 [nova@node1 ~]$ pwd /home/nova
b、非登录式切换(非完全切换):不会读取目标用户的配置文件进行初始化
su USERNAME
[root@node1 ~]# su nova [nova@node1 /root]$ pwd /root
c、注意:管理员可无密码切换至其它任何用户
d、su -c 'COMMAND',不切换用户,仅仅以目标用户运行此处指定的命令
[root@node1 ~]# su - nova -c 'pwd' /home/nova [root@node1 ~]#
7、其它不常用命令:
a、chsh修改管理员sh
[root@node1 ~]# chsh nova Changing shell for nova. New shell [/bin/csh]: /bin/sh Shell changed. [root@node1 ~]# cat /etc/passwd|grep nova nova:x:5009:5010::/home/nova:/bin/sh
b、chfn
c、finger
d、whoami
e、pwck:查看用户密码是否有问题
f、grpck:查看组密码是否有问题
五、命令总结
groupadd,groupmod,groupdel,useradd,usermod,userdel,passwd,gpasswd,newgrp,id,su,chage