Linux不仅是多重任务处理(multitasking)系统,还是多用户(multiuser)系统。这是说,虽然一台标准计算机可能只包含一个键盘和一台显示器,但是它仍然可以同时被一个以上的用户使用。远程用户可以通过ssh(安全shell)登录并且操作这台计算器。
本节主要介绍如下命令:
-
- id:显示用户身边标识
-
- chmod:修改文件的模式
-
- umask:设置文件的默认权限
-
- su: 以另一个用户的身份运行shell
-
- chown: 更改文件的所有者
-
- chgrp: 更改文件所属群组
-
- 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 以二进制和八进制方式表示文件模式
八进制 | 二进制 | 文件模式 |
---|
0 | 000 | — |
1 | 001 | –x |
2 | 010 | -w- |
3 | 100 | r– |
4 | 011 | -wx |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
例如
$ chmod 600 foo.txt
通过600给foo.txt文件所有者赋予读写权限,并取消组用户和其它所有用户的所有权限.
符号表示法
符号表示法分为3部分:更改会影响谁、要执行哪个操作和要设置哪种权限。可以通过字符u、g、o和a组合来指定要影响的权限
表5 chmod命令符号表示法
符号 | 含义 |
---|
u | user,表示文件或者目录的所有者 |
g | group,文件所属群组 |
o | others,其它所有用户 |
a | all,‘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- |
---|
掩码 | 000 | 000 | 000 | 010 |
结果 | — | 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命令,按照提示修改即可
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)