赞
踩
用户:指的是Linux操作系统中用于管理系统或者服务的人
一问:管理系统到底在管理什么?
答:Linux下一切皆文件,所以用户管理的是相应的文件
二问:如何管理文件呢?
答:
Linux下有两种用户:
用户切换
语法:su [用户名]
从普通用户切换到root用户直接输入 su
命令(root 可以省略),再输入密码就好了
从root用户切换到普通用户,输入命令 su 用户名
语法:sudo [想要提升权限的命令]
功能:如果我们单纯想提升当前命令的权限,可以给指令带上sudo
比如我们作为一个普通用户要修改另外一个普通用户的密码(肯定是修改不了的)
(1)在root用户下,打开 /etc下的 sudoers文件
(2)在文件中找到 %wheel这一行,在当前行下面添加要提升当前命令权限的用户名
(3)添加成功后保存突出,那么当前用户就可以使用 sudo命令提升当前指令权限了
测试sodo
通过dudo命令修改其它用户的密码
注意:sudo命令每隔一段时间都需要输入当前用户的密码才能执行
UID
从1~999号是系统账号,系统账号默认不允许登录(一般提供给一些应用使用,比如apache)1000 ~ 60000
root:x:0:0:root:/root:/bin/bash
第1列:用户名称
第2列:用户密码,使用一个x占位符,真实密码存储在/etc/shadow文件中
第3列:用户的编号UID,0,1-999,1000 ~ 60000
第4列:用户的主组编号GID
第5列:用户的备注信息(扩展,可以使用-c进行指定) useradd -c "mysql" mysql
第6列:用户的家目录,/root,超级管理员的家/home,普通账号的家
第7列:用户的Shell文件,常见/bin/bash或/sbin/nologin=>/bin/false
语法:useradd [选项 选项的值] 新用户名称
常用选项:
-u
指定用户uid,唯一标识,必须唯一-g
指定用户的默认组(主组)-G
指定用户附加组(一个用户可以加入多个组,但是默认组只有一个)-d
指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx)-s
指定用户默认shell,常见/bin/bash或/sbin/nologin-r
:指定用户为系统用户,如示例1:当用户创建后在哪查看
第一种:通过命令查看tail /etc/passwd
文件
第二种:使用 id [用户名]
命令查看信息
示例2:创建一个zhangsan
用户,指定用户根目录为/my_home
默认用户的根目录都在,/home
目录下
先创建my_home
目录
命令:useradd -d /myhome/zhangsan zhangsan
注意:创建目录要加/
示例3:创建一个test账号,真实存在的,但是其不允许登录操作系统
命令:useradd -s /sbin/nolog test
/sbin/nolog
:这个shell是表示不能登录
示例4:在Linux系统中创建一个mysql系统账号,要求真实存在,但是不允许登录操作系统
命令:useradd -r -s /sbin/nologin mysql
语法:userdel [选项] [用户名]
常用选项:
-r
:删除用户的同时,删除用户的家目录-f
:强制删除用户(即使用户处于登录状态)语法:usermod [选项 选项的值] [用户名]
常用选项
-g
:修改指定的用户组,选项的值可以是用户组的id,也可以是组名-G
:表示指定用户的用户附加组,选项的值可以是用户组的ID,也-u
:uid,用户的id(用户的标识符),系统默认会从1000 之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义-d
指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx)-L
:锁定用户(锁定后无法登录系统)-U
:解锁用户用户组信息文件:/etc/group
示例:修改lisi
用户的主组为hhy
组
命令:usermod -g 用户名
通过用户的GID修改
或者通过用户的名字修改
命令:usermid -g 目标用户 要修改的用户
示例1:修改lisi账号的附加组,将其添加到hhy中
命令:usermod -G hhy用户UID lisi
或者用命令:usermod -G hhy lisi
示例2:创建一个java组,在创建一个zhangsan的账号,修改wangwu的附加组为lisi与hhy
命令:usermod -G hhy,lisi zhangsan
通过id
命令查看多个用户组
注意:/home
,/
也是包含在目录名的!
示例1:修改zhangsan的家目录为 /myhome/zhangsan
(默认的为/home/zhangsan
)
命令:usermod -d /myhome/zhangsan zhangsan
出现用户名显示问题原因:我们在移动用户根目录的时候,并没有移动根目录中的配置文件
解决方案1:把/etc/skel中的文件,拷贝到新的根目录中
命令:cp -a /etc/skel/. /myhome/zhangsan/
-a
:all所有,复制时,保留文件的原有属性
当创建了一个用户,不想让这个用户登录系统就可以用命令
命令:usermod -s /sbin/nologin [用户名称]
命令:passwd
如果是root用户,就可以修改所有用户密码
命令:passwd [用户名]
# chage --help
-l:列出用户的详细密码状态;
-d 日期:修改 /etc/shadow 文件中指定用户密码信息的第3个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
-m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第4个字段;
注:几天后才能修改一次密码
-M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第5个字段;
注:每隔多少天更新一次密码
-W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第6个字段;
-i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第7个字段;
注:过期后还可以使用的天数,达到这个天数后,账号失效
-E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第8个字段;
-l
:列出用户的详细密码状态命令:chage -d 0 cat
登录要设置新密码
示例1:设置cat账号的过期时间为2018-01-08
命令:chage -E "2018-01-08" cat
示例2:设置cat账号10天后过期
命令:chage -E $(date +%F -d '+10 days') cat
示例3:设置cat用户40天后密码过期,至少3天后才能修改密码,密码过期前7天开始收到告警信息
命令:chage -M 40 -m 3 -W 4 cat
我们都知道,Windows是依赖文件的拓展名来区分文件的,比如 “.txt是文本文件”,“.exe是可执行文件”,但Linux不是通过拓展名来区分文件类型的,Linux的拓展名只是为了更好的区分文件类型
常见的文件类型主要是普通文件和目录
-
:普通文件(文本、可执行程序、库)d
:目录c
:字符文件、显示器、键盘p
:管道文件l
:链接文件(类似Windows快捷方式)s
:套接口文件(socket)b
:块设备文件(比如硬盘)/bin/
:存放系统命令,普通用户和root都可以执行(比如 ls、pwd)/boot/
:系统启动目录,保存与系统启动相关的文件,入内核文件和启动引导程序/dev
:设备文件保存位置/etc/
:配置文件保存位置,系统内所有采用默认安装方式(rpm安装)的服务配置文件全部保存在此目录中,比如用户信息、服务的启动脚本、常用服务的配置文件等/home/
:存放普通用户的根目录(每个用户都有一个根目录)/lib/
:系统调用的函数库保存位置/media/
:挂载目录。系统用来挂载媒体设备,如软盘和光盘mnt
:挂载目录,早期的Linux中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如U盘、移动硬盘和其它操作系统分区misc
:挂载目录,系统建议采用来挂载NFS服务的共享目录,虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的opt
第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中,不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件/root/
:root的主目录,普通用户主目录在/home/下,root主目录直接在 “/” 下sbin
:保存系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看srv
:服务数据目录,一些系统服务启动后,可以在这个目录中保存所需要的数据/tmp
:临时目录,系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。这个目录不建议保存重要数据,最后定期清楚tmp目录的数据lost+found/
:当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录proc
:虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的sys
:虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息对对Linux的用户权限分类,可以分为三类
解释:
对于一个用户,无论是root还是普通用户都能充当 拥有者和所属组或者是其它
文件所属组就是文件属于哪个组,每个文件在创建时默认都是属于创建人的那个小组。
举个列子
比如一台Linux服务器上有两个组,A组不想让B组的人看见A组的代码或文件,就可以通过文件所属组的权限来让自己小组的人能看见,让组外的其它人开不见。
这样的分组,可以灵活分配让大家的团队意识更强,如果没有所属组这个分类的话就会非常乱。
所以所属组就是为了更灵活的进行权限配置,满足团队协作
通过查看文件详细信息可以看到,文件所属组和文件拥有者
在Linux当中文件类型是和拓展名没有关系的
文件信息的前一段由10个字符组成,分别表示不同的意思
第一个字符:文件类型
后续9个三个为一组,分别表示你
权限属性
r
:读取w
:写入x
:可执行-
:无权限r读权限:
- 对于目录:一个目录拥有
r
权限,说明可以查看该目录里的内容- 一个普通文件拥有r权限,说明可以查看该文件的内容(cat/head/tail/less/more等命令查看)
- 读权限r(read)用数字表示是4
w写权限:
- 对于目录:一个目录拥有w权限,说明可以在该目录里创建、删除、重命名等操作(mkdir/touch/mv/rm等)
- 对于普通文件:一个普通文件拥有w权限,说明可以修改该文件的内容(vi/vim编辑器编辑文件)
- 写权限w(write)用数字表示是2
x可执行权限:
- 对于目录:一个目录拥有x权限,说明可以进入或切换到该目录里(cd命令)
- 对于普通文件:个普通文件拥有x权限,说明可以执行该文件(一般程序文件、脚本文件、命令都需要执行权限)
- 执行权限x(execute)用数字表示是1
符号表示 | 权限 |
---|---|
r - - | 只读权限 |
- w - | 只写权限 |
- - x | 仅可执行权限 |
r w - | 可读可写权限 |
- w x | 可写可执行权限 |
r - x | 可读可执行权限 |
r w x | 可读可写可执行权限 |
假如把三个权限位看成三个比特位,1代表有权限0代表没有权限,那么三个比特位最大能表示的数字是7,刚好够表示所有情况。
比如:1 1 1 表示可读可写可执行,1 0 0 表示只有读权限,0 0 0 表示没有任何权限
如果用8进制表示这三个比特位就刚好表示从0到7的所有情况
符号表示 | 二进制表示 | 八进制表示 | 权限 |
---|---|---|---|
- - - | 0 0 0 | 0 | 无任何权限 |
- - x | 0 0 1 | 1 | 仅可执行权限 |
- w - | 0 1 0 | 2 | 只写权限 |
- w x | 0 1 1 | 3 | 可写可执行权限 |
r - - | 1 0 0 | 4 | 只读权限 |
r - x | 1 0 1 | 5 | 可读可执行权限 |
r w - | 1 1 0 | 6 | 可读可写权限 |
r w x | 1 1 1 | 7 | 可读可写可执行权限 |
功能:设置文件的访问权限
语法:chmod [参数] [权限] [文件名]
注意:只有文件的拥有者和root才可以修改文件的权限
选项可以用字符也可以用3位8进制
用户表示符+、-、=
+
:向权限范围增加权限代号所表示的权限-
:向权限范围取消权限代号所表示的权限=
:向权限范围赋予权限代号所表示的权限用户符号
u
:文件拥有者g
:拥有者同组用户o
:其它用户a
:所有用户取消文件所属者的读取和写入权限
取消用户所属组的所有权限
给其他用户添加写权限
取消所有用户的写权限
如果要同时设置不同的用户权限可以用 逗号隔开
=
示例
可以直接用 =
给对应用户赋予对应的权限
符号表示 | 二进制表示 | 八进制表示 | 权限 |
---|---|---|---|
- - - | 0 0 0 | 0 | 无任何权限 |
- - x | 0 0 1 | 1 | 仅可执行权限 |
- w - | 0 1 0 | 2 | 只写权限 |
- w x | 0 1 1 | 3 | 可写可执行权限 |
r - - | 1 0 0 | 4 | 只读权限 |
r - x | 1 0 1 | 5 | 可读可执行权限 |
r w - | 1 1 0 | 6 | 可读可写权限 |
r w x | 1 1 1 | 7 | 可读可写可执行权限 |
-R 递归修改权限
-R递归修改文件权限
语法:chown [参数] [用户名] [文件名]
功能:修改文件拥有者
常用选项:-R
递归修改文件拥有者
注意:修改文件拥有者需要root用户,或者用sudo命令提升权限
使用sudo命令提升权限
语法:chgrp [参数] [要修改新用户组名]
功能:修改文件所属组
常用选项:-R
递归修改文件或者目录的所属组
注意:chgrp也需要 sudo
命令提升权限
语法:sudo chown [用户名]:[用户名] [文件名]
语法:umask
功能:查看或修改文件掩码
为什么创建的普通文件,或者对应都有一个默认权限,默认权限为何又是当前的样子?
0666
0777
我们发现文件和目录的默认权限,和我们创建出来的文件和目录和默认权限不一样。
这是为什么呢?
其实真正的权限位是通过计算得来的
计算方法为,先将umask按位取反再按位与上默认的文件或者目录权限值
(~umask)&[文件或者目录的权限值]
如果我们将文件掩码修改成 777
那么默认的文件权限就是 不可读、不可写也不可执行
就可以理解为凡是在 umask中出现的权限位,都不应该在 最终 权限位中出现
最终权限 = 默认权限&(~umask)
修改配置文件
全局配置文件(针对所有用户所有进程) => 针对所有用户有效
/etc/profile
系统和用户的环境变量信息,当用户第一次登录时,该文件被读取
/etc/bashrc
每个运行的bash信息(系统别名、函数及默认权限的定义),当bash被打开时,该文件被读取
局部配置文件(针对某个特定用户以及用户的所有进程) => 针对当前用户有效
~/.bashrc
当前用户的bash信息,当用户登录和每次打开新的shell时该文件被读取
~/.bash_profile
当前用户的环境变量,当用户登录时,该文件被读取
~/.bash_history
保存当前用户历史命令的文件
~/.bash_logout
当用户退出bash或者终端时,会首先执行该文件里的代码,然后再退出
那么问题来了。
文件权限只有读写和可执行,并没有删除权限,那么就是说只要某个用户只要有写目录的权限,用户就可以删除目录中的文件,而不用管这个用户是否有这个文件的写权限
我们发现hhy 用户也可以删除root用户的文件
ACL,是Access Control List(访问控制列表)的缩写,在Linux系统中,ACL可实现对单一用户设定访问文件的权限
语法:getfacl [文件或目录]
作用:查看文件的ACL策略以及权限
语法:setfacl [选项] [文件或目录名称]
作用:给某个文件设置ACL权限
常用选项:
-m
:修改 acl策略-x
:去掉某个用户或者某个组的权限-b
:删除所有的acl策略-R
:递归目录让kefu
用户对/data/kefu
目录拥有读写执行权限
命令:setfacl -R -m u:kefu:rwx /data/kefu
注意:粘滞位一般用于公开的目录上,也就是其它用户有权,读写执行
语法:chmod +t [目录名]
只要给目录加上粘滞位,其它用户就无法删除你的文件了
注意:如果这个目录本身就是你自己的那么你想怎么删就怎么删,加粘滞位也没用
命令:chmod u+s [文件名]
冒险位(u+s):S
s或S
;数字表示是4
如/usr/bin/passwd文件,因为用户会自己修改密码,就需要修改这个文件,当这个文件又是root的,就需要设置为冒险位,临时拥有root的权限来更新密码
命令:chmod g+s [文件名]
s或S
;数字表示是2
针对不同用户分配不同的权限,不同权限可以限制用户可以访问到的
系统资源
可以提高系统的安全性
帮助系统管理员对使用系统的用户进行跟踪
用户组的管理包括用户组的添加、删除和修改
。
/etc/passwd
:用户配置文件,存储用户的基本信息/etc/group
:存储用户组的信息/etc/shadow
:存储用户的密码信息语法:groupadd [参数 选项值] [用户组名]
作用:添加用户组
常用选项:
-g
:设置用户组id数字,如果不指定,则默认从1000之后递增(0~999都是系统的id),创建用户组时指定用户组编号GID,0代表超级管理员root组,1-999代表系统用户组,1000以后代表普通用户组用户组的信息文件 /etc/group
用户名 : 密码(占位符):用户组id:这个组所包含的用户(附属组)
注意:附属组只显示其它用户设置当前组为附属组才会显示,如果当前用户的主组就是自己则不会显示
比如 hhy就不会出现在自己的附属组里
如何判断用户组是否创建成功
命令:tail -1 /etc/group
语法:groupmod [选项 选项值] 用户组名
常用选项:
-g
:gid 缩写,设置一个自定义的用户组id数字-n
:name的缩写,设置新的用户组的名称示例:修改 test用户组,将组id改为1100,组名改为 my_test
语法:groupdel [用户组名]
注意:如果该用户组是某个用户的主组则无法删除
设置组密码:gpasswd 组名
移除组密码:gpasswd -r 名称
命令:gpasswd [选项 选项的值] 用户组的名称
-a
和-M
的区别
-a
一次只能追加一个用户到附属组中(-a,append,追加的形式,原有用户不覆盖)-M
一次可以追加多个用户到附属组中(覆盖追加,先把原有用户删除,然后添加我们的用户)示例1:创建三个用户user1~uesr3,将user1添加到mytest组里(附属组里)
命令:usermod -G test user1
或者用命令:gpasswd -a user1 mytest
示例2:把user1和user2添加到mytest组中
命令:gpasswd -M user2,user3 mytest
命令:gpasswd -d [移除的用户名称] [附属组名称]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。