现在的台式电脑或者笔记本电脑基本上是一个人专用一台.最起码很少有多个人同时使用一台台式机的情况.但是服务器可能经常需要多个用户同时登陆使用.这就需要用户管理机制对计算机的所有用户进行管理.那些用户可以做那些行为,那些用户可以访问哪些文件.这样就可以保证用户之间尽量不相互影响.保证用户们的工作尽量有序推进.
即使只有一个人使用一台电脑,人们通常也会创建多个用户账户.其中有的权限高一些,可以做的事情多一些,用于系统管理.另一些用户账户的权限则低一些用于日常使用(由于没有足够的权限,所以不容易做出危害到系统的误操作).
在Linux系统当中可以有多个用户.每个用户都有一个独一无二的编号,称为UID (User ID). UID就相当于一个人的身份证号.
一般在登陆或者进行用户操作的时候,并不会使用UID来指一个具体的用户,而是使用用户名(登录名).而确认登录者就是用户本人(或者拥有授权),除了需要在登陆的时候输入登录名,还要输入与之匹配的密码.
在Linux系统中,一般在/etc/passwd文件.使用这个命令就能查看其内容:
cat /etc/passwd
这个文件中就保存了上边所提到的用户名,密码,UID等信息.也包括用户组,用户HOME目录,用户默认shell等信息.(现在一般为了安全,密码并不能在/etc/passwd直接查看,而是保存在/etc/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位表示读权限(对应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
为单个用户安装。