Linux基本权限

权限和用户的关系

linux中访问文件/目录有三种身份:

  • u:文件的拥有者
  • g:文件所属的群组
  • o:其他用户

对于每个身份,又有四种权限

  • r:读权限(read)

    对于文件来讲就是可以读取其内容的权限,对于目录来讲无法查看目录里面的内容(ls 失败)

  • w:写权限(write)

    写权限:对于文件来讲就是可以向文件写数据,对于目录来讲无法删除目录里面的文件

  • x:可执行权限(execute)

    对于可执行文件来讲无法用行(可以看到颜色都变了),对于目录来讲无法进入目录(cd 失败)

  • s:特殊权限

当我们使用ls -l查看一个文件的详细属性时,能看到每个文件都有一个9位基本权限位 比如:rwxr-xr-x其中每三位字符为一组,分别表示属主权限位,属组权限位,其他用户权限位。

字母 含义 对应权限
对应权限 r(read) 读取权限 4
w(write) 写入权限 2
x(execute) 执行权限 1
-(没有权限) 没有权限 0

权限修改命令chmod

chmod:change mode
语法:
  chmod 权限 文件名
选项:
  -R:递归授权

授权方式: 
  1.数字方式
        mkdir dir       //建立目录
        touch dir/file  //建立文件

        示例1:
        chmod 777 dir/   //修改dir目录权限为777
        chmod u+rwx,g+rwx,o+rwx 

        示例2:
        chmod 666 dir/file     //修改file文件权限为666
        chmod u+rw,g+rw,o+rw 

        示例3:

        chmod -R 766 dir/  //修改目录及子目录权限

    2.ugo方式
      u:user用户权限
      g:group用户组权限
      o:other其他用户权限
      a:all所有权限位

      +:加上后面指定的权限
      -:减去后面指定的权限
      =:等于后面指定的权限

权限对目录的影响

目录在只有单权限的情况下,什么都做不了

  • r:能看见目录下的文件,但是看不见文件的详细属性

  • w:只写,会覆盖之前的内容

  • x:什么都做不了

文件权限需要组合使用:

  • rw:可读,可写,正常的使用vim编辑,但是不能执行
  • rx:可读,可执行,但是不能编辑
  • rwx:可读,可写,可执行

权限对目录的影响

目录只有r权限:

具有浏览目录及子目录权限 不能进入目录

  1. 能使用ls命令浏览目录及子目录, 同时会提示权限拒绝

  2. 能使用ls -l命令浏览目录及子目录, 会带问号,同时只能看到文件名

    总结: 目录只有r权限,仅仅只能浏览内的文件名,无其他操作权限

写入权限(w)

单纯的w权限没有任何意义。

如果目录只有w权限: 具有增加、删除或修改目录内文件名权限(需要x配合)

//注意: 如果目录有w权限, 可以在目录内创建文件, 删除文件(跟文件本身权限无关) 不能进入目录、不能复制目录、不能删除目录、不能移动目录

执行权限(x)

目录只有x权限

  1. 只能进入目录
  2. 其他什么都做不了

属主属组修改命令chown

chown   //更改属主以及属组 -R:递归修改
chown:change owner
## 语法
chown [选项]... 属主.属组文件名
chown [选项]... 属主:属组文件名

[root@localhost opt]# chown luowei1:luowei2 abc

## 只修改属主
[root@localhost opt]# chown root abc

## 只改属组
[root@localhost opt]# chown :luowei3 abc

## 选项-R:递归修改属组和属主
[root@localhost opt]# chown -R zls:luowei1 /o

拓展:替换命令

tr
[root@localhost ~]# ll|tr 'rwx-' '4210'

## 使用命令,获取文件的数字权限
[root@localhost ~]# ll|tr 'rwx-' '4210'|sed -n '2p'|awk -F '''{print$2+$3+$4""$5+$6+$7""$8+$9+$10}'
755
[root@localhost ~]# ll|tr 'rwx-' '4210'|awk -F '' 'NR==2{print$2+$3+$4""$5+$6+$7""$8+$9+$10}'
755
[root@localhost ~]# stat zls|awk -F '[(/]' 'NR==4{print $2}'
0755
[root@localhost ~]# stat zls|awk -F '(' 'NR==4{print $2}'0755/drwxr-xr-x)  Uid:
[root@localhost ~]# stat zls|awk -F '(' 'NR==4{print $2}'|awk -F '/' '{print $1}'
0755

正规取出文件数字权限的命令

[root@localhost ~]# stat -c %a zls
755

