Skip to content

Latest commit

 

History

History
153 lines (92 loc) · 6.36 KB

0X0A_用户与权限.md

File metadata and controls

153 lines (92 loc) · 6.36 KB

0X0A 用户与权限

问题的引出

现在的台式电脑或者笔记本电脑基本上是一个人专用一台.最起码很少有多个人同时使用一台台式机的情况.但是服务器可能经常需要多个用户同时登陆使用.这就需要用户管理机制对计算机的所有用户进行管理.那些用户可以做那些行为,那些用户可以访问哪些文件.这样就可以保证用户之间尽量不相互影响.保证用户们的工作尽量有序推进.

即使只有一个人使用一台电脑,人们通常也会创建多个用户账户.其中有的权限高一些,可以做的事情多一些,用于系统管理.另一些用户账户的权限则低一些用于日常使用(由于没有足够的权限,所以不容易做出危害到系统的误操作).

用户

在Linux系统当中可以有多个用户.每个用户都有一个独一无二的编号,称为UID (User ID). UID就相当于一个人的身份证号.

一般在登陆或者进行用户操作的时候,并不会使用UID来指一个具体的用户,而是使用用户名(登录名).而确认登录者就是用户本人(或者拥有授权),除了需要在登陆的时候输入登录名,还要输入与之匹配的密码.

在Linux系统中,一般在/etc/passwd文件.使用这个命令就能查看其内容:

cat /etc/passwd

这个文件中就保存了上边所提到的用户名,密码,UID等信息.也包括用户组,用户HOME目录,用户默认shell等信息.(现在一般为了安全,密码并不能在/etc/passwd直接查看,而是保存在/etc/shadow中.)

直接修改这些保存了用户信息的文件就能增加,删除或者修改用户信息.但是这样做非常不安全.一般使用工具来进行修改.

shadow

在Linux中一般使用shadow-utils提供的命令来修改用户信息.使用命令:

useradd -m testUser

这里的testUser就是用户名.参数-m,表示创建用户的同时创建用户主目录.

创建之后需要给用户设置登陆密码.例如:

passwd testUser

使用su命令,可以指定用户的身份启动一个shell:

su testUser

要删除一个用户,使用命令:

userdel -r testUser

参数-r表示删除用户的同时删除用户主目录和邮件目录.

另外可以使用usermod命令来修改用户的各种属性.之前介绍的chsh命令也是属于shadow-utils的.

使用这些命令,一般需要使用管理员权限或者要修改的用户的权限.

用户信息查看

Coreutils也提供了一些命令用于查看用户信息,当前用户信息等的命令.例如:id, logname, whoami, groups, users, who.

权限

不同的用户有不同的权限.这个"权限"主要体现在对命令的执行权和文件的读写权上.例如一般来说普通用户只能访问自己的文件.而要涉及整个系统的修改,就需要管理员权限.

所谓的管理员权限,就是指一个登陆名为root,UID为0的用户的权限.一般来说,在不做系统配置的时候不应当登陆这个用户.

组和用户

当用户很多的时候,要批量赋予一些权限或者共享文件的时候,一个一个用户地修改就很不方便.为了方便这类修改,Linux还提供了用户组的机制.可以让用户加入一个组,然后给一个组赋予一种权限,全组的用户都能获得这个权限.如果用文件管理类比的话,用户就像文件,用户组就像目录.

组的管理和用户类似,同样使用shadow中的命令.这里就不详细介绍了.

文件权限

之前介绍过,用户的权限区别就体现在对文件的读写和运行权限上.所有的文件都有一个所有用户,和一个所有组.文件所有者,文件所有组和其他人对这个文件的权限可以分别设置.

使用命令

ls -l

查看文件的详细信息的时候,开头有这样格式的一串符号:

drwxr-xr-x

其中第1位表示文件类型,不同的符号表示不同的类型:

  • - 文件
  • d 目录
  • l 符号链接
  • c 字符设备
  • b 块设备

剩下的位数,2,3,4一组;5,6,7一组;8,9,10一组.分别表示

  1. 所有者权限:文件所有者对文件的权限
  2. 组权限:所有者所在组其他用户对此文件的权限
  3. 其他用户权限:不和所有者在一组的其他用户对此文件的权限

每组中的:

  • 第1位表示读权限(对应r)
  • 第2位表示写权限(对应w)
  • 第3位表示可执行文件的执行权限(对应x)

对应位置上,如果是字母字母表示有权限,对应位置是“-”表示无权限。

例如rwxr-xr-x表示文件拥有着有读写和运行权限,文件所有组有读和运行的权限,其他人也拥有读和运行的权限.

最后,不论如何,超级用户拥有所有权限.

修改文件权限

chmod命令用于修改文件访问权限。它接受两个参数:

  • 第一个参数是三位八进制数,用于表示要修改到的文件访问权限状态。
  • 第二个参数是要修改的文件。
  • 三位八进制数每一位对应三组权限中的一组。读,写,执行分别对应4,2,1。有这个权限就把数字加上,没有这个权限就记0。例如1表示仅有执行权,5表示执行权和读权,7表示三个权限都有。

例如:

chmod 755 myFile

表示修改文件myFile的权限.修改为文件拥有着有读写和运行权限,拥有组用户和其他用户有读和运行的权限.

umask命令可以设置新建文件默认访问权限,在此不做详细说明(这是一个bash内置命令)。

chown不修改文件的权限模式,但是可以修改文件所有者和所属组群(所有者变了之后,所有者的权限也对应转移到新所有者身上).chgrp用于修改文件的所有组.在此不做详细介绍.

软件安装中的权限问题

在Linux系统中安装软件,如果直接使用超级用户权限安装,那么等于给所有用户安装了这个软件,所有用户都能使用。但是在服务器上经常遇见不同人需要不同版本的软件的问题。这时候我们不需要使用超级用户权限为所有安装多个版本的软件。可以仅仅把软件安装到需要用软件的那个用户的目录。一般软件在安装说明中会说明如何为某一个用户安装(而不是为所有用户安装)。例如trash-cli使用命令:

sudo python setup.py install

为所有用户安装。

使用命令:

python setup.py install --user

为单个用户安装。