引言
本来对用户和组这块儿不是很熟悉,每次都有意避之,但是在虚拟机安装软件的时候意识到,这块儿很重要,特此回来补上自己的短板。
这样,以后在linux方面不会再有弱项了。
实际开发环境下:
同一个部门下会有不同多个组
比如web组和dev组,需要访问远程服务器上的资源,web用户、dev用户,他们可以访问到的资源不一样。
为什么不一样呢?
因为管理员给每个组的权限都不一样,dev只能访问系统开发资源,而web组只能访问web资源。
为什么非要这样非得分成不同的组,还要被分配不同的权限呢?
其中一个原因:为了维护秩序。比如我是个dev组的菜鸟,如果我不属于web这个组,却来这个组偷偷改了文件,最后追究责任,也不好缩小范围、查找凶手不是吗?
所以,需要将dev组全部成员,都分配相同的权限——不允许看web组成员所能获得的web资源。
除非...
除非有人是个全栈的高手,同时占有系统dev组和web组,这样他就都能进行访问。 那么这个用户,相对于组来说,就形成了一对多的关系。 当然,纵观全局,除了"一对一","一对多"这两种关系以外,还可能有"多对一","多对多"几种情况。
那么管理员是谁呢?
谁有root用户的密码,或者sudo权限,谁就是管理员。
一、用户管理
实际演练:
在我的centos7机器上,我有root密码,所以我具有管理员权限。
首先建个‘group_dev组’,然后向组中添加用户‘user_dev_dashewan’、设置密码‘123’。
命令:
[root@localhost /]# groupadd group_dev #新建一个组——'group_dev' [root@localhost /]# useradd -g group_dev user_dev_dashewan #添加用户'user_dev_dashewan'到'group_dev'中 [root@localhost /]# passwd user_dev_dashewan #给用户'user_dev_dashewan'添加密码
执行过程如下:
当然还可以继续向group_dev中添加用户,然后设置密码,不过这些都是重复的工作。
删除命令
如果想要删除刚才的用户和组:(注:在删除组之前,需要先删除用户)
命令:
userdel -r +用户名 #删除用户和相关文件
groupdel +组名 #删除组
这里我就不执行以上命令了。
值得一提的是:linux系统中每一个用户都至少属于一个组。
如果将“组”细分的话,还可以分为主组、附属组。
对于每一个用户来说,仅仅只能拥有一个主组(用-g指定),但是可以有多个附属组(用-G指定)。
useradd添加命令
在linux系统中,每个用户的信息都被保存在/etc/passwd配置文件,每个用户在/etc/passwd文件中都有对应的一行记录。
每一行都有7个参数,并且用分号分隔:
在使用useradd命令时,如果不指定用户的主目录,则自动在/home下建一个与用户同名的主目录。(注:只有主目录才会被添加到配置文件中,附属目录不会)
执行命令tail -4 /etc/passwd之后,可以看到用户‘zilaiye’的主目录被默认定义为‘/home/zilaiye’:
执行过程如下:
用户密码的信息则保存在/etc/shadow文件中:
每个用户的信息在这里会对应9个参数,每个参数用引号分隔:
执行tail -7 /etc/shadow之后,可以看到用户‘user_dev_dashewan’拥有已经加密的密码,而用户‘zilaiye’没有被设置密码。
执行过程如下:
接下里创建一个名为‘gangshou’的用户,设置主目录为/var/gangshou,作为root用户组的成员,并加注释‘huoying’,指定用户shell为:/bin/sh
执行命令:
useradd -d /var/gangshou -g root -c huoying -s /bin/sh gangshou
执行过程如下:
其中的-1——是仅显示一条文本中的信息。
useradd参数:
-d +目录,指定用户主目录
-c +comment 指定一段注释性描述。
-g +用户组 指定用户所属的用户组。
-G +用户组,用户组 指定用户所属的附加组。
-s +Shell文件 指定用户的登录Shell。
-u +用户号 手工指定用户id,但必须唯一,而且要大于999。
usermod修改命令
任务描述:
1.修改用用户user_dev_dashewan用户名为dashewan;
2.修改用户dashewan的主目录为/var/dashewan;
3.修改用户dashewan的注释为scientist。
执行命令:
[root@localhost /]# usermod -l dashewan user_dev_dashewan #1
[root@localhost /]# tail -1 /etc/passwd
dashewan:x:1001:1001::/home/user_dev_dashewan:/bin/bash
[root@localhost /]# usermod -d /var/dashewan dashewan #2
[root@localhost /]# tail -1 /etc/passwd
dashewan:x:1001:1001::/var/dashewan:/bin/bash
[root@localhost /]# usermod -c scientist dashewan #3
[root@localhost /]# tail -1 /etc/passwd
dashewan:x:1001:1001:scientist:/var/dashewan:/bin/bash
执行过程如下:
usermod参数:
-l 修改用户名 -c 修改参用户述信息 -d 修改用户主目录 -L 锁定账号,临时禁止用户登陆 -U 对账号解锁 -g 修改用户所属的组 -G 修改用户所属的附加组 -s 修改用户登陆后的shell类型 -u 修改用户id -e 修改用户有效期 -f 修改用户密码在多少天失效
二、组管理
组管理相关命令:
groupadd +组名 #添加组 groupmod +【参数】 新组名 旧组名 #【-n】修改组名 【-g】修改组标识号 groupdel +组名 #删除组 gpasswd +【参数】 用户名 组名 #【a】:添加到用户组 【-d】:将用户从组中删除 【-A】将某用户修改成该组管理员 id +用户名 #显示用户当前的UID groups +用户名 #显示该用户所在的组 whoami #显示当前登陆者名称 w #查看当前用户及各种状态信息 who #查看各用户历史登陆途径及时间,如果是本地——显示:0 如果是远程连接——显示ip号 last #查看当前用户全部的登陆记录历史
chage命令修改用户口令有效期限
命令:
chage 【参数】 用户名
-m 密码可更改的最小天数。为零时表示任何时候都可以更改密码 -W 用户密码到期前,提前收到警告信息的天数 -M 密码保持有效的最大天数 -E 账号到期的日期。过了这一天,账号将不可使用 -d 上一次更改的日期 -i 停滞时期。如果密码过期时长超过这个数,那么这个账号将不可用 -l 列出当前的设置。可以帮助用户来确定他们的账号或密码什么时候过期
chfn 修改用户注释信息
命令:
chfn 【参数】 用户名
-f 设置真实姓名 -h 设置电话号 -o 设置办公室地址 -p 设置办公室的电话号码
chsh -l #查看系统安装的shell
执行结果如下:
三、文件属性读取和修改
新建一个文件夹,使别的组可以对本组中的file1进行写操作。
命令如下:
ls -l 时显示的文件属性:
可以看见开头rwx rwx rwx三组属性:
第一组rwx——文件所有者对该文件拥有的权限
第二组rwx——同组用户对该文件拥有的权限
第三组rwx——其他组用户对该文件的权限
其中:
r 代表读权限,
w 代表写权限,
x 代表这是个可执行文件
其中最开头的符号具有以下几种情况:
- #普通文件
d #目录文件
l #软链接,类似windows中的快捷方式
s #套接字文件
b #块设备文件,二进制文件
c #字符设备文件
p #管道文件
chmod定义用户对文件的权限
命令:
chmod 修改范围 运算符 文件/目录
修改范围:
u #文件所有者
g #同组用户
o #其他组用户
a #全体用户
运算符:
+ #给予 - #收回 = #赋值
具体操作:
chown修改文件/目录的所有者(注:谁创造的这个文件,设就是所有者)
命令:
chown 新所有者【选项】新组 #选项里可以使.或者: 这两个符号具有相同的作用
例如:
chown 小李.dev file1或者chown 小李:dev file1 #将当前目录下的file1的所有者改为小李,所属组改为dev
chown .dev file1或者chown :dev file1 #仅仅将当前目录下的file1的所属组改为dev
用户权限的控制
su #切换用户
sudo #给用户权限
任务描述:
利用root系统管理员新建一个用户,然后使新建的用户具有管理员的权限。
实际操作:
/etc/sudoers部分内容如下:
这样,在fire-shadow用户登陆后就可以用如下命令添加用户:(注:普通用户不能没有添加新用户的权利,除非是管理员,或者sudo管理员,其实sudo就是个代理)
sudo useradd bofengshuimen
具体操作如下:
再给这个用户补充个注释,这样一眼就知道他是管理员:
这里需要注意一下,已经登陆的用户无法被修改所在的主目录:
比如当前的用户是root,那么root无法修改自己的主目录,同时,如果别的用户处于登陆状态,root同样无法修改它的主目录,除非那个用户下线,root才能去改。
但是即使用户处于登陆状态,也可以修改他所属的组,这是组和主目录的一点不同。
两个不同的用户允许有相同的主目录。
root的主目录默认是/root,但是在/etc/passwd中无法看到root的信息。
学到最后,竟然不记得查看用户的命令?
突然想起来其实就是:
tail /etc/passwd