[root@localhost ~]# stat -c %a /etc/sysconfig/network-scripts/ifcfg-eth
0644
查看文件数字权限的方式
tr:按字符替换

sed:按整体替换sed i's#SELINUX=enforcing#SELINUX=disabled#g'/etc/sysconfig/selinux

vim:按整体替换   :%s#SELINUX=enforcing#SELINUX=disable
## Linux中的单引号和双引号含义:
bash:-有变量的情况下,有区别
-双引号解析变量
-单引号所见即所得
-纯字符串的情况下,没有区别
awk:-有变量的情况下,有区别
-单引号解析变量
-双引号所见即所得

awk-F'指定分隔符''{print $N}'
awk-F'[分隔符1分隔符2]''{print $N}

用户命令提权

Linux系统中,有时候普通用户有些事情是没办法操作,除非是root管理员用户才能做到。这时就需要临时切换到root管理员身份来做事了。那么在学习如何切换用户之前,我们先来了解下用户工作环境。 如何在普通用户的情况下,完成日常工作?

1)su 切换用户,使用普通用户登录,然后使用su命令切换到root。

优点:简单,方便

缺点:需要知道root密码,不安全,切换到root没有日志审计功能

2)sudo 提权,当需要使用root权限时,进行提权,而无需切换至root用户。

优点:安全,方便

缺点:复杂

在使用su切换身份前,我们需要shell登录分类、环境变量配置文件加载顺序

1.shell的分类

交互式shell        shell等待你的输入,并且立即执行你提交的命令
非交互式shell      执行脚本,不需要进行交互

登录式shell        需要用户名、密码登录后才能进入的shell
非登录式shell      不需要输入用户名和密码即可打开的Shell

2.bash shell配置文件

个人配置文件: ~/.bash_profile ~/.bashrc
全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc

profile类文件, 设定环境变量, 登陆前运行的脚本和命令
bashrc 类文件, 设定本地变量, 定义命令别名

全局配置和个人配置设置冲突, 优先使用个人配置

shell配置文件应用顺序:
登录式shell配置文件执行顺序
/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc

非登陆式shell配置文件执行顺序
~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh

su - username切换用户命令

su与环境变量的关系

 su - username 属于登录式shell
 su username 属于非登录式sheell

 # 区别在于加载的环境变量不一样,因此在切换用户时最好加-,否则将会少加载两个环境变量。

1.su - 命令

  1. 普通用户su -代表直接切换至root用户身份, 但需要输入root用户密码
  2. 超级管理员root用户使用su - username切换普通用户不需要输入任何密码

2.su -c username命令

以某个用户的身份执行某个服务,使用命令su -c username

sudo命令提权

sudo的执行原理: 普通用户执行命令时,首先检查/var/run/sudo/目录下是否有用户时间戳,centos检查/var/db/sudo/目录,并检查是否过期。如果时间戳过期,就需要输入当前用户的密码。输入后检查/etc/sudoers配置文件,查看用户是否有sudo权限,如果有执行sudo命令并返回结果,然后退出sudo返回到普通用户的shell环境。 而在/etc/sudoers中设置可执行sudo指令的用户。默认只有root。

sudo的配置

sudo的配置文件
[root@localhost ~]$ vim /etc/sudoer

 用户名       所有主机=(所有角色)        所有命令的执行权限
 root             ALL=(ALL)                   ALL
 lw               ALL=(ALL)                 /bin/cp

 lw              ALL=(ALL)                NOPASSWD:ALL

使用visudo -c检查配置文件
[root@localhost ~]$ visudo  -c
/etc/sudoers: parsed OK

推荐修改sudo的方式

[root@localhost ~]$ visudo
如果在/etc/sudoers中设置保存时则需要按:进入低行模式输入wq!进行强行保存。

sudo配置组


如果每增加一个用户需配置一行sudo,这样设置非常麻烦。所以可以进行如下设置

%lw  ALL=(ALL)     NOPASSWD:/bin/rm, /bin/cp  #新增组
lw这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。

创建用户加入该组
[root@localhost ~]$ groupadd lw
[root@localhost ~]$ useradd lw1 -g lw
[root@localhost ~]$ useradd lw2 -g lw

sudoers其他别名配置

1.命令别名
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, 
2.主机别名
User_Alias ADMINS = jsmith, mikem
3.角色别名
Host_Alias     MAILSERVERS = smtp, smtp2

## 报错[root@localhost ~]# sudo ll
sudo: ll: command not found
原因:ll是别名,不是系统命令,sudo不走别名,只认识系统命令

山林不向四季起誓 荣枯随缘