当前位置:   article > 正文

Linux【shell命令以及运行原理】【权限】_linux给shell文件可执行的权限

linux给shell文件可执行的权限

目录

一、shell命令以及运行原理

二、权限 

1.用户的权限

2.文件的权限 

3.权限的相关操作 

第一种方法 

第二种方法 

改变所有者和所属组 

常见的权限问题

1.目录的权限:

2.umask

粘滞位 

如何将用户添加到信任列表赋予sudo权限 

三、用户

用户类型

 用户ID(UID)

用户组 

用户组ID(GID)

管理员

暂时切换到root

使用su命令临时切换用户

1.用户配置文件

2.用户密码文件

3.用户组管理 

查看用户账户

创建用户 

设置用户密码

 删除用户

修改账户 

四、用户组

添加用户组

删除用户组

用户组管理

查看所属组

管理用户组

查看用户信息

查看当前系统正在登录的用户

查看历史登录情况


一、shell命令以及运行原理

1.人不善于直接使用操作系统

2.如果让人直接访问操作系统a.操作成本特别高b.人会犯错,会带来不安全因素。

所以操作系统设计者不会让人直接操作操作系统。

那么我们是如何访问操作系统的呢?那么图形化界面和指令操作究竟是什么东西呢?

外壳程序的意义:

1.是用户和操作系统交互的中间软件层

2.可以在一定程度起到保护操作系统的作用。 

Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

>将使用者的命令翻译给核心(kernel)处理。
>同时,将核心的处理结果翻译给使用者。

二、权限 

1.用户的权限

Linux下有两种用户:超级用户(root)、普通用户。

超级用户:可以再linux系统下做任何事情,不受限制(root只有一个,具有Linux下的最高权限,一般不受权限的约束。)
普通用户:在linux下做有限的事情。(可以有多个,要受权限的约束)
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

Linux下可以同时存在多个用户,Linux是一个多用户操作系统。

命令: su [用户名]
功能:切换用户。(潜台词就是在切换当前的权限。)

用户该如何进行身份切换呢?
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。 

 这里我们创建了一个新用户烛渊,我们发现root用户切换为普通用户可以不输入普通用户的密码。

 但是普通用户切换为root用户需要输入root用户的密码

 普通用户切换为另一个普通用户需要输入要切换的那个用户的root密码。

下面我们又创建了一个普通用户芊樱,她切换为烛渊的账户就需要输入烛渊的密码。

2.文件的权限 

对角色和文件操作

权限:

是什么? 针对人的,事物的基本属性决定权限相关的概念的-->文件权限-->一件事情是否允许被你“做”。

权限的核心:“人”+事物属性

认识一下Linux文件的权限 

每一行中的时间为文件最后修改的时间

ll显示的第一列的第一个字符,表名该文件的文件类型

        d:目录

        -:普通文件

        p:管道文件

        b:块设备(磁盘设备)

        c:字符设备(键盘或者显示器)

 (Linux下,不以文件后缀来区分文件类型,但并不代表不可以使用,但在系统层面没有意义,给自己看的。)

注:gcc是Linux环境下的一个软件,gg!=linux系统,是区分后缀的。

下面的代码我们创建了一个hello.c的简单的C语言程序,在gcc下是可以编译的,但是如果我们将其重命名为hello.txt,就不可以编译了。

 

人:可以认为是一种角色或者身份。

拥有者:文件属于谁

所属组:文件属于哪一个组

 other:不属于上面两个中的任意一个,就是other

linux不会记录other是谁,只会记录拥有者和所属组

在下面这张图中,第一个root代表着文件的拥有者,第二个root代表着所属组

每一行的第一个字母表示文件的所属类型

后面的字母每三个为一组,分别为owner,gooup,other的权限

r为read就是读取的权限,w为write就是写入的权限,x为可执行

如果没有某一个权限,则为"-"

基本权限
i.读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限

3.权限的相关操作 

如何操作?

改人

改属性

第一种方法 

使用chmod来改变文件的权限

a)chmod

功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名

R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限

