Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。这个文件就是
/etc/passwd
文件,它包含了一些与用户有关的信息。如下:
/etc/passwd
文件中还有很多用户登录名和UID之外的信息。/etc/passwd
文件的字段包含了如下信息:注意:/etc/passwd是一个标准的文件,我们可以使用编辑器来编辑它。一般来说root的用户uid为0,如果我们把一个普通用户的uid修改为0的话,那么它只要用普通用户的用户名和密码登陆就可以切换到root用户了,所以说这样做是不好的,及其危险的!
值得注意的是/etc/passwd文件中的密码字段都被设置成了X,这并不代表说所有用户的密码都是相同的!在早些年的Linux上,/etc/passwd文件里有加密后的用户密码。但是很多程序都要访问/etc/passwd文件来获取用户的权限,这样肯定会造成安全隐患。而且随着密码破解工具的不断强大,/etc/passwd文件中的密码更加的危险。 现在的Linux系统都将用户密码爆出在另外一个单独的文件夹中,这个文件就叫shadow文件,路径是/etc/shadow。只有特定的程序,比如我们要登陆Linux系统的时候才能访问这个文件。
/etc/shadow文件是存储系统账户密码的文件,只有root用户才能够访问它,比如我现在用一个普通用户,它能访问/etc/passwd但是它不能访问/etc/shadow
/etc/shadow文件为系统上的每一个用户账户都保存了一条记录,如下:
parrot:$6$ee8g5J/xT4b8FDeS$plJpruIUbsNjQA9WdkxtJZ/4IOaB6XtVIyMScr4KtYocTwp3YMYrz6e/KxQuWIZ6yNHL.klGQtwXHovmuJ34I.:18345:0:99999:7:::
在/etc/shadow文件中的每条记录都有9个字段:
在字段二密码位置,如果是*表示用户被禁用了,!表示用户密码为初始化,也就是空密码
与用户账户类似,组的信息也保存在系统的一个文件中,在/etc/group文件中包含了系统上用到的每个组的信息。如下:
在了解之前/etc/passwd文件分配的格式之后,我们也不难理解/etc/group的格式,系统账户用的组通常都会分配低于500的GID,用户组的GID则会采用500以上开始分配。
在Linux中wheel就是类似于一个管理员的组。通常在Linux下即使我们有了管理员,也不推荐用root用户登录。一般情况下用普通用户登录就可以了,在需要root权限执行一些操作时,再su登录成为root用户。但是,任何人只要知道了root的密码,就都可以通过su命令来登录为root用户,这无疑为系统带来了安全隐患。所以,将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户了,然后可以修改配置文件使得只有wheel组内的用户可以切换到root用户。
"auth required pam_wheel.so use_uid" 表示禁止非wheel组用户切换到root。
在Linux中使用useradd来新添加用户,可以一次性创建新用户账户及设置用户的HOME目录结构。useradd系统默认值在/etc/default/useradd文件中。
新建用户之后,会为用户设置一些默认值:系统会将/etc/skel目录下的内容复制到用户的HOME目录下、为该用户在mail目录下创建一个介绍邮件的文件、将bash shell作为默认shell、在/etc/passwd,/etc/shawod,/etc/group文件夹中新增用户信息
useradd命令参数:
-c comment 给新用户添加备注
-d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date 用YYYY-MM-DD格式指定一个账户过期的日期
-f inactive_days 指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁用,1表示禁用这个功能
-g initial_group 指定用户登录组的GID或组名
-G group ... 指定用户除登录组之外所属的一个或多个附加组
-k 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-m 创建用户的HOME目录
-M 不创建用户的HOME目录(当默认设置里要求创建时才使用这个选项)
-n 创建一个与用户登录名同名的新组
-r 创建系统账户
-p passwd 为用户账户指定默认密码
-s shell 指定默认的登录shell
-u uid 为账户指定唯一的UID
例子:
#创建用户
useradd zhangsan //创建一个张三的用户
useradd -u 666 -g liuliuliu lisi //创建一个lisi的用户设置它的UID为666并且添加到liuliuliu组中
useradd -s /sbin/nologin laowang //创建一个老王的用户并且不给他登陆系统的权限,默认是/bin/bash (对老王没有恶意)
如果你想从系统中删除用户,可以使用userdel来删除用户
userdel -r laowang
//这里带上-r参数能够删除passwd、shadow、group文件中的用户信息和home目录和邮箱
//如果不带-r参数的话只是删除passwd、shadow、group文件中的用户信息
在有大量用户的环境中使用-r参数时要特别小心。你永远不知道用户是否在其HOME目 录下存放了其他用户或其他程序要使用的重要文件。记住,在删除用户的HOME目录之 前一定要检查清楚!
一些修改用户的命令
usermod 修改用户账户的字段,还可以指定主要组以及附加组的所属关系
passwd 修改已有用户的密码
chpasswd 从文件中读取登录名密码对,并更新密码
chage 修改密码的过期日期
chfn 修改用户账户的备注信息
chsh 修改用户账户的默认登录shell
usermod可以用来修改/etc/passwd文件中的大部分字段,它还有一些参数
修改密码的话可以使用passwd和chpasswd
##普通修改密码
passwd laowang ##修改laowang的密码
##批量修改密码,先创建一个带有用户密码的文本文件
vim user_pass.txt
xiaohong:123456
laowang:66666
zhangsan:250250
然后使用chpasswd批量修改
chpasswd < user_pass.txt
groupadd laowangliuliuliu ##创建一个laowangliuliuliu的组
groupdel laowangliuliuliu ##删除laowangliuliuliu组
groups zhangsan ##查看zhangsan所属组的信息
groupmod -n jen zhangsan ##修改zhangsan组名为jen
groupmod -g 666 jen ##修改jen的GID为666
groupmems -a jen -g laowang ##将jen用户添加到laowang组中(变坏了啊!)
除了用户有权限之外,文件也是有权限的!ls 命令可以用来查看Linux系统上文件、目录和设备的权限 如: ls -l
前面信息由10个字符组成:例如:
-rwxr-xr-x
2~10位的权限综合有时成为:a权限(all) 输出结果的第一个字段就是描述文件和目录的权限的信息,含义为:
在后面有三组字符,代表了3种访问权限(咋这么多对象啊我的天!)
Linux权限码:
权 限 二进制值 八进制值 描 述
--- 000 0 没有任何权限
--x 001 1 只有执行权限
-w- 010 2 只有写入权限
-wx 011 3 有写入和执行权限
r-- 100 4 只有读取权限
r-x 101 5 有读取和执行权限
rw- 110 6 有读取和写入权限
rwx 111 7 有全部权限
用数字表示法表示:r 、 w 和x分别用4、2、1来表示,没有授权则为0。例如:
原始权限 转为数字 数字表示法
rwxrwxr-x (421)(421)(401) 775
rwxr-xr-x (421)(401)(401) 755
rwx------ (421)(000)(000) 700 #这就是老王的,自己一个人玩!
针对文件:
针对目录:
※目录的权限比较特殊,可以看到,x 权限是目录最基本的权限,因为如果你都不能进入该目录,那读取内容和增删改查就更无从所起了。还有一个就是当你对目录拥有 rwx 权限的时候。倘若目录中有一个文件,该文件对你的权限是没有 w 权限的,但是因为你先匹配到该目录的权限,可以对目录中的文件修改,所以你可以强制修改该文件,保存退出!
由上可以知道laowang分析一下(全面解剖老王的个人品质)
这样的话我们肯定不爽了,就只能laowang自己一个人玩,组的人也不带上一起玩吗?独乐乐不如众乐乐。 那么我们就可以使用chmod来改变老王自私的行为。 例如,我们要组成员可以在laowang里面增删改查,搞跟一堆事情。那么我们要能进入目录,就是要添加 x 权限,可以修改就是添加 w 权限,还可以看那就要添加 r 权限。直接改吧!
chmod 770 laowang
或者
chmod g=rwx laowang
那现在我要削弱老王自己看自己的东西怎么办,也是可以使用chmod来修改
chmod u-r laowang
drwxr-xr-x 2 laowang laowang 4096 03-18 11:56 xiaohong
小红所属者是老王,所属组是老王组,哇!这就太不好了吧!我也不懂,但是还是要救失足少女的是吧,可以使用命令chown
修改所属者,chgrp
修改所属组
chown xiaohong xiaohong/
chgrp xiaohong xiaohong/
##在查看一下,让小红做回自己
ls -l
drwxr-xr-x 2 xiaohong xiaohong 4096 03-18 11:56 xiaohong
什么是umask?当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、 [HOME]/.bash_profile或[HOME]/.profile中设置umask值。
umask值 文件 目录
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0
一般来说新建文件的默认值是0666,新建目录的默认值是0777 如果将全线的掩码设置为0002的话则每个新建的文件的默认权限为0666-0002=0644,而目录的权限为775。
查看umask值
直接umask
我们知道umask的值为0022后就可以计算出新创建文件和目录的权限了
drwxr-xr-x = 0777 - 0022 = 755 #目录
-rw-r--r-- = 0666 - 0022 = 644 #文件
我们可以修改umask值来改变新创建文件和目录的权限
umask 0002
drwxrwxr-x = 0777 - 0002 = 775 #目录
-rw-rw-r-- = 0666 - 0002 = 664 #文件
可以看到umask值设置的越小,给的权限就会越大
Linux在路径名中不使用驱动器盘符。在Windows中,PC上安装的物理驱动器决定了文件的路径名。Windows会为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储其中的文件。例如在D盘下有一个视频,路径为:
D:\myFile\video\Comic.mp4
这种Windows文件路径表明了文件test.doc究竟位于哪个磁盘分区中。Linux则采用了一种不同的方式。Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录(virtual directory)。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照访问它们的目录路径一一列出,这点跟Windows类似。
注意:Linux是使用正斜线(/)而不是反斜线()在文件路径中划分目录。在Linux中, 反斜线用来标识转义字符,要是用在文件路径中的话会导致各种各样的问题
在Linux中,假如老王在他家放了一些影片录像,那么他的路径可能为:
/home/laowang/Desktop/SomeFilms.avi
这里表明了SomeFilms.avi位于Desktop目录,Desktop又位于laowang目录中,laowang则在home目录中,它这里并没有提供任何信息表明它存放在那个物理磁盘上面。
Linux虚拟目录中比较复杂的部分是它如何协调管理各个存储设备。在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器中。
何为挂载呢?Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。
举个例子,我们想通过命令行访问某个 U 盘中的数据,图 1 所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。
可以看到,目前 U 盘和 Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。 接下来,我们在根目录下新建一个目录 /sdb-u,通过挂载命令将 U 盘文件系统挂载到此目录,挂载效果如图:
目 录 用 途
/ 虚拟目录的根目录。通常不会在这里存储文件
/bin 二进制目录,存放许多用户级的GNU工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂载目录,另一个可移动媒体设备的常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/proc 进程目录,存放现有硬件及当前进程的相关信息
/root root用户的主目录
/sbin 系统二进制目录,存放许多GNU管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/srv 服务目录,存放本地服务的相关文件
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
/var 可变目录,用以存放经常变化的文件,比如日志文件
本文由 jen 撰写