首页 > 技术文章 > Linux各种重要配置文件详解

ginvip 2017-01-26 17:03 原文

1:网卡文件/etc/sysconfig/network-scripts/ifcfg-eth0

[root@Gin scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0            ## 物理设备名,eth0为第一块网卡;eth1为第二块网卡
HWADDR=00:0C:29:84:0C:21   ## 网卡的MAC地址,48位
TYPE=Ethernet           ## 以太网
UUID=09ae6890-2925-4ca0-9cbc-e937593624f8 ## 唯一的一个用户标识,相当于身份证号码!如查看磁盘设备的UUID使用blkid命令
ONBOOT=yes           ## 控制网卡是否开机启动
NM_CONTROLLED=yes      ##是否通过networkmanager管理网卡设备
BOOTPROTO=dhcp         ## proto取下列值之一:none,引导时不使用协议;static,静态分配地址;bootp,使用BOOTP协议;dhcp,使用DHCP协议
IIPADDR=192.168.17.128        ## IP地址      
NETMASK=255.255.255.0        ## 子网掩码,划分网络位和主机位
DNS2=202.106.0.20         ## DNS是把baidu.com变成了baidu服务器IP。DNS就是域名和IP的解析工具
DNS1=8.8.8.8
GATEWAY=192.168.0.1         ## 网关地址,路由器的地址
USERCTL=no
PEERDNS=yes
IPV6INIT=no

2:/etc/fstab

fstab - static information about the filesystems

作用:设置文件系统挂载信息的文件,使得开机能够自动挂载磁盘分区

[root@Gin scripts]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Jan 24 02:46:13 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=91a2efd1-8bf1-42d2-a387-e22e4b665a36 /                       ext4    defaults        1 1
UUID=3f124651-9d7a-42b4-8cfa-11053a5a8ffc /boot                   ext4    defaults        1 2
UUID=8cb814f4-f2f4-4bb0-a127-c97092845fcf swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

字段定义

/etc/fstab 文件包含了如下字段,通过空格或 Tab 分隔:

<file system> <dir> <type> <options> <dump> <pass>

#第一列:要被挂载的磁盘设备

#第二列:前面目录的挂载点(前面的目录挂载到哪个目录下)

#第三列:挂载的文件系统类型!支持许多种不同的文件系统:ext2ext3ext4reiserfsxfsjfssmbfsiso9660vfatntfsswap 及 auto。 设置成auto类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的。

#第四列:挂载的选项!注意有些mount 参数是特定文件系统才有的。一些比较常用的参数有

  • auto - 在启动时或键入了 mount -a 命令时自动挂载。
  • noauto - 只在你的命令下被挂载。
  • exec - 允许执行此分区的二进制文件。
  • noexec - 不允许执行此文件系统上的二进制文件。
  • ro - 以只读模式挂载文件系统。
  • rw - 以读写模式挂载文件系统。
  • user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexecnosuidnodev 参数。
  • users - 允许所有 users 组中的用户挂载文件系统.
  • nouser - 只能被 root 挂载。
  • owner - 允许设备所有者挂载.
  • sync - I/O 同步进行。
  • async - I/O 异步进行。
  • dev - 解析文件系统上的块特殊设备。
  • nodev - 不解析文件系统上的块特殊设备。
  • suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。
  • nosuid - 禁止 suid 操作和设定 sgid 位。
  • noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。
  • nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
  • relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。
  • flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。
  • defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rwsuiddevexecautonouserasync.

#第五列:是否需要备份磁盘,1表示需要备份,0表示不需要备份

#第六列:开机是否自检

文件系统标识

在 /etc/fstab配置文件中你可以以三种不同的方法表示文件系统:内核名称、UUID 或者 label。使用 UUID 或是 label 的好处在于它们与磁盘顺序无关。如果你在 BIOS 中改变了你的存储设备顺序,或是重新拔插了存储设备,或是因为一些 BIOS 可能会随机地改变存储设备的顺序,那么用 UUID 或是 label 来表示将更有效。

要显示分区的基本信息请运行:

[root@Gin scripts]# lsblk -f
NAME   FSTYPE  LABEL            UUID                                 MOUNTPOINT
sr0    iso9660 CentOS_6.6_Final                                      
sda                                                                  
├─sda1 ext4                     3f124651-9d7a-42b4-8cfa-11053a5a8ffc /boot
├─sda2 swap                     8cb814f4-f2f4-4bb0-a127-c97092845fcf [SWAP]
└─sda3 ext4                     91a2efd1-8bf1-42d2-a387-e22e4b665a36 /

UUID

所有分区和设备都有唯一的 UUID。它们由文件系统生成工具 (mkfs.*) 在创建文件系统时生成。

lsblk -f 命令将显示所有设备的 UUID 值。/etc/fstab 中使用 UUID= 前缀:

手动挂载测试

1:创建一个虚拟的块设备

[root@Gin scripts]# dd if=/dev/zero of=/dev/sdb1 bs=4096 count=10

2:格式化

[root@Gin scripts]# mkfs.ext4 /dev/sdb1

3:挂载

[root@Gin scripts]# mount -t ext4 -o loop,noatime,noexec /dev/sdb1 /mnt

4:查看挂载设置

[root@Gin scripts]# df -hT

5:写入/etc/fstab配置文件,开机自动挂载!也可以写入到/etc/rc.local文件

[root@Gin scripts]# cat /etc/fstab
UUID=435a2a45-0f41-49b0-b3f2-5d4a00615339 /                       ext4    defaults        1 1
UUID=851d3618-fb61-40cb-ba6d-e0879a7d06a3 /boot                   ext4    defaults        1 2
UUID=91f17110-1462-4327-82ce-474f728f2e62 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sdb1		/mnt			ext4	loop,noatime,noexec		0 0

#上面的/dev/sdb1需要挂载的目录,可以使用UUID来替代,查看UUID命令如下:blkid 或 ls -l /dev/disk/by-uuid

fstab出问题的修复方案:

1)开机提示,输入密码 修改

