lamp-linux3

LAMP编程之Linux(3)

1、权限管理

一、权限介绍(重点)

在Linux中分别有读、写、执行权限:php

读权限:html

       对于文件夹来讲,读权限影响用户是否可以列出目录结构node

       对于文件来讲,读权限影响用户是否能够查看文件内容mysql

 

写权限:linux

       对文件夹来讲,写权限影响用户是否能够在文件夹下“建立/删除/复制到/移动到”文档nginx

       对于文件来讲,写权限影响用户是否能够编辑文件内容web

 

执行权限:面试

       通常都是对于文件来讲,特别脚本文件。sql

       对于文件来讲,执行权限影响文件是否能够运行。shell

       对于文件夹来讲,执行权限影响对应的用户是否能够在文件夹内执行指令。

 

二、身份介绍(重点)

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全部者),那么,大明一家就是一个用户组,这个组有大明、二明、小明三个成员;另外有我的叫张三,和他们三没有关系,那么这个张三就是其余人(others)了。

同时,大明、二明、小明有各自的房间,三者虽然能自由进出各自的房间,可是小明不能让大明看到本身的情书、日记等,这就是文件全部者(用户)的意义。

Root用户(超级用户)

在Linux中,还有一个神同样存在的用户,这就是root用户,由于在全部用户中它拥有最大的权限 ,因此管理着普通用户。所以之后在设置文档的权限的时候没必要考虑root用户。

 

三、Linux的权限查看

要设置权限,就须要知道文件的一些基本属性和权限的分配规则。在Linux中,ls命令经常使用来查看文档的属性,用于显示文件的文件名和相关属性。

#ls -l 路径          【ls -l  等价于 ll】

 

标红的部分就是Linux的文档权限属性信息。

Linux中存在用户(owner)、用户组(group)和其余人(others)概念,各自有不一样的权限,对于一个文档来讲,其权限具体分配以下:

 

十位字符表示含义:

第1位:表示文档类型,取值常见的有“d表示文件夹”、“-表示文件”、“l表示软链接”、“s表示套接字”、“c表示字符设备”、“b表示块状设备”等等;

第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以及-以外,还有一些特殊的权限代码“s”、“t”,这些不在本次考虑范围内。(黏贴位,特殊权限位)

 

权限分配中,均是rwx的三个参数组合,且位置顺序不会变化。没有对应权限就用 – 代替。

 

四、权限设置(重点)

语法:#chmod [选项] 权限模式 文档路径

