运维基础【(中部)】
Linux 自有服务
自有服务,即不需要用户独立去安装的软件的服务,而是当系统安装好之后就可以直接使用的服务(内置)。
一、运行模式
运行模式也可以称之为 运行级别。
在 Linux 中存在一个进程:init(initialize,初始化),进程 id 是 1。
查看进程:#ps -ef | grep init
该进程存在一个对应的配置文件:inittab(系统运行级别配置文件,位置 /etc/inittab)
文件的主要内容:
根据上述的描述,可以得知。CentOS6.5 中存在 7种运行级别/模式。
0 —— 表示关机级别(不要将默认的运行级别设置成这个值[0])
1 —— 单用户模式
2 —— 多用户模式,不带 NFS(Network File System)
3 —— 多用户模式,完全的多用户模式
4 —— 没有被使用的模式(被保留模式)
5 —— X11,完整的图形化界面模式
6 —— 表示重启级别(不要将默认的运行级别设置成这个值[6])
与该级别相关的几个命令:
- #init 0
- #init 3
- #init 5
- #init 6
注意:init 指令需要超级管理员的权限,普通用户无法执行。
这些命令其实都是调用的 init 进程,将数字(运行级别)传递给进程,进程去读配置文件执行对应的操作。
切换到纯命令行模式下(临时切换,重启之后又恢复)
#init 3
切换之后需要输入用户名和密码,在**输入密码的时候没有 “*” 提示输入,只要自己确认输入的密码没有错误,按下回车即可。**
回到桌面模式
#init 5
设置模式永久为命令行模式
将 /etc/inittab 文件中的 initdefault 值设置成 3,然后重启操作系统。
二、用户与用户组管理(重点)
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个惟一的用户名和各自的密码。
用户在登录时键入正确的用户名和密码后,就能够进入系统和自己的主目录。
要想实现用户账号的管理,要完成的工作主要有如下几个方面:
用户账号的添加、删除、修改以及用密码的管理。
用户组的管理。
注意三个文件:
- /etc/passwd
- /etc/group
- /etc/shadow
1、用户管理
1、添加用户
- 常用的语法:#useradd 选型 用户名
- 常用选项:
- -g:表示指定用户的用户主组,选项的值可以是用户组的 id,也可以是组名
- -G:表示指定用户的用户附加组,选项的值可以是用户组的 id,也可以是组名
- -u:uid,用户的 id(用户的标识符),系统默认会从 500 之后按顺序分配 uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ的自选靓号情况】
案例:创建用户 zhangsan,不带任何选项
验证是否成功:
- 验证 /etc/passwd 的最后一行,查看是否有 zhangsan 的信息;
- 验证是否存在家目录(在 Centos 下创建好用户之后随之产生一个同名家目录);
扩展:认识 passwd 文件
用户名 : 密码 : 用户 ID : 用户组 ID : 注释 : 家目录 : 解释器 shell
用户名:创建新用户名称,后期登录的时候需要输入;
密码:此密码位置一般情况都是 “x”,表示密码的占位;
用户ID:用户的识别符;
用户组ID:该用户所属的主组ID;
注释:解释该用户是做什么用的;
家目录:用户登录进入系统之后默认的位置;
解释器shell:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,传递给内核处理};
注意:在不添加选项的时候,执行 useradd 之后会执行一系列的操作
- 创建同名的家目录;
- 创建同名的用户组;
案例:添加选项,创建用户 lisi,让 lisi 属于 501 主组,附加组 500,自选靓号 666。
注意:查看用户的主组可以查看 passwd 文件,查看附加组可以查看 group 文件。
2、修改用户
- 常用语法:#usermod 选项 用户名
Usermood:user modify,用户修改
常用选项:
- -g:表示指定用户的用户主组,选项的值可以是用户组的 id,也可以是组名
- -G:表示指定用户的用户附加组,选项的值可以是用户组的 id,也可以是组名
- -u:uid,用户 id(用户的标识符),系统默认会从 500 之后按顺序分配 uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ的自选靓号情况】
- -I:修改用户名
案例:修改 zhangsan 用户主组为 500,附加组改为 501
#usermod -g 500 -G 501 zhangsan
案例:修改 zhangsan 用户名,改为 wangerma
#usermod -l 新的用户名 旧的用户名
#usermod -l wangerma zhangsan
3、设置密码
Linux 不允许没有密码的用户登录到系统,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。
- 常用语法:#passwd 用户名
案例:设置 wangerma 用户的密码
在设置密码的时候也是没有任何输入提示的,放心输入,确保两次输入的密码一致,按下回车即可。
也可以使用弱密码,但是不建议,否则会看到以下的提示:
设置密码之后 shadow 文件中的体现:能够看出 lisi 用户没有密码的。
在设置用户密码之后可以登录账号,例如此处需要登录 wangerma
切换用户命令:#su [用户名] (switch user)
如果用户名不指定则表示切换到 root 用户。
切换用户需要注意的事项:
a. 从 root 往普通用户切换不需要密码,但是反之则需要 root 密码;
b. 切换用户之后前后的工作路径是不变的;
c. 普通用户没有办法访问 root 用户家目录,但是反之则可以;
4、删除用户
- 常用语法:#userdel 选项 用户名
Userdel:user delete(用户删除)
常用选项:
- -r:表示删除用户的同时,删除其家目录;
案例:删除 wangerma 用户
注意:已经登录的 wangerma 用户删除的时候提示删除失败,但是没有登录的 lisi 用户可以正常删除。
解决办法:简单粗暴,kill 对于用户的全部进程
提示:所有跟用户操作的命令(除 passwd 外)只有 root 超级管理员有权限执行。
2、用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新。
文件结构:
用户组名:密码:用户组ID:组内用户名
密码:X 表示占位符,虽然用户组可以设置密码,但是绝大部分的情况下不设置密码;
组内用户名:表示附加组时该组的用户名称;
1、用户组添加
- 常用语法:#groupadd 选项 用户组名
常用选项:
- -g: 类似用户添加里的 “-u”,-g 表示选择自己设置一个自定义的用户组ID 数字,如果自己不指定,则默认从 500 之后递增;
案例:使用 groupadd 指令创建一个新的用户组,命名为 Administrators
2、用户组编辑
- 常用语法:#groupmod 选项 用户组名
常用选项:
- -g: 类似用户添加里的 “u”,-g 表示选择自己设置一个自定义的用户组ID 数字
- -n: 类似用户修改 “-l ”,表示设置新的用户组的名称
案例:修改 Administrators 用户组,将组ID 从 502 改成 520,将名称改为 admins
3、用户组删除
- 常用语法:#groupdel 用户组名
注意:当如果需要删除一个组,但是这个组是某个用户的主组时,则不允许删除;如果确实需要删除,则先从组内移出所有用户。
三、网络设置
首先知道网卡配置文件位置:/etc/sysconfig/network-scripts
在目录中网卡的配置文件命令格式:ifcfg-网卡名称
ONBOOT:是否开机启动
BOOTPROTO:IP地址分配方式,DHCP 表示动态主机分配协议
HWADDR:硬件地址,MAC地址
如果后续需要重启网卡怎么去操作呢?
- #service network restart
- #systemctl network restart
在有的分支版本中可能没有 service 命令来快速操作服务,但是有一个共性的目录:/etc/init.d
这个目录中放着很多服务的快捷方式:
此处重启网卡命令还可以使用:
#/etc/init.d/network restart
- 扩展:如果修改网卡的配置文件,但是配置文件的目录层次很深,此时可以在浅的目录中创建一个快捷方式 (软链接),方便以后去查找
#ln -s原始文件的路径 快捷方式的路径
通过 ls -l 可以列出如下的效果:
其中,文件类型位置的 “l” 表示其类型为 link(连接类型),后面的 “->” 指向的是原始文件路径。
扩展2:如何去重启单个网卡?
- 停止某个网卡:#ifdown 网卡名
- 开启某个网卡:#ifup 网卡名
例如:需要停止-启动(重启)eth0 网卡,则可以输入
- #ifdown eth0
- #ifup eth0
提示:在实际工作的时候不要随意禁网卡
四、ssh服务(重点)
ssh (secure shell,安全外壳协议),该协议有 2 个常用的作用:远程连接协议、远程文件传输协议。
协议使用 端口 号:默认是 22
可以是被修改的,如果需要修改,则需要修改 ssh 服务的配置文件:
#/etc/ssh/ssh_config
端口号可以修改,但是得注意 2 个事项:
- 注意范围,端口范围是从 0 - 65535
- 不能使用别的服务已经占用的端口
服务启动/停止/重启:
#service sshd start/stop/restart
#/etc/init.d/sshd start/stop/retart
1、远程终端
终端工具主要帮助运维人员连接远程的服务器,常见终端工具有:Xshell、secureCRT、PuTTY等。
1、获取服务器IP地址,可以通过 ifconfig 命令进行查看,然后顺手测试 ip的连接相通性
2、打开 PuTTY,输入相关的信息
3、在弹出 key 确认的时候点击 “是” ,以后不会再提示
4、输入登录信息
2、SSH 服务文件传输
可视化传输工具:Filezilla
安装好之后可以查看到桌面图标:
1、选择 ”文件“ - ”站点管理器(Ctrl + S)“
2、连接好之后的效果
3、从本地 Windows 上传文件到 Linux 中方式
**支持直接拖拽文件,**也可以右键本地需要上传的文件,然后点选 ”上传 “ 即可
4、下载 Linux 文件到本地
**支持服务器文件直接拖拽到本地,**也可以在右侧窗口选择需要下载的文件,右键,点选 ”下载“ 即可
拓展3:通过命令行工具来传输文件/文件夹
工具:PSCP.exe(必须通过 cmd 命令行打开),为了使用方便可以将其放到环境变量目录中
如果不清楚哪些路径是环境变量路径,只需要将其放到 C:/Windows 目录下即可。
用法:
- a、pscp 选项 用户名@Linux主机地址:资源路径 windows本地的地址(下载到 win)
- b、pscp 选项 资源路径 用户名@Linux 主机地址:远程路径 (上传到 Linux)
- c、pscp 选项 -ls 用户名@Linux主机地址 (列出远程路径下的结构)
1、下载到本地 Windows
要求将远程 Linux 服务器下的/etc 整个目录下载到本地 E:\tmp 下
#pscp -r root@192.168.21.128:/etc E:\tmp
在 CMD 中输入之后输入密码
2、上传文件到 Linux
#pscp -r “E:\nihao\xxxx” root@192.168.21.128:/root
Linux 自有服务(二)
一、设置主机名
回顾:
#hostname
#hostname -f FQDN(全限定域名)
1、临时设置主机名(立竿见影),需要切换用户使之生效
#hostname 设置主机名
2、永久设置主机名(需要重启)
先找到一个文件
/etc/sysconfig/network 【主机名的配置文件】
*CentOS 7 ——> /etc/hostname
修改其中的 HOSTNAME 为自己需要设置的永久主机名
windows 的 host 文件
3、修改 Linux 服务器的 hosts 文件,将 yunwei 指向本地(设置 FQDN)
Hosts 文件的位置:/etc/hosts
问题:不设置 FQDN 会怎么样?
- 1、很多开源服务器软件(例如 Apache)则无法启动,或出现报错;
- 2、方便记忆,看到主机名对其作用有一个初步判断;
- 3、如果不设置则会影响本地的域名解析(本地访问)。
二、chkconfig
- 作用:相当于 windows 下 ”安全卫士“、”电脑管家“ 之类的安全辅助工具 提供 ”开机启动项“ 的一个管理服务。
- 在 Linux 下不是所有的软件安装完成之后都有开机启动服务,有的可能需要自己去添加。除此之外还可以查看和删除。
1、开机启动服务查询
*CentOS7 —— > systemctll list-unit-files
#chkconfig --list
其中 0-6 表示各个启动级别:
例如:以 httpd 为例,其 3 级别为关闭(off),则表示其在 3 启动形式下默认开机不启动
5 对应的也是关闭,则表示其在桌面环境下也是开机不启动。
再例如:kdump 服务,在 2,3,4,5 的级别下默认开机启动的,其他级别下默认开机不启动
2、删除服务
#chkconfig --del 服务名
例如删除 httpd 服务
3、添加开机启动服务
#chkconfig --add 服务名 【必须要保证服务正常运行,才可以添加】
4、设置服务在某个级别下开机启动/不启动【重点命令】
#chkconfig --level 连在一起的启动级别 服务名 on/off
- 案例:设置 httpd 服务在 3,5 级别下默认开机启动
案例:设置 httpd 服务在 5 的级别下默认开机不启动
三、ntp 服务
- 作用:ntp 主要是用于 对计算机的时间同步管理操作。
时间 是对服务器来说是很重要的,一般很多网站都需要读取服务器时间来记录相关信息,如果时间不准,则可能造成很大的影响。
例如:当前虚拟机里的 Linux 时间就是不准确的
同时服务器时间方式有 2 个:一次性同步(手动同步)、通过服务自动同步。
www.ntp.org.cn/pool.php
上游的概念:
1、一次性同步时间(简单)
#update 时间服务器的域名或IP地址
IP 地址查看可以访问:http://www.ntp.org.cn/pool.php
2、设置时间同步服务
服务名:ntpd
启动 ntpd 服务
*CentOS7 ——> systemctl start ntpd
#service ntpd start 或者 /etc/init.d/ntpd start
设置 ntpd 服务开机启动:
#chkconfig --list | grep ntpd
#chkconfig --level 35 ntpd on
四、防火墙服务
防火墙:防范一些网络攻击。有软件防护墙、硬件防火墙之分。
防火墙选择让请求通过,从而保证网络安全性。
在当前的 CentOS6.5 中防护墙有一个名称:iptables【7.x 中默认使用的是 firewalld】
国家长城防护墙 GFW
1、查看 iptables 是否开机启动
*systemctl status firewalld
2、iptables 服务启动/重启/关机
#service iptables start/restart/stop
/etc/init.d/iptables start/stop/restart
3、查看 iptables 的状态(规则)
#service iptables status
如果 iptables 没有启动,则提示服务没启动,如果已经启动,则显示防护墙的相关的规则信息
4、查看规则的命令
*CentOS7 ——> firewall-cmd --list-all
#iptables -L -n
含义:
- -L: 表示列出规则
- -n: 表示将单词表达形式改成数字形式显示
5、简单设置防火墙规则
例如,需要允许 80端口通过防火墙,则规则可以用以下的命令来设置
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问 80端口
iptables:主命令
-A:add,添加规则(最后)
INPUT:进站请求【出站 output】
-p:protocol,指定协议(icmp/tcp/udp)
--dport:指定端口号
-j:指定行为结果,允许(accept)/禁止(reject)
添加完之后需要保存操作:
*CentOS7 保存命令:firewall-cmd -reload
/etc/init.d/iptables save
测试 80 端口访问:
五、rpm 管理(重点)
- 作用:rpm 的作用类似于 windows 上的电脑管家中 ”软件管理“、安全卫士里面 ”软件管家“ 等产品,主要作用是对 Linux 服务器上的软件包进行对应管理操作,管理分为:查询、卸载、安装。
1、查询某个软件的安装情况
#rpm -qa | grep 关键词
选项:
- -q: 查询,query
- -a: 全部,all
案例:查询 Linux 上是否安装 Firefox
案例:查询是否安装 qq
2、卸载某个软件
#rpm -e 软件的名称
火狐卸载的时候是没有依赖关系的,所以可以直接卸载。
但是在卸载 Apache 的时候提示无法卸载:
当存在依赖关系的时候又不想去解决这个问题的时候可以:
#rpm -e 软件包名 --nodeps
3、软件的安装
要想装软件,和 Windows 下载一样,先得找到安装包。
软件包的获得方式:
- 1、去官网下载;
- 2、不介意老版本的话,可以从光盘(或者是镜像文件)中读取;
- 此处以光盘文件为例:
查看块状设备的信息:
- #lsblk (list block devices)
Name:名称
Size:设备大小
Type:类型
MountPoint:挂载点(类似于 windows 下盘符)
扩展:光盘的挂载和解挂
1、解挂操作:
- 命令: umount
- 语法:#umount 当前设备的挂载点(路径)
此时,相当于 U 盘在 windows 上已经被弹出了,但是没有拔下电脑 USB 接口。
2、挂载光盘
- 命令: mount
- 语法:#mount 设备原始地址 要挂载的位置路径
设备原始地址:地址统一都在 /dev 下,然后根据大小确定具体 name 值,拼凑在一起组成原始地址,例如当前:“ /dev/sr0
要挂载的位置路径:挂载目录一般都在 mnt 下,也可以在 mnt 下建目录,此处以 “ /mnt/dvd
- 3、安装软件的命令:
#rpm -ivh 软件包完整名称
选项:
- -i: install,安装
- -v: 显示进度条
- -h: 表示以 “#“ 形式显示进度条
六、cron/crontab 计划任务(重点)
- 作用:操作系统不可能 24 小时都有人在操作,有些时候想在指定的时间点去执行任务(例如:每天夜里 2 点去重新启动 Apache),此时不可能真有人每天夜里 2 点去执行命令,此时可以交给计划任务程序去执行。
- 语法:#crontab 选项
常用选项:
- -l:list,列出指定用户的计划任务列表
- -e:edit,编辑指定用户的计划任务列表
- -u: user,指定的用户名,如果不指定,则表示当前用户
- -r: remove,删除指定用户的计划任务列表
1、列出
2、编辑计划任务(重点)
计划任务的规则语法格式,以行为单位,一行则为一个计划:
分 时 日 月 周 需要执行的命令
分 时 日 月 周 需要执行的命令
分 时 日 月 周 需要执行的命令
例如:如果想要每天的 0 点 0 分执行 reboot 指令,则可以写成
0 0 * * * reboot
取值范围:
- 分:0~59
- 时:0~23
- 日:1~31
- 月:1~12
- 周:0~6,0 表示星期天
四个符号:
- *: 表示取值范围中的每一个数字
- -: 做连续区间表达式的,要想表示 1~7,则可以写成:1-7
- /: 表示每多少个,例如:想每 10 分钟一次,则可以在分的位置写:*/10
- ,: 表示多个取值,比如想在 1点,2点 6点执行,则可以在时的为位置写:1,2,6
问题1:每月1、10、22 日的 4:45 重启 network 服务
45 4 1,10,22 * * service network restart
问题2:每周六、周日的 1:10 重启 network 服务
10 1 * * 6,0 service network restart
问题3:每天 18:00 至 23:00 之间每隔 30 分钟重启 network 服务
*/30 18-23 * * * service network restart
问题4:每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行一次重启
*3,15 8-11 /2 * * reboot
案例:真实测试案例,每 1 分钟往 root 家目录中的 RT.txt 中输入当前的时间信息,为了看到效果使用追加输出
- 计划任务:*/1 * * * * date+“%F %T” >> /root/RT.txt
- Crontab 权限问题:本身是任何用户都可以创建自己的计划任务。
但是超级管理员可以通过配置来设置某些用户不允许设置计划任务:
配置文件位于(黑名单):/etc/cron.deny 里面写用户名,一行一个
还有一个配置文件:(白名单)
/etc/cron.allow (本身不存在,自己创建)
注意:白名单优先级高于黑名单,如果一个用户同时存在两个名单文件中,则会被默认允许创建计划任务。
Linux 的权限管理操作
Linux 的权限操作与用户、用户组是兄弟操作。
一、权限概述
总述:Linux 系统一般将文件可存/取访问的身份分为 3 个类别:owner、group、others,且 3 种身份各有 read、write、execute 等权限。
1、权限介绍
什么是权限?
在多用户(可以不同时)计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用**权力**,像是文件夹、特定系统指令的使用或存储量的限制。
在 Linux 中分别有 读、写、执行权限:
- 读权限:
- 对于文件夹来说,读权限影响用户是否能够列出目录结构
- 对于文件来说,读权限影响用户是否可以查看文内容
- 写权限:
- 对于文件夹来说,写权限影响用户是否可以在文件夹下 ”创建/删除/复制到/移动到“ 文档
- 对于文件来说,写权限影响用户是否可以编辑文件内容
- 执行权限:
- 一般都是对于文件来说,特别是脚本文件。
2、身份介绍
Owner 身份(文件所有者,默认为文档的创建者)
由于 Linux 是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的 ”私密文件“ ,即个人所有者。因为设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。
例如某个 MM 给你发了一封 Email 情书,你将情书转为文件之后存档在自己的主文件夹中。为了不让别人看到情书的内容,你就能利用所有者的身份去设置文件的适当权限,这样,
即使你的情敌想偷看你的情书内容也是做不到的。
Group 身份(与文件所有者同组的用户)
与文件所有者同组最有用的功能就体现在多个团队在同一台主机上开发资源的时候。例如主机上有 A、B 两个团体,A 中有 a1,a2,a3 三个成员,B 中有 b1,b2 两个成员,这两个团体要共同完成一份报告 F。由于设置了适当的权限,A、B 团体中的成员都能互相修改对方的数据,但是团体 C 的成员则不能修改 F 的内容,甚至连查看的权限都没有。同时,团体的成员也能设置自己的私密文件,让团队的其他成员也读取不了文件数据。**在 Linux 中,每个账户支持多个用户组。**如用户 a1、b1 即可属于 A 用户组,也能属于 B 用户组【主组和附加组】。
Others 身份(其他人,相对于所有者)
这个是相对概念。打个比方,大明、二明、小明一家三兄弟住在一间房,房产证上的登记者是大明(owner 所有者),那么,大明一家就是一个用户组,这个组是有大明、二明、小明三个成员;另外有个人叫张三,和他们没有关系,那么这个张三就是其他人了。
同时,大明、二明、小明有各自的房间,三者虽然能自由进出各自的房间,但是小明不能让大明看到自己的情书、日记等,这就是文件所有者(用户)的意义。
Root 用户(超级用户)
在 Linux 中,还有一个神一样存在的用户,那就是 root 用户,因为在所有用户中它拥有最大的权限,所以管理着普通用户。
3、Linux 的权限介绍
要设置权限,就需要知道文件的一些基本属性和权限的分配规则。在 Linux 中,ls 命令常用来查看文件的属性,用于显示文件的文件名和相关属性。
#ls -l 路径 【ls -l 等价于 ll】
标红的部分就是 Linux 的文档权限属性的信息。
Linux 中存在用户、用户组和其他人概念,各自有不同的权限,对于一个文档来说,其权限具体分配如下:
十位字符表示含义:
- 第 1 位:表示文档类型,取值常见的有 ”d 表示文件夹“、”- 表示文件“、”l 表示软链接“、”s 表示套接字“等等;
- 第 2-4 位:表示文档所有者的权限情况,第 2 位表示读权限的情况,取值有 r、-;第 3 位表示写权限的情况,w 表示可写,- 表示不可写,第 4 位表示执行权限的情况,取值有 x、- 。
- 第 5-7 位:表示与所有者同在一个组的用户的权限情况,第 5 位表示读权限的情况,取值有 r、- ;第 6 位表示写权限的情况,w 表示可写,- 表示不可写,第 7 位表示执行权限的情况,取值有 x、- ;
- 第 8-10 位:表示除了上面的前 2 部分的用户之外的其他用户的权限情况,第 8 位表示读权限的情况,取值有 r、- ;第 9 位表示写权限的情况,w 表示可写,- 表示不可写,第 10 位表示执行权限的情况,取值有 x、- 。
权限分配中。均是 rwx 的三个参数组合,且位置顺序不会变化。没有对应权限就用 - 代替。
例如:以下一个文档的权限是怎么样的?
- a、其是文件夹类型
- b、所有者:拥有全部权限(读写执行)
- c、同组用户:可读、可执行
- d、其他用户:可读、可执行
二、权限设置
- 语法:#chmod 选项 权限模式 文档
注意事项:
- 常用选项:
-R:递归设置权限(当文档类型为文件夹的时候) - 权限模式:就是该文档需要设置的权限信息
- 文档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。
- 注意点:如果想要给文档设置权限,操作者要么是 root 用户,要么就是文档的所有者。
1、字母形式
给谁设置:
- u:表示所有者身份 owner(user)
- g:表示给所有者同组用户设置(group)
- o:表示 others,给其他用户设置权限
- a:表示 all,给所有人(包含 ugo 部分)设置权限
如果在设置权限的时候不指定给谁设置,则默认给所有用户设置
权限字符:
- r:读
- w:写
- x:表示执行
- -:表示没有权限
权限分配方式:
- +:表示给具体的用户新增权限(相对当前)
- -:表示删除用户的权限(相对当前)
- =:表示将权限设置成具体的值(注重结果)
例如:需要给 anaconda-ks.cfg 文件(-rw--------.)设置权限,要求所有者拥有全部的权限,同组用户拥有读和执行权限,其他用户只读权限。
- #chmod u+x, g+rx, o+r anaconda-ks.cfg
提示:当文档拥有执行权限,则其颜色则终端是绿色。
- #chmod u=rwx,g=rx,o=r anaconda-ks.cfg
例如:如果 anaconda-ks.cfg 文件什么权限都没有,可以使用 root 用户设置所有人都有执行权限,则可以写成
- #chmod +x anaconda-ks.cfg
- #chmod a=x anaconda-ks.cfg
- #chmod a+x anaconda-ks.cfg
2、数字形式
经常会在一些技术性的网页上看到类似于 #chmod 777 a.txt 这样的一个权限,这种形式称之为数字形式权限(777)。
- 读:r 4
- 写:w 2
- 执行:x 1
- 没有任何权限:0
例如:需要给 anaconda-ks.cfg 设置权限,权限要求所有者拥有全部权限,同组用户拥有读执行权限,其他用户只读。
全部权限(u): 读+写+执行 =4+2+1=7
读和执行(g): 读+执行 =4+1=5
读权限(o): 读 =4
由上得知权限为:754
#chmod 754 anaconda-ks.cfg
面试题:用超级管理员设置文档的权限命令是 #chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?
拥有者:7=4+2+1=读+写+执行
同组用户:3=2+1=写+执行
其他用户:1=1=执行
注意:在写权限的时候千万不要设置类似于上面的这种 ”奇葩权限“。 如果一个权限数字中但凡出现 2 与 3 的数字,则该权限有不合理的情况。
3、注意事项
使用 root 用户创建一个文件夹(/oo),权限默认,权限如下:
需要在 oo 目录下创建文件(oo/xx.txt),需要给 777 权限:
切换到 test 用户 (不是文档所有者,也不是同组用户,属于 others 部分):
问题1:test 用户是否可以打开 oo/xx.txt 文件?【能打开】
问题2:test 用户是否可以编辑 oo/xx.txt 文件?【可以】
问题3:test 用户是否可以删除 oo/xx.txt 文件?【不可以,同样还不允许创建文件/文件夹、移动文件、重命名文件】
在 Linux 中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有,才可以删除。
三、属主与属组设置
属主:所属的用户(文件的主人)
属组:所属的用户组
前面的那个 root 就是属主
后面的那个 root 就是属组
这两项信息在文档创建的时候会使用创建者的信息(用户名、用户所属的主组名称)
如果有时候去删除某个用户,该用户对应的文档的属主和属组信息就需要去修改。
1、chown(重点)
- 作用:更改文档的所属用户
- 语法:#chown -R username 文档路径
案例:将刚才 root 用户创建的 oo 目录,所有者更改为 test
#chown test oo/
2、chgrp(了解)
- 作用:更改文档的所属用户组
- 语法:#chgrp -R groupname 文档的路径
案例:将刚才 root 用户创建的 oo 目录,所有者更改为 test,并且将所属用户组也改为 test
#chgrp test oo/
思考,如何通过一个命令实现既可以更改所属的用户,也可以修改所属的用户组呢?
#chown -R username:groupname 文档路径
案例:要求只使用 chown 指令,将 oo 目录的所属用户和用户组改回成 root,并且包含其子目录
四、扩展(1)
问题:reboot、shutdown、init、halt、user 管理,在普通用户身份上都是操作不了,但是有些特殊情况下又需要有执行权限。又不可能让 root 用户把自己的密码告诉普通用户,这个问题该怎么解决?
该问题是可以被解决的,可以使用 sudo(switch user do)命令来进行权限设置。Sudo 可以让管理员(root)事先定义某些特殊命令谁可以执行。
默认 sudo 中是没有除 root 之外用户的规则,要想使用规则先配置 sudo。
Sudo 配置文件:/etc/sudoers
- a、配置 sudo 文件请使用 “#visudo”,打开之后其使用方法和 vim 一致。
- b、配置普通用户的权限
Root:表示用户名,如果是用户组,则可以写成 “%组名”
ALL:表示允许登录的主机(地址白名单)
(ALL):表示以谁的身份执行,ALL 表示 root 身份
ALL:表示当前用户可以执行的命令,多个命令可以使用 “,” 分割
案例:本身 test 用户不能添加用户,要求使用 sudo 配置,将其设置为可以添加用户,并且可以修改密码(但是不能修改 root 用户密码)
注意:在写 sudo 规则的时候不建议写直接形式的命令,而是写命令的完整路径。
路径可以使用 which 命令来查看
语法:#which 指令名称
在添加好对应的规则之后就可以切换用户,切换到普通用户 test,再去执行:
此时要想使用刚才的规则,则以以下命令进行:
#sudo 需要执行的指令
在输入 sudo 指令之后需要输入当前的用户密码进行确认的操作(不是 root 用户密码),输入之后在接下来 5 分钟内再次执行 sudo 指令不需要密码。
特别注意:此处按照案例要求,不能让 test 用户修改 root 密码,因此规则还需要调整,不然其可以修改 root 密码的:
禁止修改 root 密码的配置:/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
补充:在普通用户下怎么查看自己具有哪些特殊权限呢?
#sudo -l
最后:sudo 不是任何 Linux 分支都有的命名,常见 CentOS 与 Ubuntu 都存在 sudo 命令。