Linux权限详情---id、chmod、umask、su、chown、chgrp、passwd

Linux不仅是多重任务处理(multitasking)系统,还是多用户(multiuser)系统。这是说,虽然一台标准计算机可能只包含一个键盘和一台显示器,但是它仍然可以同时被一个以上的用户使用。远程用户可以通过ssh(安全shell)登录并且操作这台计算器。
本节主要介绍如下命令:

    1. id:显示用户身边标识
    1. chmod:修改文件的模式
    1. umask:设置文件的默认权限
    1. su: 以另一个用户的身份运行shell
    1. chown: 更改文件的所有者
    1. chgrp: 更改文件所属群组
    1. passwd: 更改用户密码

1.所有者、组成员和其它所有用户

在UNIX安全模型中,一个用户可以拥有(own)文件和目录。当用户拥有一个文件或目录时,它将对该文件或目录的访问权限具有控制权。反过来,用户又归属于一个群组(group),该群组由一个或多个用户组成,组中用户对文件和目录的访问权限由其所有者授予。除了可以授予群组访问权限外,文件所有者也可以授予所有用户一些访问权限。
使用id命令可以获得用户身份标识的相关信息,以下为Ubuntu的输出

$ id
uid=1000(nvidia) gid=1000(nvidia) groups=1000(nvidia),4(adm),24(cdrom),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(i2c),118(lpadmin),124(gdm),130(sambashare),998(weston-launch),999(gpio)

以下是Fedora系统的输出:

$ id
uid=1005(lixj) gid=1005(lixj) groups=1005(lixj)

在Fedora系统中,普通用户账户是从500开始编号的,而ubuntu中是1000开始编号的。
在Linux系统中,用户账户定义在文件/etc/passwd中,用户组定义在/etc/group中.在创建用户账户和群组时,这些文件随着文件/etc/shadow的变化而变化,文件/etc/shadow中保存了用户的密码信息。
/etc/passwd文件中定义了对应用户的用户名、uid、gid、账户的真实姓名、主目录以及登录shell信息.

2.读取、写入和执行

对于文件和目录的访问权限是按照读访问、写访问以及执行访问来定义的。
当我们查看ls -l命令的输出结果时,输入如下:

$ ls -l model.py
-rw-rw-r-- 1 lixj lixj 126979 May 20 19:26 model.py

最前边的10个字符表示的是文件属性(file attribute),其中第一个字符是指的文件类型(file type),表一列出了常见的文件属性。
表1 文件属性分类

属性文件类型
-普通文件
d目录文件
l符号链接。注意对于符号链接文件,剩下的文件类型属性始终是rwxrwxrwx,它是个伪属性值.符号链接指向的文件的属性才是真正的文件属性
c字符设备文件.该文件类型表示以字节流形式处理数据的设备,如终端或调制解调器.
b块设备文件.该文件类型表示以数据块方式处理数据的设备,如硬盘驱动或光盘驱动

文件属性剩下的9个字符称为文件模式(file mode),分别表示文件所有者、文件所在群组以及其它所有用户对文件的读取、写入和执行权限.

表2 权限属性

属性文件目录
r允许打开和读取文件如果设置了执行权限,那么允许列出目录下内容
w允许写入或者截短文件;如果也设置了执行权限,那么目录中的文件允许被创建、被删除和被重命名但是该权限不允许重命名或者删除文件。是否能重命名和删除文件由目录权限决定
x允许把文件当作程序一样来执行,用脚本语言写的程序文件必须被设置为可读,以便能被执行}允许进入目录下

表3 一些文件属性设置的例子

文件属性含义
-rwx------普通文件,文件所有者具有读取、写入和执行权限。组成员和其它所有用户都没有任何访问权限
-rw-------普通文件,文件所有者具有读取、写入权限,无执行权限。组成员和其它所有用户都没有任何访问权限
-rw-r–r--普通文件,文件所有者具有读取和写入权限,组成员和其它所有用户有读取权限
-rwxr-xr-x普通文件,文件所有者具有读取、写入和执行权限。其它所有用户也可以读取和执行该文件

2.1 chmod——更改文件模式

注意,只有文件所有者和超级用户才可以更改文件或者目录的模式。chmod命令支持两种不同的更改文件模式的方法——八进制数字表示法符号表示法
八进制数字表示法
八进制数字对应着3个二进制数字,刚好可以和用来存储文件模式的结构方式一一映射。
表4 以二进制和八进制方式表示文件模式

八进制二进制文件模式
0000
1001–x
2010-w-
3100r–
4011-wx
5101r-x
6110rw-
7111rwx