root用户不受权限的约束,无视文件的权限。

用户符号:

u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
 

chmod u+x hello.txt就可以给我们的使用者赋予执行hello.txt文件的权限

chmod u-x hello.txt就可以去除当前使用者读取hello.txt文件的权限,以此类推。

 chmod u+rwx hello.txt就可以给我们的使用者赋予读取,写入和执行的权限

 chmod g+x hello.txt就可以给我们的所属组加上执行hello.txt文件的权限

 使用逗号可以执行多个权限修改

 chmod a-r hello.txt就可以删掉使用者,所属组和其他的写入文件的权限。

 如果没有权限就会产生以下的报错。

第二种方法 

如何表示一个文件的权限:

可以使用rwx表示,也可以使用111来表示。

所以一个权限可以用一个八进制数来表示。

所有者,所属组和其他用户的权限可以用三个八进制数来表示

所以7转换成111,也就是拥有读取,写入和执行的权限,在下面的代码中

chmod 777 hello.txt

就是赋予所有者,所属组和其他用户读取,写入和执行的权限

改变所有者和所属组 

普通用户不能直接把文件赋予别的普通用户,或者把文件取回来。

但是root用户可以强制操作。

使用chown改变文件的所有者

b)chown

功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名

使用chgrp改变文件的所属组

c)chgrp

功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组

普通用户可以在命令前加上sudo,就是执行以下命令,要以root的权限执行,仅限这一次,输入的密码为普通用户自己的密码。

但是用户想进行sudo操作,需要用户再信任列表里面才可以执行sudo操作。

而添加用户到信任列表是需要root身份的。

如果不在信任列表里面就会产生下面的报错。

 因为other是不确定的,所以Linux并没有提供方法去秀给other的所属。

常见的权限问题

我们如果是文件的拥有者,又属于文件的所属组,但是我们被root设定了没有文件的读取权限,但是我们的所属组有文件的读取权限,我们依然无法读取文件。

因为权限只认定一次。

1.目录的权限:

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.


可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

 

目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2.umask

为何我们创建一个目录或者文件,默认权限是你所看到的样子?

Linux默认:

一个目录被创建,起始权限为777

一个普通文件被创建默认的权限位666

最终权限==起始权限??

umask为权限掩码,凡是在umask中出现的权限,都不应该在最终权限中出现!

如果我们的初始权限位777,umask权限掩码为002,就表示权限掩码对前两个不做影响,2为010,7为111,  010按位取反就是101,101与111按位与为101,也就是我们所看到的最终权限

d)umask

功能:
查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & (~umask)

就是对我们的umask按位取反,然后再和umask按位与操作。

格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。

修改umask掩码

粘滞位 

文件被删的权限并不是文件自身的权限​​​​​​​​​​​​​​,而是文件目录的权限

大家所有用户都在同一个共同的路径下,对该目录拥有读写执行权限的情况下

,就如tmp目录存储所有用户的临时文件。 

1.当多个用户共享一个目录,需要在该目录下进行读写,创建删除文件

2.但是满足自己只能删除自己的,而不能删除别人的要求(w:可以互删的,但是不满足条件),所以产生了粘滞位。

1.粘滞位只能给目录设置。

2.粘滞位一般是谁来添加,还需要谁来去除(root无视)。

​​​​​​​3.粘滞位只能给other设置。

[root@localhost ~]# chmod +t /home/ # 加上粘滞位

我们看到mytmp的最后一个字符为T,也就是x的一种特殊的形式。


