pa
回顾: bash globing,IO重定向及管道 glob: *,?,[],[^] IO重定向: >,>> 2>,2>> &>,&>> > /PATH/TO/SOMEWHERE <,<<(Here Document) COMMAND1 | COMMAND2
命令:tr,tee
用户管理基础概念
用户类别:
管理员、普通用户(系统用户和登录用户)
组类别:
管理员组、普通用户组
基本组和附加组
私有组、公共组
数据库文件:
/etc/passwd
login:password:uid:gid:comment:home:shell
/etc/shawod
login:encrpted_password:...
/etc/group
group:password:gid:user_list
密码存储格式:单向加密,并借助于salt完成
1:md5
sha1
sha224
sha256
sha384
6:sha512
Linux用户和组管理
安全上下文:
每一次我们对主机的操作都是通过发起一个进程来完成的,进程代表了人在执行操作
进程应该以什么身份来运行?进程以其发起者的身份来运行,所以开机的时候我们有
很多守护类的进程或者后台进程我们应该给他以普通用户的身份来运行,而这一类普
通用户我们称为系统用户。那么它从来不用登录系统的。
接着进程可以访问哪些文件?进程所访问的文件,或者访问文件时所应该具有的权限
取决于发起者的权限。所以这样一来我们用 cat/etc/shadow.如果我们是管理员发
起的cat命令,那意味着说cat在访问shadow时会以管理员的身份来访问。而普通用
户是不允许访问这个文件的。
为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个
普通用户,这类用户从来不用登录系统,仅仅是用来让其他进程以它的身份来运行。
从而仅能获取普通权限的。这类用户就叫做所谓的系统用户。同样的系统组也是一个
概念。只不过它属于系统用户所属的组一般来讲,系统组比我们的普通组区别太大了
,但是为了能够随同系统用户,我们就把它称为系统组了。
groupadd命令:添加组
groupadd [选项] group_name
-g GID:指定GID,默认是上一个组的GID+1
-r 创建系统组:
什么是系统组和系统用户呢?我们说过很多次对于计算机来讲所谓运行中的系统
其实就是无非在背后运行了很多进程,包括内核及相关的线程以及后台的服务管
理进程。Windows上也是一样的即便我们自己启动Windows以后我们没有手动启
动任何进程,我们会发现Windows后台会有很多进程在运行,这就意味着很多进
程是随着开启自启动的。这个我们称为后台进程,各位想象一下进程它访问任何
文件,对任何文件的访问其实都不是人在访问。虽然一直在讲用户之类的,但是
都是进程在访问。比如我们去访问任何一个文件用ls是ls在访问这个文件。使用
cat,是cat进程在访问这个文件。所以大家一定要记得每一个进程在访问资源时
它一定是代表某个用户在运行。张三发起的命令和李四发起的命令,它们所拥有
的权限或者进程本身拥有的权限是发起命令的这个人的权限。
所以我们说这个命令执行代表用户在执行,那说到着想告诉各位的是,每一个进
程的运行都是以某个用户的身份来运行的。那到底以那个用户的身份,我们此前
讲过进程有两类,一类是通过终端启动的,另一类是通过开机时自动启动的。
好于是就有另外一个概念了。开机自动启动的我们应该以什么身份来运行呢?
是以管理员身份来运行吗?固然可以。
但是有一个问题:如果说这个进程被别人攻破了,被劫持了。那同时劫持了这个
进程的人就拥有了。运行的这个进程的用户的身份权限。所以像这些后台运行的
这些进程,单凡用不到管理员的权限,我们都应该让它以一个普通用户的身份运行
但是这个用户从来也不用登录系统。仅仅是让某个进程在运行时能以一个普通用
户的身份在做。而这种用户就叫做系统用户。
groupmod命令:修改组属性
---这个组属性可以修改的有很多的组有GID组号,还有组名这一切信息都是
可以被修改的。
groupmod [options] GROUP
-g GID: 修改GID
-n new_name:修改组命
groupdel命令:删除组
groupdel [options] GROUP
无可以选项直接删除即可
千万要记得如某一个组内还有用户你要删除的话,会使哪些用户失去组织的。
用户管理命令:
useradd命令:创建用户或更新默认新用户信息
useradd [选项] 登录名
我们创建完docker以后后面的字符会自动有的,ID号1004,组ID1005.我们创建
一个用户时,如果我们没有给他指定组的时候,会自动创建用户同名的组作为用户
的私有组。 私有组一般跟用户名同名一般只包含一个用户。
但是我们说过用户是有很多属性的,家目录、UID、GID等等,我们都可以自行指定。
-u, --uid UID: 指定UID;
-g, --gid GROUP: 指定基本组ID,此组得事先存在,否则创可能出现错误。
-G,--groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,
多个组之间用逗号分隔。
-c,--comment COMMENT:指明注释信息。
-d, --home-dir HOME_DIR:创建以指定的路径为用户的家目录:而他的创建方式
是通过复制/etc/skel此目录并重命名实现的。指定的家目录路径如果事先存在
则不会为用户复制环境配置文件。
因此如果说指明的目标目录存在话表示,你所指明的路径事先已经存在了,那这样
会报错的,报错但是并不会阻止你。命令照样能执行成功,但用户的文件就没了。
每一个用户的家目录的文件下都有隐藏文件,这些文件从哪里来的呢?这里要注意
为
了要实现用户环境初始化,我们系统一般的这个家目录的创建不是直接创建一个空
目录,而是复制一个目录并更名为用户所指明的家目录名。或者创建空目录并复制
其他文件来实现的。
-s, --shell SHELL:
指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中
指定用户的默认shell,这个shell不会保存在/etc/passwd文件中,到底有
哪些shell可以用我们不是可以随意指定的。我们这里面所建议使用的shell
列表为/etc/shells文件中。
通过cat /etc/shells,看到的这些shell我们称为安全shell,所以我们期望
用户能登录时我们应该在此处我们要指定shell时要指定列表中的shell。
-r, --system:创建系统用户
注意:创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd -D: 显示创建用户的默认配置
useradd -D: 选项:修改默认选项的值
修改的结果保存于/etc/default/useradd文件中
[root@localhost ~]# useradd -D
GROUP=100 :GROUP创建用户时,要不要添加一个和用户同名的私有组。
HOME=/home:用户创建时,尤其是不是系统组的时候要不要给他创建家目录,如果
创建的话的家目录的起始位置在什么地方。home目录下,它会在home
目录下创建一个与用户名同名的目录作为家目录。
INACTIVE=-1:它的非活动期限为禁用
EXPIRE= :它的过期期限为永不过期,没有时间表示永不过期。一般默认为
99999。
SHELL=/bin/bash:表示默认shell
SKEL=/etc/skel :从这个路径去复制用户的家目录信息
CREATE_MAIL_SPOOL=yes:要不要给用户创建邮件缓冲队列,为yes表示每创建一
个用户在/val/spool/mail/路径下会给用户创建一个专用的邮桶,用
来接受文件的。
usermod命令:修改用户属性
usermod [options] LOGIN
-u, --uid UID:修改用户的ID为此处指定的新UID。
-g, --gid GROUP:修改用户所属的基本组。
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组
原来的附加组会被覆盖。
-a, --append:与-G一同使用,用于为用户追加新的附加组
-c, --comment COMMENT:修改注释信息
-d, --home HOME_DIR:修改用户的家目录:用户原有的文件不会被转移至新
位置.如果想转移一同使用-m选项将用户的主目录移动到新位置它只
有和-d一起使用才有效
但是这个命令会一样有问题,如果这个用户本来就有家目录,而在家目录中创
建了很多文件了怎么办?你这样一修改原来的文件怎么样了呢?就会没了。所
以为了避免出现这种问题-d要跟另外一个选项使用-m
-m, --move-home:只能与-d选项一同使用,用户将原来的家目录移动为新的家
目录;
-l,--login NEW_LOGIN:修改用户名
-s,--shell SHELL:修改用户默认shell
-L,--lock:锁定用户密码,即禁止用户登录了。即在用户原来的密码字符串之
前添加了“!”
-U,--unlock:解锁用户密码
我们将来用的比较多的是usermod在修改用户时,将用户添加到新附加组当中去。
这个用的比较多,需要和-a一起使用。
userdel命令:删除用户
userdel [options] LOGIN
-r:删除用户时一并删除其家目录
练习1:创建用户gentoo,UID为4001,基本组为gentoo,附加组为
distro(GID为50000)和peguin(GID为5001)
练习2:创建用户fedora,其注释信息为“Fedora Core”,默认shell为/bin/tcsh
练习3:修改gentoo用户的家目录为/var/tmp/grntoo,要求其原有文件仍能被用户
访问
练习4:为gentoo新增附加组netadmin
passwd命令:密码管理命名
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays]
[-x maxdays][-w warndays] [-iinactivedays] [-S]
[--stdin] [username]
(1)passwd:修改用户自己的密码
(2)passwd USERNAME:修改指定用户的密码,但仅root有此权限
-l,-u:锁定和解锁用户
-d: 清除用户密码串
-e DATE: 过期期限,日期
-i DAYS: 非活动期限
-n DAYS: 密码的最短使用期限
-x DAYS: 密码的最长使用期限
-w DAYS: 警告期限
--stdin
echo "PASSWORD" |passwd --stdin USERNAME
在脚本中通常这样使用
passwd来讲我们发现,不管是修改自己密码还是修改别人的密码,都是需要自
己手动的在命令行中重复两边才可以的。而stdin这个选项能够让我们从标准输
入来获取。所谓的标准输入并不是真正的标准输入而是我们把这个能获取用户
密码的方式给重定向至标准输入,默认不是标准输入虽然我们是通过键盘输入
的。但是我们可以给他重定向至标准输入,一旦重定向至标准输入就有一个结
果。使用管道输入输出重定向的方式来修改密码。
比如:echo "mageedu" | passwd --stdin docker。便可以修改
docker用户的密码。
所以我们说stdin都是这样用把改变用户密码的这个数据流的获取定向至标准
输入从而可以通过管道向他来送一个字符串直接当作命令来用了。送过来的
字符串意味着他不用在重复输入两遍,直接把这个字符串当作密码来用
gpasswd命令:默认给组定义密码但是它也能向组中添加用户
组密码文件: /etc/gshadow
gpasswd [option] group
-a USERNAME:向组中添加用户
-d USERNAME:从组中移除用户
给组添加密码有什么用呢? 有用。比如说:我们想让某个用户临时切换到某个组中去
的时候就特别有用。
举个例子:比如我们现用su- archlinux想切换到这个用户中去,然后使用id看自己
的相关信息我们会发现archlinux所属于的组也叫arclinux。也属于另
外一个组叫mygrp.比如我现在通过touch 创建了一个文件叫text.这个
文件的属主是arclinux。每个文件创建时都属于它的基本组也就是
arclinux。
举个例子:比较理想的状态下有两个可选对象,于是你参加晚宴带一个,
参加家庭聚会带另外一个。我们在不同的情形当中用不同的面目带不同的
对象。
比如我们可以临时的切换arclinux所属的基本组和另外一个组。怎么切换呢?
使用newgrp 可以改变基本组。使用exit退出。
但是如果碰到的用户不属于这个组怎么办呢?所以我们给组加密码就是为了
避免让别人随意切换它的基本组到这里来。或者说用户每一个组默认没有
密码,任何人想切换,不能切换过来只要不属于这个组。但是想切换过来
这个组就必须有密码。
newgrp命令:临时切换指定的组为基本组
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境
chage 命令:更改用户密码的过期信息
chage [options] LOGIN
-d:
-E:
-w:
-m:
-M:
id命令:显示用户的真实和有效ID
id [OPTION]... [USER]
我们用来显示用户的实际和有效id,实际的和有效的是两回事。实际的就是用户
自己真正的,有效的就表示用户在某些时候可以临时切换到另外一重身份。
-u: 仅显示有效的UID
-g: 仅显示用户的基本组ID
-G:仅显示用户所属的所有组的ID
-n: 显示名字而非ID
su命令:switch user
登陆式切换:会通过读取目标用户的配置文件来重新初始化
我们多数情况下要想以目标用户完全来工作的话,我们应该使用登录式切换
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意: 管理员可无密码切换至其它任何用户;但是非管理员用户要切换到其他用户的
时候是都需要密码的。
-c 'COMMAND':仅以指定用户的身份运行此处指定的命令
其它几个命令: chsh,chfn,finger,whoami pwck grpck
命令总结:groupadd groupmod groupdel useradd usermod userdel passwd newgrp id su chage