例如

$ chmod 600 foo.txt

通过600给foo.txt文件所有者赋予读写权限,并取消组用户和其它所有用户的所有权限.

符号表示法
符号表示法分为3部分:更改会影响谁、要执行哪个操作和要设置哪种权限。可以通过字符u、g、o和a组合来指定要影响的权限
表5 chmod命令符号表示法

符号含义
uuser,表示文件或者目录的所有者
ggroup,文件所属群组
oothers,其它所有用户
aall,‘u’,‘g’,'o’三者的组合

若没有指定字符,则默认为all.操作符“+”表示添加一种权限,“-”表示删除一种权限,“=”表示只有指定的权限可以使用,其它所有权限被删除.
表6 chmod命令符号表示法实例

符号含义
u+x对文件所有者添加可执行权限
u-x删除文件所有者的可执行权限
+x为文件所有者、所属群组和其它所有用户添加可执行权限,等价于a+x
o-rw除了文件所有者和所属群组用户外,删去其余所有用户的读写权限
go=rw除了文件所有者之外,所属群组和其它所有用户具有读写权限.若所属群组和其它所有用户原来具有执行权限,则删除执行可执行权限
u+x,go=rx为文件所有者添加可执行权限,同时设置所属群组和其它所有用户具有读权限和可执行权限

2.2 umask设置默认权限

umask命令控制着创建文件时指定给文件的默认权限,使用八进制表示法来表示从文件模式属性中删除一个位掩码。例如

$ rm -f foo.txt
$ umask
0002
$ > foo.txt
$ ls -l foo.txt
-rw-rw-r-- 1 lixj lixj 0 2020-06-07 17:09 foo.txt

当前掩码值是0002(另一个可能的是0022),是以八进制掩码表示形式。
可以发现,文件所有者和组都获得了读写权限,但其他所有用户只获得了读权限,原因在于掩码。
忽略掉掩码的第一个0,看下表可明白掩码的含义

原始文件模式rw-rw-rw-
掩码000000000010
结果rw-rw-r–

可以修改默认的掩码,但是大部分时候不需要

$ umask 0000

3.更改身份

我们经常需要获得超级用户的特权来执行一些管理任务,但是也可以“变成”另一个普通用户来执行这些任务。主要有三种方法

  • 注销系统并以其他用户身份重新登录系统
  • 使用su命令
  • 使用sudo命令

3.1 su——以其他用户和组ID的身份来运行shell

su命令用来以另一个身份来启动shell,该命令的一般形式为:

su [-[l]] [user]

如果包含’-l’选项,那么得到的shell会话界面将是用于指定用户的登陆shell界面,这就意味着,该指定用户的运行环境将被加载,而其工作目录也将更改为该指定用户的主目录.-l可以缩写为-
如果没有指定用户,那么默认假定为超级用户。

$ su -
Password:
#

输入超级用户密码后,提示符的末尾将由$变为#

# exit
$

退出如上.
也可以使用su命令来执行单个命令,而不需要开启一个新的交互式命令界面

su -c 'command'

命令需要用单引号引起来,这很重要

3.2 sudo——以另一个用户的身份执行命令

sudo命令在很多方面都类似于su命令。不同之处在于,管理者可以通过配置sudo命令,使系统以一种可控的方式,允许一个普通用户以一个不同的用户身份(通常是超级用户)执行命令。用户可能被限制为只能执行一条或者几条特定的命令,而对其它命令没有执行权限。另一个重要区别是,使用sudo命令时,用户只需要输入自己的密码来认证.还有一个重要区别是,sudo命令不需要启动一个新的shell环境,而且也不需要加载另一个用户的运行环境,因此不需要把命令用单引号引起来。
要查看sudo命令可以授予哪些权限,可以通过-l选项来查看

$  sudo -l
Matching Defaults entries for nvidia on nvidia-desktop:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User nvidia may run the following commands on nvidia-desktop:
    (ALL : ALL) ALL

3.3 chown——更改文件所有者和所属群组

chown命令用来更改文件或者目录的所有者和所属群组,需要超级用户权限。语法为:

chown [ower][:[group]] file ...

表7 chown命令参数实例

参数结果
bob把文件所有者从当前用户改为用户bob
bob:users把文件所有者从当前用户更改为bobm并把文件所属群组更改为users组
:admins把文件所属群组更改为admins组,文件所有者不变
bob:bob登录系统时所属组
$ sudo chown tony: ~/tony|myfile.txt

4.更改用户密码

要更改用户自己的密码,只需要输入passwd命令,按照提示修改即可

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值