2)救援模式,rescue

修复/etc/fstab只读状态:mount -o rw,remount /

 3:/etc/passwd

[root@Gin scripts]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
............................................

从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

root :x :0 :0 :root :root :/bin/bash
账号名称 账号密码 账号UID 账号GID 用户说明 用户家目录 shell解释器

  账号名称(login_name):是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

  账号密码(passwd):一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

  账号UID(UID):是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。

  账号GID(GID):字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。

  用户说明(users):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。

  用户家目录(home_directory):也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。

  Shell解释器(Shell):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

  用户的登录Shell可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

4:/etc/shadow

文件属性:

[root@Gin scripts]# ll /etc/shadow
---------- 1 root root 964 Jan 26 14:30 /etc/shadow

文件内容:

[root@Gin scripts]# ll /etc/shadow
poe:$6$c3hp3bcj$f2i1namN9feDDhgda3mdtVEb5PyWFyw2MCeshWHajq7OJ0.0Bo0Lh0FY2W3BaVOztszOip/D4h5LF9pRLJfe11:12784:0:99999:7:::

以‘:’作为分隔符号,如果数一数,会发现共有九个位啊, 这九个位的用途是这样的:

1. 帐号名称:由于密码也需要与帐号对应啊~因此, 这个档案的第一栏就是帐号,必须要与 /etc/passwd 相同才行!

2. 密码:这个才是真正的密码,而且是经过编码过的密码! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是, 虽然这些加密过的密码很难被解出来,但是‘很难’不等于‘不会’,所以, 这个档案只有 root 才可以读写!你得随时注意,不要不小心更动了这个档案的属性呢!另外, 如果是在密码栏的第一个字元为‘ * ’或者是‘ ! ’,表示这个帐号并不会被用来登录的意思。 所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个 * !他就无法使用该帐号!