注意事项:

         经常使用选项:

                          -R:递归设置权限        (当文档类型为文件夹的时候

         权限模式:就是该文档须要设置的权限信息

         文档:能够是文件,也能够是文件夹,能够是相对路径也能够是绝对路径。

注意点:若是想要给文档设置权限,操做者要么是root用户,要么就是文档的全部者。

4.一、字母形式

 

 

给谁设置:

         u:表示全部者身份owner(user)

         g:表示给全部者同组用户设置(group)

         o:表示others,给其余用户设置权限

         a:表示all,给全部人(包含ugo部分)设置权限

                  若是在设置权限的时候不指定给谁设置,则默认给全部用户设置

 

什么权限-权限字符:

         r:读

         w:写

         x:表示执行

         -:表示没有权限

 

如何设置-权限分配方式:

         +:表示给具体的用户新增权限(相对当前)

         -:表示删除用户的权限(相对当前)

         =:表示将权限设置成具体的值(注重结果)【赋值】

 

设置多个身份的权限时候,每一个身份之间须要经过英文逗号分开。

 

例如:须要给/root/anaconda-ks.cfg文件(-rw-------.)设置权限,要求全部者拥有所有的权限,同组用户拥有读和写权限,其余用户只读权限。

答案:

         #chmod u+x,g+rw,o+r /root/anaconda-ks.cfg

         或者:

         #chmod u=rwx,g=rw,o=r /root/anaconda-ks.cfg

 

提示:当文档拥有执行权限(任意部分),则其颜色在终端中是绿色。

 

#chmod ug=rwx  形式,若是有两部分权限同样则能够合在一块儿写的

等价于:

       #chmod u=rwx,g=rwx

 

例如:若是anaconda-ks.cfg文件什么权限都没有,可使用root用户设置全部的人都有执行权限,则能够写成

什么权限都没有应该是:----------

目标的效果:---x--x--x

#chmod a=x anaconda-ks.cfg

#chmod a+x anaconda-ks.cfg

#chmod u+x,g+x,o+x anaconda-ks.cfg

#chmod ugo=x anaconda-ks.cfg

#chmod ugo+x anaconda-ks.cfg

#chmod +x anaconda-ks.cfg

 

 

案例:设置文件“~/php/php.txt”权限,要求全部者所有权限,同组用户拥有读权限、写权限,其余人拥有读权限

#chmod u=rwx,g=rw,o=r ~/php/php.txt

 

更改要求:全部者所有权限,同组用户拥有读权限、写权限,其余人拥有读权限、写权限

#chmod o+w ~/php/php.txt

 

练习:

         ①设置文件夹/tmp/php的权限(若是文件夹不存在,自行建立),要求权限为递归权限,而且全部者有所有权限,同组用户有读执行权限,其余用户只读权限;

#mkdir /tmp/php

#chmod -R u=rwx,g=rx,o=r /tmp/php

         ②设置文件/tmp/php/class.sh权限,文件若是不存在则自行建立,要求权限为全部者所有权限,同组用户读和执行权限,其余用户没有权限;

         #touch /tmp/php/class.sh

         #chmod u=rwx,g=rx,o=--- /tmp/php/class.sh

         ③使用普通用户在/tmp/php目录下建立test目录,设置目录权限为全部者拥有所有权限,同组用户只读,其余用户只读;(建立不了test用户)

 

4.二、数字形式

常常会在一些技术性的网页上看到相似于#chmod  777  a.txt  这样的一个权限,这种形式称之为数字形式权限(777)。

 

读:r        4

写:w              2

执行:x          1

没有任何权限(-):0

 

 

组合权限数字的时候遵循,最短路径要求,而且最多只能出现一次。

 

例如:须要给anaconda-ks.cfg设置权限,权限要求全部者拥有所有权限,同组用户拥有读执行权限,其余用户只读。

分析:

         全部者(第1位):所有权限 = 读 + 写 + 执行 = 4 + 2 + 1 = 7

         同组用户(第2位):读执行 = 读 + 执行 = 4 + 1 = 5

         其余用户(第3位):读 = 4

 

组合: 754

 

最终得出的结果是754

#chmod 754 anaconda-ks.cfg

 

 

面试题:用超级管理员设置文档的权限命令是#chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?

全部者 = 7 = 4 + 2 + 1 = 读 + 写 + 执行

同组用户 = 3 = 2 + 1 = 写 + 执行

其余用户 = 1 = 执行

问题在权限731中3表示写+执行权限,可是写又没必要须须要能打开以后才能够写,所以必须须要具有读权限,所以权限不合理。之后建议各位在设置权限的时候不要设置这种“奇葩权限”。单独出现二、3的权限数字通常都是有问题的权限

注意:在写权限的时候千万不要设置相似于上面的这种“奇葩权限”。若是一个权限数字中但凡出现2与3的数字,则该权限有不合理的状况。

 

练习:

         ①使用root用户设置文件夹/root/20180811的权限为:全部者所有权限,同组用户拥有读和执行权限,其余用户没有权限,请使用数字权限的形式设置,写出指令;750

         ②请使用root用户写出设置文件/root/20180811.txt文件的权限,权限要求为:全部者拥有所有权限,同组用户要求能够读写,其余用户只读,要求使用数字形式;764

         ③张三疯(root)收到某个MM的情书,请使用数字形式设置张三疯的Email情书权限(文件为/root/email.doc),权限要求只有全部者能够读写,除此以外任何人没有权限;600

4.三、注意事项

使用root用户建立一个文件夹(/oo),权限默认,权限以下:

 

须要在oo目录下建立文件(oo/xx.txt),须要给777权限:

 

 

扩展:

       在Linux系统中,建立文档的权限有一个默认值,以当前的系统为例,其建立文件夹以后的默认权限是755,建立文件以后的权限是644。

       之因此会这样是受到了系统中umask(掩码)的值的影响,其是用于指定文档建立好以后的权限,umask默认为022。

       计算方式:

              对于文件:文件的权限 = 666 – umask掩码

              对于文件夹:文件夹的权限 = 777 - umask掩码

切换到admin用户(不是文档全部者,也不是同组用户,属于other部分):

 

问题1:admin用户是否能够打开oo/xx.txt文件?

问题2:admin用户是否能够编辑oo/xx.txt文件?

问题3:admin用户是否能够删除oo/xx.txt文件?

 

在Linux中,若是要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,若是有才能够删除

五、属主与属组

属主:所属的用户(文件的主人),文档全部者   

属组:所属的用户组(同组用户的组名称)  

 

前面的那个root就是属主

后面的那个root就是属组

 

这两项信息在文档建立的时候会使用建立者的信息(用户名、用户所属的主组名称)。

 

之因此须要设置这个:若是有时候去删除某个用户,则该用户对应的文档的属主和属组信息就须要去修改(相似离职以前的工做交接)。

5.一、chown(重点)

做用:更改文档的所属用户(change owner

语法:#chown  [-R]  新的username 文档路径

 

 

注意:修改全部者的人必须是root或者全部者本身,其余人无权修改全部者。

 

案例:将先前设置的/oo目录的全部者设置成成admin

#chown -R admin /oo

 

 

 

5.二、chgrp(了解)

做用:更改文档的所属用户组(change group

语法:#chgrp  [-R]  groupname  文档的路径

案例:将刚才oo目录的全部用户组名改成admin

#chgrp -R admin /oo

 

 

 

 

 

思考,如何经过一个命令实现既能够更改所属的用户,也能够修改所属的用户组呢?

答:能够实现的,经过chown命令

       语法:#chown  [-R]  username:groupname   文档路径

 

案例:将刚才oo的文档的所属组所属用户修改成root

#chown -R root:root /oo

 

 

问题:zhangsan用户使用本身的账号建立文件index.html,而且当时默认的权限是644,后续管理员root将该文件的属主改为了lisi,属组改为lisi,则zhangsan对文件的操做权限有变化吗?若是有权限是多少?

 

六、sudo(重点)

问题:reboot、shutdown、init、halt,在普通用户身份上都是操做不了,可是有些特殊的状况下又须要有执行权限。又不可能让root用户把本身的密码告诉普通用户,这个问题该怎么解决?

 

该问题是能够被解决的,可使用sudo(switch user do)命令来进行权限设置。Sudo可让管理员(root)事先定义某些特殊命令谁能够执行

 

默认sudo中是没有除root以外用户的规则,要想使用则先配置sudo。

 

Sudo配置文件:/etc/sudoers

该文件默认只读,不容许修改,所以不能直接修改。

 

a. 配置sudo文件请使用“#visudo”,打开以后其使用方法和vim一致

  

b. 配置普通用户的权限

 

Root表示用户名,若是是用户组,则能够写成“%组名”

ALL:表示容许登陆的主机(地址白名单)

(ALL):表示以谁的身份执行,ALL表示root身份

ALL:表示当前用户能够执行的命令,多个命令可使用“,”分割

 

案例:使用admin这个用户,赋予其添加用户权限。

注意:在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径。

路径可使用which(whereis亦可)命令来查看

语法:#which 指令名称

 

Whereis会找出一些非可执行文件,建议使用which

 

 

在添加好对应的规则以后就能够切换用户,切换到普通用户admin,再去执行:

 

 

此时要想使用刚才的规则,则以如下命令进行:

#sudo 须要执行的指令(就是放权的指令名称)

 

此时输入的密码是当前执行sudo指令的用户的密码,而非root密码。

 

在输入sudo指令以后须要输入当前的用户密码进行确认的操做(不是root用户密码),输入以后在接下来5分钟内再次执行sudo指令不须要密码

 

补充:在普通用户下怎么查看本身具备哪些特殊权限呢?

#sudo  -l                         表示list

 

 

最后:sudo不是任何Linux分支都有的命令,常见centos与ubuntu都存在sudo命令。

 

做业:使用sudu实现让普通用户具有添加、删除用户的权限。

 

2、运行级别

运行模式也能够称之为运行级别(Running Level

 

在linux中存在一个进程:init (initialize,初始化),进程id是1。

查看进程:#ps -ef|grep init

 

 

该进程存在一个对应的配置文件:inittab(系统运行级别配置文件,位置/etc/inittab)

 

文件的主要内容:

 

根据上述的描述,能够得知,Centos6.5中存在7种运行级别/模式。

0 — 表示关机级别(不要将默认的运行级别设置成这个值)

1 — 单用户模式(找回root密码的)

2 — 多用户模式,不带NFS(Network File Syetem)

3 — 多用户模式,彻底的多用户模式(不带桌面的,纯命令行模式)

4 — 没有被使用的模式(被保留模式)

5 — X11,完整的图形化界面模式

6 — 表示重启级别(不要将默认的运行级别设置成这个值)

 

与该级别相关的几个命令(临时切换,当即生效):

#init 0               表示关机

#init 3               表示切换到不带桌面的模式(CLI 命令行模式)

#init 5               切换到图形界面(前提必须先确保已经安装了图形化界面)

#init 6              重启电脑

注意:init指令须要超级管理员的权限,普通用户没法执行。

 

这些命令其实都是调用的init进程,将数字(运行级别)传递给进程,进程去读配置文件执行对应的操做。

 

①切换到纯命令行模式下(临时切换,重启以后又恢复

#init 3

 

切换以后须要输入用户名和密码,在输入密码的时候没有“*”提示输入,只要本身确认输入的密码没有错误,按下回车便可

 

②回到桌面模式

#init 5

 

③设置模式永久为命令行模式

 

将/etc/inittab文件中的initdefault值设置成3,而后重启操做系统。

 

切换重启以后默认即命令行模式:

 

3、网络设置

一、ip地址查看

须要的场景:远程链接、配置相关软件时

指令:#ifconfig

 

得知的信息有:

         ①有2块网卡,一个叫eth0,另外一个lo(本地回环网卡,本机ip)

         ②ip地址是 inet addr那一项

二、网卡配置文件

位置:/etc/sysconfig/network-scripts/ifcfg-*文件

 

 

ONBOOT:表示是否自动链接

BOOTPROTO(COL):网卡启动以后使用的协议,通常状况下是DHCP

HWADDR:硬件地址(mac地址,物理地址),计算机之间的通讯都是依赖于mac地址

 

扩展:针对像网卡配置目录层次比较深的文件,若是须要频繁更改,能够将须要的文件设置一个快捷方式,将其放在常常操做的目录,以简化后续的打开文件操做。

 

语法:#ln -s 原始路径 快捷方式路径

 

案例:将ifcfg-eth0文件在root家目录下建立快捷方式。

#ln -s /etc/sysconfig/network-scripts/ifcfg-eth0 /root/wangka.conf

 

三、网络服务操做

能够经过service指令来对网络的服务进行重启/中止/启动等操做。

 

语法:#service network start/stop/restart                  (操做全部的网卡设备)

 

上述的指令还等价于:#/etc/init.d/network start/stop/restart

 

 

补充对于单个网卡的操做:

#ifdown 网卡名                               中止某个网卡

#ifup 网卡名                                    启动某个网卡

 

 

注意:上述这些操做不要随意在服务器上运行。

4、ssh

一、简介

ssh(secure shell,安全外壳协议),该协议有2个经常使用的做用:远程链接、远程文件传输。

 

协议使用端口号:默认是22

能够是被修改的,若是须要修改,则须要修改ssh服务的配置文件:

#/etc/ssh/ssh_config

 

端口号能够修改,可是得注意2个事项:

         a. 注意范围,端口范围是从0-65535;

         b. 不能使用别的服务已经占用的端口(常见的不能使用:20,21,23,25,80,443,3389,3306,11211等等);

 

服务启动/中止/重启           {服务名中的d全称daemon,守护进程}

#service sshd start/stop/restart

#/etc/init.d/sshd start/stop/restart

 

Sshd服务通常默认就已经启动,不须要再去启动,能够在修改完其配置的状况下重启

 

 

二、ssh的应用

2.一、远程登陆(重点)

终端工具主要帮助运维人员链接远程的服务器,常见终端工具备:Xshell、secureCRT、Putty等。以putty为例:

 

①获取服务器ip地址,能够经过ifconfig命令进行查看,而后顺手测试ip的链接相通性

#ifconfig

 

此处获取的ip地址地址仍是192.168.254.130

 

测试连通性:ping 192.168.254.130

 

 

②打开putty,输入相关的信息

 

 

 

③在弹出key确认的时候点击“是”,之后不会再提示

 

 

④输入登陆信息

 

以前在虚拟机的centos中所有的指令在远程终端中都是能够获得执行的。

 

扩展:不借助第三方工具实现远程链接。

         ①打开Windows的cmd黑窗口(前提是Windows必须安装ssh服务,若是没有而须要这个功能,则自行安装openSSH)

         ②输入“ssh 须要登陆的用户名@远程服务器的链接地址”回车

         ③输入密码

例如:

 

 

2.二、sftp文件传输

可视化的界面传输工具:Filezilla

安装好以后能够查看到桌面图标:

 

 

 

①选择“文件”- “站点管理器(Ctrl + S)”

 

 

 

②点击“文件”菜单下方的“▽”选择须要链接的服务器,链接好以后的效果

 

 

③从本地windows上传文件到linux中方式

支持直接拖拽文件,也能够右键本地须要上传的文件,而后点选“上传”便可

 

 

④下载linux文件到本地

支持服务器文件直接拖拽到本地,也能够在右侧窗口选择须要下载的文件,右键,点选“下载”。

 

 

5、软件的安装方式

在Linux系统中,软件的管理方式有三种:rpm、yum、编译方式。

一、rpm

优势:对于软件包的操做比较简单,经过简单指令便可操做

缺点:

         ①安装时须要自行下载软件包

         ②安装、卸载软件时须要考虑到依赖关系

         ③软件的自定义性比较差,不适合有特殊需求的场景

 

语法:

①查询

       #rpm -qa 关键词                                 (查询机器上是否有安装指定的软件包)

       选项说明:

              -q:query,查询

              -a:all,全部

②卸载

       #rpm -e 软件包全称 [--nodeps]       (卸载软件,包的全称须要经过①去查询)

       选项说明:

              -e:卸载

              --nodeps:忽略依赖关系

③安装

       #rpm -ivh 软件包路径                  (软件包的下载须要自行解决)

       选项说明:

              -i:install,安装

              -v:显示安装过程

              -h:以“#”形式显示安装过程

④更新(了解)

       #rpm -Uvh 软件包路径                (软件包的下载须要自行解决)

       选项说明:

              -U:upgrade,升级

              -v:显示安装过程

              -h:以“#”形式显示安装过程                   

 

案例:查询、卸载、安装firefox浏览器。

 

查询:

 

卸载:

 

 

安装:

①查找FF31.1.0软件包

/media/CentOS_6.6_Final/Packages

 

 

②开始安装

 

 

二、yum安装(推荐)

优势:

①快速、傻瓜式的软件管理方式

②在联网状况下,自动从服务器上下载软件包(内、外网服务器都可)

③自动解决软件依赖关系

缺点:

         因其底层实为rpm操做,因此也丧失了对软件的自定义功能

 

Yum经常使用语法:

①搜索/查询相关

       #yum search [all] 关键词                   (根据关键词搜索服务器上的包资源)

       #yum list [关键词]                         (列出全部的包,包含已经安装的和可供安装的)

       #yum list installed [关键词]         (列出当前已经安装的包)

②安装

       注意:操做指令(install)与-y选项能够颠倒,下同。

       #yum [-y] install 关键词                     (安装指定的软件)

③卸载

       #yum [-y] remove 关键词                  (卸载指定的软件)

④更新

       #yum [-y] update                        (更新整个系统,包含内核)

       #yum [-y] update 关键词

 

案例:使用yum方式快速安装LAMP环境。

建议采用PAM的安装顺序,缘由是在安装php的时候,yum会顺带安装apache。

 

#yum install php

#yum install mysql-server

 

MySQL的初始化(设置root密码的):

#service mysqld start

#mysql_secure_installation

 

启动apache

#service httpd start

 

安装好的apache默认站点在:/var/www/html/位置

 

 

 

Apache配置文件位于:/etc/httpd/conf/httpd.conf

三、编译安装(难点)

优势:

         ①用户可选择须要的软件功能

         ②源码方式,有开发能力的用户,可对源码进行自定义

缺点:

         ①须要自行解决依赖关系

         ②编译时间较长

         ③容易出错,一旦出错,须要从新编译安装

 

编译安装步骤:

①下载源码包

②解压源码包

③进入解压目录

④配置安装

⑤编译

⑥安装

 

案例:编译安装Nginx。

相似于apache,是一款开源的web服务器软件,其默认用的端口号也是80。

 

①下载nginx包

下载地址:https://nginx.org/en/download.html

 

复制下载地址。

 

须要将下载地址在终端中输入,进行下载:

#cd /usr/local/src

#wget https://nginx.org/download/nginx-1.15.5.tar.gz

 

 

②解压压缩包

#tar -jxvf 路径(针对.tar.bz2格式)

#tar -zxvf 路径(针对.tar.gz格式)                          【当前选这个】

 

#tar -zxvf nginx-1.15.5.tar.gz

 

 

③进入解压后的目录

#cd nginx-1.15.5

 

④配置安装

 

配置包含:指定安装的位置、须要的模块功能

指定位置使用:--prefix选项

         例如:--prefix=/usr/local/nginx

 

# ./configure --prefix=/usr/local/nginx

 

须要安装2个依赖:

#yum install pcre-devel

#yum install zlib-devel

 

而后继续从新配置,确认没有问题会看到以下效果:

 

 

⑤编译&&完成安装

#make && make install

 

 

测试NGINX的使用:

#service httpd stop

 

注意:nginx编译安装以后不支持service指令进行操做,须要找到nginx的执行文件才能启动。

启动:/usr/local/nginx/sbin/nginx

重启:/usr/local/nginx/sbin/nginx -s reload

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息