[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"? y
rm: 无法删除"/home/abc.c": 不允许的操作

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

如何将用户添加到信任列表赋予sudo权限 

 如果我们的普通用户没有在信任列表里面是不能使用sudo暂时升级权限的

此时我们需要切换到root用户,输入下面的指令,也就是打开我们的sudoers文件

 打开之后也就是我们下面的页面

 将我们的光标移动到大约114行,找到root ALL的那一行,在这一行的下面写入我们的信任用户,下面就是将zhuyuan添加到信任列表里面。

接着我们的烛渊也可以使用sudo指令了

​​​​​​​

三、用户

用户类型

• 超级用户(super user):根账号root,可以执行所有任务,在系统中不受限制地执行任何操作。
• 系统用户(system user):系统本身或应用程序使用的专门账号。
• 普通用户(regular user):供实际用户登录使用的普通用户账号, 只能对自己目录下的文件进行访问和修改

 用户ID(UID)

• 超级用户(UID=0)
• 系统用户(伪用户) (UID=1~499, 65534(noboday)):限制本机登录
• 普通用户(UID>=1000): 操作权限受到限制

用户组 

• 超级组(supersuser group)
• 系统组(system group)
• 自定义组

用户组ID(GID)

• 超级组,组名为root(GID=0)
• 系统组 (GID=1~499)
• 自定义组(GID>=1000) 

 一个用户可以同时属于多个组,某个组为主要组,其它为次要组。 Ubuntu在创建用户时,会为用户自动创建一个同名的组作为主要组(默认组)

• 一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。
• 一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
• 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
• 多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。 

管理员

Ubuntu管理员是具有管理权限的普通用户,有权删除用户、安装软件和驱动程序、修改日期和时间等。

Ubuntu默认禁用root用户,系统安装时创建的第一个用户自动成为管理员(加入到sudo组)。

赋予普通用户管理员权限 

sudo vim /etc/sudoers

 在sudoers中添加

username ALL=(ALL) ALL

第一段:用户名或者用户组,表示谁有权限来使用后面的配置。
第二段:表示来源地,即从哪执行这条命令。 ALL表示所有计算机
第三段: 表示可以切换到什么用户。 ALL表示所有用户
第四段: 表示可以切换到哪些组下的用户。 ALL表示所有组
第五段: 表示能够执行的命令。 NOPASSWD:ALL表示执行任意命令都不需要密码

 

(给账号设置密码)

 

 

(这里新创建的用户所用的是sh,并不是bash,使用的shell换了) 

暂时切换到root

 

使用su命令临时切换用户

格式: su [选项] [用户登录名]

从root切换到其它账户不需要输入密码,普通用户切换到普通用户需要输入目标账户密码。

1.用户配置文件

Linux系统中,用户账户、用户密码、组信息均存放在不同的配置文件中。

用户配置文件:用于保存系统用户的基本信息
文件位置: /etc/passwd
文件中每一行对应一个系统用户的基本信息
文件中使用冒号(:) 分隔各个字段,从左起这些字段的含义如下:
字段1:用户名
字段2:用户登录密码。 x表示密码保存在用户密码文件中(/etc/shadow)
字段3:用户的ID号(即UID)
字段4:用户所属(默认)组的ID号(即GID)
字段5:用户全名
字段6:用户主目录。主目录主要用于存放用户的初始化文件
字段7:用户使用的Shell

(输入cat /etc/passwd

 

zhuyuan:x:1000:1000:zhuyuan,,,:/home/zhuyuan:/bin/bash

zhuyuan是烛渊用户名

x是密码

1000是UID(user id)

1000是GID(group id)

zhuyuan,,,是注释,用户全名

/home/zhuyuan是用户主目录

/bin/bash是用户使用的shell

 

2.用户密码文件

文件位置: /etc/shadow
文件中每一行对应一个用户的密码信息,采用的是 SHA512 散列加密算法

文件中使用冒号(:) 分隔各个字段,从左起这些字段的含义如下:
字段1:用户名
字段2:加密后的用户密码
字段3:最后一次密码修改的日期(相对1970年1月1日的天数)
字段4:最小修改时间间隔,两次密码修改之间的间隔天数,在此期间用户不能修改密码(空值或0表示可以随时修改密码)
字段5:密码有效期(该字段的默认值为 99999,也就是 273 年,可认为是永久生效。)
字段6:密码过期之前的警告天数(该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。)
字段7:密码禁用期,密码过期之后仍然接受密码的天数,超过将无法登陆(空值表示无限制)
字段8:账户的失效时间:账户有效期(空值表示永不过期)
字段9:保留字段

(输入cat /etc/shadow

 

zhuyuan:$6$qTg7FQ0U$/cGQLyckmGK1QoY.TiECtdVjEMR1UboJm20PL0ge/ekQ2e2RuAQJieNQdWye2YT6ZBD4HZ5nfVq43GYwYJmS40:19244:0:99999:7:::

zhuyuan是用户名

$6$qTg7FQ0U$/cGQLyckmGK1QoY.TiECtdVjEMR1UboJm20PL0ge/ekQ2e2RuAQJieNQdWye2YT6ZBD4HZ5nfVq43GYwYJmS40是加密之后的用户密码

19244最后一次修改密码的日期(相对1970年1月1日的天数)

0是最小修改的时间间隔,0表示可以随时修改密码

99999是密码的有效期,默认为99999,可认为是永久

7是密码过期之前的警告天数,默认为7。

后面三个空格之间分别表示密码禁用期(密码过期之后仍然接受密码的天数,空格表示没有限),账户的失效时间(空值表示永不过期),保留字段

3.用户组管理 

用户组文件:用于保存用户组的基本信息
文件位置: /etc/group
文件中每一行对应一个用户组的基本信息

文件中使用冒号(:) 分隔各个字段,从左起这些字段的含义如下:
字段1:用户组的名称
字段2:组密码
字段3:用户组的ID号(即GID)(跟/etc/passwd中的GID对应)
字段4:用户列表,需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段。也就是说,写入这个字段的用户是这个用户组的附加用户。

(输入cat /etc/group

adm:x:4:syslog,zhuyuan

adm是用户组的名称

x是组密码

4是用户组的ID号(即GID)

syslog,zhuyuan是用户列表(这个组的附加用户)

查看用户账户

通过查看用户配置文件/etc/passwd来查看用户信息

cat /etc/passwd | grep user

 使用文本分析工具查看全部用户列表

awk -F ':' '{print $1}' /etc/passwd

创建用户 

useradd 用于为系统添加普通用户。

【命令格式】
◼ useradd [option] username
【常用选项】
◼ -g:指定用户所属的用户组
◼ -m:创建用户主目录,默认不创建
◼ -d:指定用户主目录
◼ -s:指定用户使用的Shell
◼ -r:指定创建一个系统账号
◼ -u:指定用户UID
【参数说明】
◼ 参数表示要创建的用户名称(用户名称不使用中文,最好全使用小写字母)
【用法示例】
◼ useradd -m tom

 

 新建一个名为tom的用户,使用-m选项,其余选项默认;

 

新建一个名为jerry的用户,UID设为1200, 其余选项默认;

 

新建一个名为kitty的用户,shell设为/bin/bash, 其余选项默认;

观察/etc/passwd中三个用户的信息有什么不同;  

 

每个账号默认的udigid都是一致的,然后编号tom1002,但当jerry设置为1200后,编号就从1200开始往后编写。然后用户的主目录都是在/home/下对应的用户名称的文件夹,然后shell不指定的话默认是sh,指定的话才是bash

  • 查看/home里的文件夹,是否每个账号都有家目录,并说明原因;
  •  

只有tom有家目录,因为我们的tom加了-m选项,就是创建用户主目录,默认的话是不创建的。

 

设置用户密码

为系统添加用户后,需要使用passwd命令为新用户设置密码,否则新用户无法登录系统。
【命令格式】
◼ passwd [option] username
【常用选项】
◼ -d (delete):删除用户口令
◼ -l (lock):暂时锁定指定的用户账号
◼ -u (unlock):解除指定用户账号的锁定
◼ -S (status):显示指定用户账号的状态
【参数说明】
◼ 参数表示要设置密码的用户名称 

【用法示例】
◼ passwd:设置当前用户的密码
◼ passwd tom:设置指定用户的密码

root用户可以使用passwd设置所有用户密码
普通用户可以使用passwd设置自身密码

 

 
删除用户

该命令用于将系统中不再使用的用户删除。不允许删除正在使用的用户。
【命令格式】
◼ userdel [option] username
【常用选项】
◼ -r:删除用户时,连同用户的家目录和邮件文件一并删除
【参数说明】
◼ 参数表示要删除的用户名称
【用法示例】
◼ userdel -r tom

修改账户 

usermod命令用于修改用户的基本信息。
【命令格式】
◼ usermod [option] username
【常用选项】
◼ -d:为用户指定新的家目录
◼ -m:为用户指定新的家目录时,移动原来家目录中的所有文件到新目录(与-d一起使用)
◼ -s:修改用户默认的Shell
◼ -l:修改用户名
◼ -L:锁定账号
【参数说明】
◼ 参数表示要修改的用户名称
【用法示例】
◼ usermod -md /home/newdir tom(将原来的家目录移动到指定的新目录)
◼ usermod -s /bin/ksh tom

把tom用户改名为tim, UID改为2000(使用man usermod找出需要的选项),主目录改为/home/tim;

 

 

 

 

  • 把jerry用户锁定,分别切换到kitty与jerry, 观察有什么不同。

 

 

 

无法切换到jerry用户

(进一步测试)

使用root账户是可以su到锁定账户的,使用别的一般账户是没办法su到锁定用户的,锁定用户是可以切换到别的用户的。

 

四、用户组

添加用户组

【命令格式】
◼ groupadd groupname
【常用选项】
◼ -g:指定GID
◼ -r:创建系统组,不带此选项创建普通组
【参数说明】
◼ 参数表示要创建的用户组名称
【用法示例】
◼ groupadd bigdata

 建立一个名为bigdata的自定义组,GID=1500;

 

建立一个名为datascience的自定义组,选项为默认,观察该组的GID;

 

 

删除用户组

【命令格式】
◼ groupdel groupname
【常用选项】
没有选项
【参数说明】
◼ 参数表示要删除的用户组名称
【用法示例】
◼ groupdel bigdata 

删除ds组,查看kitty所属的组。(Kitty所属的是Kitty组)

 

用户组管理

使用groupmod命令修改组名和GID
【命令格式】
◼ groupmod [option] groupname
【常用选项】
◼ -g:修改GID
◼ -n:修改组名
【参数说明】
◼ 参数表示要修改的用户名称
【用法示例】
◼ 修改bigdata的GID为1030
groupmod -g 1030 bigdata
◼ 修改bigdata的组名为hugedata
groupmod -n hugedata bigdata 

 把datascience组改名为ds,GID=2000;

 

 

查看所属组

groups用于显示某用户所属的全部组。 

命令格式】
◼ groups username
【常用选项】
没有任何选项
【参数说明】
◼ 参数表示要查看所属组的用户名,没有参数查看当前用户的所属组。
【用法示例】
◼ groups tom
◼ groups

 查看kitty所属的组; 

管理用户组

【命令格式】
◼ gpasswd [option] username groupname
【常用选项】
◼ -a: 向指定组添加用户
◼ -d: 从指定组中删除用户
【参数说明】
◼ 参数表示要操作的用户名和组名。
【用法示例】
◼ gpasswd -a tom hugedata
◼ gpasswd -d tom hugedata  

 把用户tim,jerry添加到bigdata组中,把用户kitty添加到datascience组中;

 

 

查看用户信息

【命令格式】
◼ id username
【常用选项】
没有任何选项
【参数说明】
◼ 参数表示要查看信息的用户名,没有参数查看当前用户的信息。
【用法示例】
◼ id tom

 

查看当前系统正在登录的用户

【命令格式】
◼ who
【常用选项】
没有任何选项
【参数说明】
没有任何参数
【用法示例】
◼ who 

 

查看历史登录情况

【命令格式】
◼ last [option] username
【常用选项】
-n: n为数字,指定查询的次数
【参数说明】
◼ 参数表示要查看信息的用户名,没有参数查看当前用户的信息。
【用法示例】
◼ last -5 zhuyuan

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/307636
推荐阅读
相关标签
  

闽ICP备14008679号