3. 最近更动密码的日期:这个栏位记录了‘更动密码的那一天’的日期, 不过,很奇怪呀!在我的例子中怎么会是 12784呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 ! 所以这个日期是累加的!得注意一下这个资料呦!那么最近的 2005 年 1 月 1 日就是 12784 啦,瞭解了吗?

4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这样的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码!

5. 密码需要重新变更的天数: 由于害怕密码被某些‘有心人士’窃取而危害到整个系统的安全,所以有了这个栏位的设计。 你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。 而如果像上面的 99999 的话,那就表示,密码不需要重新输入! 不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码!

6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个‘必须变更密码’的那个时间时, 系统会依据这个栏位的设定,发出‘警告’言论给这个帐号,提醒他‘再过 n 天你的密码就要失效了,请尽快重新设定你的密码!如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。

7. 密码过期的受限时间:如果用户过了警告期限没有重新输入密码, 使得密码失效了,也就是说,你在‘必须变更密码的期限前,并没有变更你的密码!’ 那么该组密码就称为‘失效的密码’~怎么办?没关系,还有这个栏位的天数设计啊~ 意思就是说,当密码失效后,你还可以用这个密码在 n 天内进行登入的意思。 而如果在这个天数后还是没有变更密码,那么您的帐号就失效了!无法登入!

8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用 1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。 这个栏位会被使用通常应该是在‘收费服务’的系统中, 你可以规定一个日期让该帐号不能再使用!

9. 保留:最后一个栏位是保留的

举例:假如系统有一个dmtsai 用户,它的/etc/passwd文件信息如下所示

dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125:

这表示什么呢?要注意的是, 13025 是 2005/08/30 ,所以, dmtsai 这个使用者他的密码相关意义是:

* 最近一次更动密码的日期是 2005/08/30 (13025);
* 能够修改密码的时间是 5 天以后,也就是 2005/09/04 以前 dmtsai 不能修改自己的密码; 如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息:
You must wait longer to change your password
passwd: Authentication token manipulation error
* 使用者必须要在 2005/09/04 到 2005/10/29 之间的 60 天限制内去修改自己的密码,若 2005/10/29 之后还是没有变更密码时,该帐号就会宣告失效;
* 如果使用者一直没有更改密码,那么在 2005/10/29 之前的 7 天内,系统会警告 dmtsai 应该修改密码的相关资讯;例如当 dmtsai 登入时,系统会主动提示如下的资讯:
Warning: your password will expire in 5 days
* 如果该帐号一直到 2005/10/29 都没有更改密码,由于还有两天的恕限时间,因此, dmtsai 还是可以在 2005/10/31 以前继续登入;
* 如果使用者在 2005/10/29 以前变更过密码,那么那个 13025 的日期就会跟著改变,因此, 所有的限制日期也会跟著相对变动
* 无论使用者如何动作,到了 13125 ,大约是 2005/12/8 左右,该帐号就失效了~

生产场景应用案例

root密码忘记或者被更动了?怎么办?
有的时候会发生这样的情况,就是说,你的 root 密码忘记了!要怎么办?重新安装吗?另外, 有的时候是被入侵了, root 的密码被更动过,该如何是好?
 
这个时候就必须要使用到 /etc/shadow 这个文件,我们刚刚知道密码是存在这个档案中的, 所以只要你能够以各种可行的方法开机进入 Linux ,例如单人维护模式,或者是以 live CD (KNOPPIX) 来进入 Linux 系统。之后,将硬碟顺利挂载,然后进入 /etc/shadow 这个档案中,将 root 的密码这一栏全部清空!然后再登入 Linux 一次,这个时候 root 将不需要密码 (有的时候需要输入空白字元) 就可以登入了!这个时候请赶快以 passwd 设定 root 密码即可。

推荐阅读