##用户是操作者在系统的身份
##用户是系统最底层的安全机制的一部分
##用户在系统中以字符和文件的形式存在
/etc/passwd
##用户的信息文件(储存的包含用户)
/etc/group
/etc/shadow
##用户的认证文件
/home/username
##用户的家目录
/etc/skel/
##用户的骨文件所存在的模板
[root@localhost Desktop]# vim /etc/passwd
##这个里面有六种颜色,一种颜色代表一类信息,第一个(root)用名称,第二个(x)用户密码,第三个(0)用户的uid,第四个(0)用户的组初始组(主组)的gid,第五个(root)用户的说明(这个说明最直接的体现就是我们开机登录用户界面的用户名是什么,说明就是什么)可以为空,第六个(root)用户的家目录,第七个(/bin/bash)用户和系统交互的时候的默认开启的软件
##因此我们可以利用passwd新建用户,我们在passwd文件内加入westos的信息:
##这个就可以按照上面root用户的信息进行理解,这样我们就可以创建wetos用户了
[root@localhost Desktop]# id westos
uid=8888(westos) gid=8888 groups=8888
##我们想修改组id和用户id都可以进入/etc/passwd
进行修改
[root@localhost Desktop]# su - westos
su: warning: cannot change directory to /home/westos: No such file or directory
/usr/bin/id: cannot find name for group ID 8888
##切换到westos发现不存在westos的家目录,因此我们需要给他创建家目录
[root@localhost ~]# mkdir /home/westos
[root@localhost ~]# chown westos.westos /home/westos/
# chown 将指定文件的拥有者改为指定的用户或组,这个命令是将westos组的westos都改为westos下用户下的组和用户
chown: invalid user: ‘westos.westos’
##但是提示用户不存在,其实我们明白是组不存在,因此我们需要编入组的信息
[root@localhost ~]# vim /etc/group
##编入组信息后,发现还是不正常,为什么是因为他还缺少配置文件
[root@localhost ~]# su - westos
st login: Sun May 24 15:34:49 CST 2020 on pts/0
-bash-4.2$
[root@localhost ~]# ls -a
##可以看到root下的用户有很多配置文件
.
..
anaconda-ks.cfg
apache-tomcat-7.0.103.tar.gz
.bash_history
.bash_logout
.bash_profile
.bashrc
.cache
.config
.cshrc
.dbus
Downloads
.gvfs
initial-setup-ks.cfg
.lesshst
lib.ko
.local
.mozilla
.ssh
.tcshrc
.viminfo
.xauthbRd7V2
.xauthDzsocJ
.xauthRTJAGg
.xauthwu5qkh
-bash-4.2$ ls -a
##但是westos下却没有这些配置文件
. .. .cache .config
-bash-4.2$ cp /etc/skel/.* .
##我们将隐藏的配置文件(.文件名)拷贝到westos里面,这个里面最后的空格.就是拷贝隐藏文件的意思
cp: omitting directory ‘/etc/skel/.’
cp: omitting directory ‘/etc/skel/..’
cp: omitting directory ‘/etc/skel/.mozilla’
-bash-4.2$ ls -a
##可以看到我们已经拷贝root的配置文件到westos里面了
. .. .bash_logout .bash_profile .bashrc .cache .config
[root@localhost ~]# su - westos
##可以看到我们已经成功的新建用户了
Last login: Sun May 24 15:50:52 CST 2020 on pts/0
[westos@localhost ~]$ pwd
##pwd可以查看 我们的家目录,在passwd修改家目录后在这个里面也会修改
/home/westos
[westos@localhost ~]$ ps
##ps可以查看运行的程序,我们查看默认开启文件可以用这个查看,在passwd修改家目录后在这个里面也会修改
PID TTY TIME CMD
42132 pts/0 00:00:00 bash
42176 pts/0 00:00:00 ps
##如果我们想让一个用户拥有多个组的话怎么办
[root@localhost ~]# vim /etc/group
uid=8888(westos) gid=8888(westos) groups=8888(westos),989(unbound)
##可以看到初始组不会变,所属于的组里面多了个unbound
##tail命令的延申:
[root@localhost ~]# tail -n 3 /etc/passwd /etc/group
##查看etc下的passwd和group的后三行
==> /etc/passwd <==
tcpdump:x:72:72::/:/sbin/nologin
cxg:x:1000:1000:cxg:/home/cxg:/bin/bash
westos:x:8888:8888::/home/westos:/bin/bash
==> /etc/group <==
stapdev:x:158:
cxg:x:1000:cxg
westos:x:8888:
[root@localhost ~]# tail -n 3 /etc/passwd /etc/group;ls -l /home/
##在上面命令的基础上再加上查看home下的权限信息,这个里面的分号就代表前面的命令执行完了后再继续执行这个命令
==> /etc/passwd <==
tcpdump:x:72:72::/:/sbin/nologin
cxg:x:1000:1000:cxg:/home/cxg:/bin/bash
westos:x:8888:8888::/home/westos:/bin/bash
==> /etc/group <==
stapdev:x:158:
cxg:x:1000:cxg
westos:x:8888:
total 4
drwx------. 15 cxg cxg 4096 May 24 16:32 cxg
drwxr-xr-x. 4 westos westos 128 May 24 16:45 westos
##我们上面这个命令只能查看输出命令时候输出的内容,要是内容发生改变后,就得再次输入同样的命令查看,因此我们使用自动查看命令
[root@localhost ~]# watch -n 1 "tail -n 3 /etc/passwd /etc/group;ls -l /home/"
##watch就是查看这三个命令-n 1代表时间为每秒钟都查看,我们查看指令的时候需要加上“”
localhost ~]# watch -n 1 date
##单独查看一个命令不需要加上“”
##我们使用userdel -r 删除westos用户和用户配置信息,如果不加-r,我们这直接userdel westos 用户的组目录里面的配置信息就会存在就需要我们下面的rm -fr /home/westos再删除一次,可以看到我们的etc/passwd里面已经没有westos用户的信息了
[root@localhost ~]# rm -fr /home/westos
##再删除他所在的组的信息
[root@localhost ~]# useradd westos
##重新创建westos
##可以看到我们新建的wetos uid码和gid码是1001,这是因为默认从1000开始,然后进行排序,为什么他是从1000开始的呢
[root@localhost ~]# vim /etc/login.defs
##我们可以在这个文件内看到useradd用户的uid最小是1000,最大是60000,系统的uid最小是201,最大是999,200以前的相当于被预留下来了,组gid和系统的gid同理,同时任何一个linux系统的root的uid和gid都是0
##除了我们前面学习的用vim /etc/passwd修改用户的配置信息,我们还可以用其他指令修改用户信息:
[root@localhost ~]# useradd -u 888 westos
##指定用户的uid为888
[root@localhost ~]# useradd -g 888 westos
##我们指定新建的一个westos用户的组gid为888,但是失败了,是因为我们新建的这个组gid必须在系统中先存在才行,相当于我们先得有一个组才能再有用户
useradd: group '888' does not exist
[root@localhost ~]# groupadd -g 888 westos
##新建888gid的组
[root@localhost ~]# useradd -g 888 westos
##这下可以看到成功创建gid为888的组的wetos
[root@localhost ~]# useradd -u 888 -g 888 westos
##创建一个uid和gid为888的westos,还是需要创建组先,因为系统不存在888这个组
useradd: group '888' does not exist
[root@localhost ~]# groupadd -g 888 westos
[root@localhost ~]# useradd -u 888 -g 888 westos
##这些是指定初始组和uid的方式,我们要是想修改附加组的信息怎么办
[root@localhost ~]# id westos
uid=888(westos) gid=888(westos) groups=888(westos)
[root@localhost ~]# useradd -G 158 westos
##因为系统刚好存在一个组gid为158,所有我们直接将westos附加到这个gid上
[root@localhost ~]# id westos
##可以看到附加组为stapdev
uid=1001(westos) gid=1001(westos)groups=1001(westos),158(stapdev)
##如何修改说明信息
[root@localhost ~]# useradd -c "westos user hahaha" westos
##指定用户的家目录
[root@localhost ~]# useradd -d /home/westoshahaha/ westos
##修改默认的运行程序
[root@localhost ~]# useradd -s /bin/tcsh westos
##为何可以把scsh作为可以运行的bash,可以用下面的shells查看系统安全的bash
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
##我们etc/passwd中的用户里面nologin都不能进行交互(不能进行有问必答),
总结:
##但是我们想修改用户信息的时候,每次删除并不方便,因此我们可以采用下面的不需要删除用户的方式修改用户的信息
[root@localhost ~]# usermod -l linux westos
##将westos的用户名改为linux
[root@localhost ~]# usermod -l westos linux
##改回westos
[root@localhost ~]# usermod -u 8888 westos
##将westos的uid改为8888
[root@localhost ~]# usermod -g 158 westos
##将westos的gid(初始组)改为158
[root@localhost ~]# usermod -G westos cxg
##将用户westos附加到cxg的附加组上
[root@localhost ~]# id cxg
##可以看到已经附加到了
uid=1000(cxg) gid=1000(cxg) groups=1000(cxg),1001(westos)
[root@localhost ~]# usermod -G 1000 cxg
##也可以把附加的组的名称用gid来表示,这个表示我们将cxg附加到cxg上,但是我们的的-G附加会删除原本的附加。
[root@localhost ~]# id cxg
uid=1000(cxg) gid=1000(cxg) groups=1000(cxg)
[root@localhost ~]# usermod -aG westos cxg
##因此我们使用-aG来进行附加保留原本的附加
[root@localhost ~]# id cxg
##可以看到已经附加了多个了
uid=1000(cxg) gid=1000(cxg) groups=1000(cxg),1001(westos)
[root@localhost ~]# usermod -G "" cxg
##这个是将附加的内容为空,相当于就是删除所有附加一样
[root@localhost ~]# id cxg
uid=1000(cxg) gid=1000(cxg) groups=1000(cxg)
其他的命令同理,总结如下:
[root@localhost ~]# usermod -d /mnt/haha westos
##这个命令只是将家目录的指向附加到mnt下的haha,其实家目录并没有改为mnt下的haha
[root@localhost ~]# usermod -md /mnt/haha westos
##这个-md才是将家目录改为mnt下的haha
4.su与su-区别
##su cxg,只加载的系统的软件配置(/etc/bash)bash,系统的环境配置(/etc/profile)他没有加载上,所以这个叫nologin的shell,没有登录系统的shell
##su- cxg,系统的软件配置和环境配置都被加载上,这个叫login shell,登录系统的shell
`[root@localhost ~]# vim /etc/bashrc``##这是系统的软件配置设置,我们在最后面一行加上A=1
[root@localhost ~]# vim /etc/profile
##这是系统的环境配置设置,我们在最后面一行加上B=1
[root@localhost ~]# su westos
##我们不加-切换westos后,发现环境配置没有加载
[root@localhost ~]# su- cxg
##可以看到加上-环境配置就加载了
##设置密码信息
[root@localhost ~]# passwd
##在超级用户下直接输入passwd修改root用户的密码
Changing password for user root.
New password:
[root@localhost ~]# passwd westos
##passwd加上wetos在超级用户下可以修改普通用户westos的密码
Changing password for user westos.
New password:
[cxg@localhost ~]$ passwd
##在普通用户下直接输入passwd修改普通用户本身的密码
Changing password for user cxg.
Changing password for cxg.
(current) UNIX password:
[cxg@localhost ~]$ passwd cxg
##但是在普通用户下不能利用passwd加上用户名,修改用户的密码,修改本身的也不行
passwd: Only root can specify a user name.
[cxg@localhost ~]$ passwd westos
##修改其他的用户更不行
passwd: Only root can specify a user name.
##当我们有时候忘记普通用户的密码的时候,可以直接使用超级用户,在不知道原密码的情况下,直接设置普通用户的新密码
##因为我们没有给新建的westos设置密码,因此他的密码信息位置为空
[root@localhost ~]# passwd westos
Changing password for user westos.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
##可以看到westos的密码信息的位置已经有信息了,我们使用的md5 哈希算法进行的加密
[root@localhost ~]# usermod -L westos
##这个命令可以锁定我们的用户
##可以看到用户信息密码前面要是有感叹号就代表被锁定
[root@localhost ~]# usermod -U westos
##这个代表命令被锁定
[root@localhost ~]# man 5 passwd
##这个命令可以查看passwd里面每一列信息的解释
##这个shadow里面的信息的解释为:第一个为root为用户名,第二个为密码信息,第三个为最后一次修改的时间(密码用了多长时间)比如:18170的意思就是密码修改的时间一直往前推算到1970年1月1日是多长时间,第四个为密码的最小有效期(密码设定后用户多长时间是修改不了的)第五个为密码多长时间必须修改一次密码,不然会被冻结,第六个警告期,第七个密码非活跃天数,第八个账号最后到期时间。
##如果我们记不住这些信息,可以使用:[root@localhost ~]# man 5 shadow
进行查询,同理上面的passwd的信息也可以[root@localhost ~]# man 5 passwd
##拓展:如果我们将第三个密码最后一次修改时间改为0会出现什么
[root@localhost ~]# vim /etc/shadow
##重启
##可以看到我们重启后输入密码后需要,修改密码才行,因此我们可以利用这种方式给用户批量设置默认密码,等用户登录的时候让他们自主进行修改,就和新办的银行卡一个道理一样
[root@localhost ~]# vim /etc/shadow
##我们修改第四位
[westos@localhost ~]# shadow
##可以看到我们需要过一天后才能再修改密码
nging password for user westos.
Changing password for westos.
(current) UNIX password:
You must wait longer to change your password
passwd: Authentication token manipulation error
[root@localhost ~]# passwd -S westos
##查看westos 的密码信息
westos PS 2020-05-25 1 99999 7 -1 (Password set, SHA512 crypt.)
##第二个和第三个的意思是 密码有没有被设定过,设定的时间是什么时候,后面分别为账号的最短有效期和账号的最长有效期,警告期,非活跃天数,加密信息
[root@localhost ~]# watch -n 1 “passwd -S westos;tail -n 1 /etc/shadow”
##我们可以看下passwd命令的帮助
##我们利用管道将echo wesots当作输入,然后stdin来达到修改westos密码的方法
[root@localhost ~]# passwd -e westos
##这个命令是修改用户信息的第三位就是距离1970年1月1日那个改为0,也就是开机需要重新修改密码
Expiring password for user westos.
passwd: Success
[root@localhost ~]# echo westos | passwd --stdin westos
Changing password for user westos.
passwd: all authentication tokens updated successfully.
##我们再执行一次密码修改服务,这个就回到原来的了,和直接输入passwd一样
[root@localhost ~]# passwd -l westos
##锁定用户后PS将改为LK shadow里面也会加上!!
[root@localhost ~]# passwd -u westos
##解锁后又恢复原状
[root@localhost ~]# passwd -n 1 westos
[root@localhost ~]# passwd -x 7 westos
##最长有效期改为7
[root@localhost ~]# passwd -w 2 westos
##警告期为两天
Adjusting aging data for user westos.
passwd: Success
[root@localhost ~]# passwd -i 1 westos
##非活跃天为1天
Adjusting aging data for user westos.
passwd: Success
##最后一位无法用passwd进行修改
[root@localhost ~]# passwd -d westos
##可以清除westos密码
##还有更加专业的修改密码配置信息的方法:
[root@localhost ~]# chage --help
Usage: chage [options] LOGIN
Options:
-d, --lastday LAST_DAY set date of last password change to LAST_DAY
-E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-h, --help display this help message and exit
-I, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --list show account aging information
-m, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-M, --maxdays MAX_DAYS set maximim number of days before password
change to MAX_DAYS
-R, --root CHROOT_DIR directory to chroot into
-W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
##可以看到chage命令除了不能修改密码其他的信息都可以修改
[cxg@localhost ~]$ useradd user1
##我们利用普通用户想创建一个user1发现没有权限,那我们就可以使用sudo来下放权力,相当于给临时用户权限,就和前面我们了解的,我们在生产环节,想做一件事,但是普通用户没有权限,我们不能总是去找管理员要密码,不方便,这时候我们就可以让管理员给我们的操作的用户一定的权力就方便多了
bash: /usr/sbin/useradd: Permission denied
[cxg@localhost ~]$ su -
Password:
Last login: Tue May 26 07:08:04 CST 2020 on pts/1
[root@localhost ~]# vim /etc/sudoers
##sudo命令的信息在etc/sudoers下,但是我们不推荐用vim直接修改,因为我们如果修改出问题没法报错,很不方便
[root@localhost ~]# visudo
##因此我们就采用visudo命令达到字节修改上面路径配置的目的,我们进入visudo后假设先删除掉第一行的注释的两个##,然后退出
>>> /etc/sudoers: syntax error near line 1 <<<
##可以发现退出后,就提醒出现问题在第一行
What now?
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
What now? e
##怎么办我们输入e再次修改它
##因此我们可以得到visudo这个命令具有语法检测功能,很方便
##我们在visudo里面大概100行的位置可以开始下放权力,上面的的/user/
已经修改为/usr/
,这段设置的意思就是为westos1这个用户在localhost。localdomain这台主机上root的权限, 权限仅限于/usr/sbin/useradd这个命令
[westos1@localhost ~]$ sudo useradd user1
##这时候我们不能直接使用useradd user1这个命令,因为是sudo下方的 前面必须加上sudo
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for westos1:
##这个给我们要westos1的密码,相当于验证一样,但是我们还是觉得不方便,因此我们觉得取消掉密码
##/user/已经修改为/usr/,前面加上NOPASSWD: 就可以达到目的了, 下面的注释也有解释如何设置使用
[westos1@localhost ~]$ sudo useradd user1
##可以看到直接创建user1用户了
[westos1@localhost ~]$ sudo userdel -r user1
##我们现在删除user1
[sudo] password for westos1:
Sorry, user westos1 is not allowed to execute '/sbin/userdel -r user1' as root on localhost.localdomain.
##发现没有权限,是因为我们刚刚设置的时候没有给他/sbin/userdel
的权限
##在后面加上,/usr/bin/userdel
命令就可以,下面也有解释
[westos1@localhost ~]$ sudo userdel -r user1
##成功删除掉了
##我们要是加的命令很多,我们就可以把命令写成一个集合,也可以给一个命令多个用户权限
##这个是visudo里面的用户集的设置方法
##我们设置命令集合的名字为Ctrl-User,给他的命令为user add,userdel,usermod
[root@localhost ~]# visudo
##我们退出后发现提示报错
>>> /etc/sudoers: syntax error near line 102 <<<
##仔细对比后发现命令集合必须为大写,并且=两边必须要有空格
[westos1@localhost ~]$ sudo usermod -l lee westos
##我们修改wesstos的名字的时候就可以直接用westos1来修改
##如果我们觉得命令不够,就可以继续在命令后面加命令就行
##当我们想给一系列用户权限时候怎么办
##这个是给多个用户权限的设置方案
##可以看到我们已经设置完成,注意=两边的空格要加上
[westos1@localhost ~]$ sudo useradd hahahaha
##我们wesots1可以创建用户
[lee@localhost ~]$ sudo useradd xixixixi
##lee也可以创建用户