Skip to content

Latest commit

 

History

History
882 lines (563 loc) · 36.8 KB

文件.md

File metadata and controls

882 lines (563 loc) · 36.8 KB

文件

Linux 的哲学就是一切皆文件

注 : 笔记中拓扑图 xmind 源文件在其图片目录下


大纲


文件类型

  • 普通文件 : 例如图片、文本、音乐、可执行程序等
  • 目录文件 : 文件夹,例如/home、/root
  • 链接文件 : 当创建一个已存在文件的符号链接时,系统就创建一个链接文件,这个链接文件指向已存在的文件
  • 设备文件 : 例如鼠标、键盘、网卡、光驱
  • 命名管道(FIFO) : 一种特殊类型的文件,linux系统下,进程之间通信可以通过该文件完成

文件权限

  • 权限类型:读、写、执行
  • 权限表示方式:模式位
drwxr-xr-x  11 root root 1111 Sep 11 11:11  test
| |  |  |   |   |   |     |       |          |__文件名
| |  |  |   |   |   |     |       |__最后修改时间
| |  |  |   |   |   |     |__文件大小
| |  |  |   |   |   |__文件拥有者 GID
| |  |  |   |   |__文件拥有者 UID
| |  |  |   |__链接数
| |  |  |__系统中其他用户权限(O)
| |  |__文件所有者所在组其他用户的权限(G)
| |__文件拥有者的权限(U)
|文件类型:d 为文件夹-是文件

文件类型

  • d 文件夹,可以代表目录或文件
  • l 链接文件,就是类似 Windows 底下的快捷方式
  • - 文件,就是一般类型的文件
  • b 块设备,就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘
  • s 套接字
  • c 字符设备,即是一些串行端口的接口设备,例如键盘、鼠标等
  • p 命名管道

权限的数字表示法

rwx r-x r-x
||| ||| |||
111 101 101
 |   |   |
 7   5   5

权限的特殊属性

  • SUID

    -rwsr-xr-x
       |
      SUID 程序

    当 s 出现在文件拥有者的 x 权限上时,如 /usr/bin/passwd 这个文件的权限为 -rwsr-xr-x,此时就被称为 SET UID 简称 SUID.SUID 对于一个文件有什么限制和功能呢?

    • SUID 权限仅对二进制可执行文件有效
    • 执行者对于该文件具有 x 的权限
    • 本权限仅在执行该文件的过程中有效
    • 执行者将具有该文件拥有者的权限

    例如普通用户用 passwd 修改自己的命令,实际上最终更改的是 /etc/passwd 文件. 此文件时用户管理配置文件,只有 root 权限才能更改.

    既然是 root 用户才拥有此权限,为什么我们可以通过 passwd 命令来修改密码呢,那这就要归功于 passwd 设置了 suid 权限位了.普通用户通过执行 passwd 命令,临时拥有 root 权限,间接的修改 /etc/passwd,以达到修改自己密码的权限.

  • SGID

    当 s 出现在目录或文件所属群的 x 权限上时,此时就称为 SET GID 简称 SGID,那 SGID 对文件和目录分部有哪些功能呢?

    • SGID 对目录

      使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录

      使用者在此目录下的群组将会变成该目录的群组

      若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同

    • SGID 对文件

      SGID 对二进制可执行文件有效

      程式执行者对于该文件来说,需具备 x 的权限

      执行者在执行的过程中将会获得该文件群组的支援(用于改文件群组的权限)

  • SBIT(粘滞位)

    粘滞位表示,只有文件所有者才能删除该文件,即使组权限允许该文件可以删除。通常,在 /tmp 这样的通用或协作目录上,此设置最有意义。

    当 t 出现在目录其他用户的 x 权限上时,此时就称为 Sticky Bit 简称 SBIT,那 SBIT 有哪些限制和作用呢?

    仅对目录有效,对文件无效

    当使用者在该目录下建立文件或目录时(有权限的情况下),仅自己与 root 才有权力删除新建的目录或文件

    我们知道 /tmp 目录是这样的权限

    drwxrwxrwt.  13 root root  4096 10月 24 22:16 tmp

    现在我们来验证下,先用 root 账号在 tmp 文件中创建一个文件 test,然后用 openstack(其他账号)进入该目录,删除 test 文件,看看发生什么情况

    我们看到这样是不能删除文件的.因为 /temp 目录有 SBIT 权限.

  • 配置 SUID、SGID、Sticky 属性

    chmod u+s test_file    # 给文件增加 SUID 属性
    chmod g+s test_dir     # 给目录增加 SGID 属性
    chmod o+t test_dir     # 给目录增加 Sticky 属性
  • umask

    umask 会屏蔽(或 “阻止”)默认权限集中的位,以定义文件或目录的权限。例如,umask 输出中的 2 表示它至少在默认情况下阻止了文件的“写入” 位。

    使用不带任何参数的 umask 命令可以使我们看到当前的 umask 设置。共有四列:第一列为特殊的suid、sgid 或粘滞位而保留,其余三列代表属主、组和其他人的权限。

    > umask
    0022
    
    > umask -S
    u=rwx,g=rx,o=rx
    

linux 下删除一个文件需要的权限

要删除一个文件,对该文件所在目录需要拥有 write 和 execute 权限,对该文件本身却没有 write 权限要求.

文件系统类型

  • ext : 第一个专门针对 liunx 的文件系统
  • ext2 : 为解决 ext 文件系统缺陷设计的高性能、可扩展的文件系统
  • ext3 : 日志文件系统,ext2 的升级版
  • ext4 : Ext4 提供了更为可靠性的功能
  • swap : Linux 的交换分区
  • NFS : Linux 的网络文件系统
  • smb : 支持 smb 协议的网络文件系统
  • vfat : 与 windows 系统兼容的 linux 文件系统
  • ntfs : windows NT 所采用的独特的文件系统结构
  • proc : Linux 操作系统中的一种基于内存的伪文件系统
  • xfs : 由 SGI 开发的一个全64位、快速、安全的日志文件系统

目录结构

Linux 文件系统的结构层次鲜明,延展开就是个树形结构,最顶层是其根目录:

/

根目录,位于 Linux 文件系统目录结构的顶层

/bin

bin 是 Binary 的缩写, 这个目录存放着最经常使用的命令 (ls,cat,mkdir 等).

/boot

这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件.

/boot/grub

开机设定相关


/dev

dev 是 Device(设备)的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的.

/dev/null

在类 Unix 系统中,/dev/null 称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个 EOF.

/dev/pty/

伪终端(Pseudo Terminal)是成对的逻辑终端设备(即 master 和 slave 设备, 对 master 的操作会反映到 slave 上)。

例如 /dev/ptyp3/dev/ttyp3(或者在设备文件系统中分别是 /dev/pty/m3/dev/pty/s3),它们与实际物理设备并不直接相关

如果一个程序把 ptyp3(master 设备)看作是一个串行端口设备,则它对该端口的读/写操作会反映在该逻辑终端设备对应的另一个 ttyp3(slave 设备)上面。 而ttyp3则是另一个程序用于读写操作的逻辑设备。

这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中一个使用 ttyp3 的程序则认为自己正在与一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。对于 ttyp3(s3),任何设计成使用一个串行端口设备的程序都可以使用该逻辑设备。但对于使用 ptyp3 的程序,则需要专门设计来使用 ptyp3(m3)逻辑设备。

例如,如果某人在网上使用 telnet 程序连接到你的计算机上,则 telnet 程序就可能会开始连接到设备 ptyp2(m2)上(一个伪终端端口上),此时一个 getty 程序就应该运行在对应的 ttyp2(s2)端口上。

当 telnet 从远端获取了一个字符时,该字符就会通过 m2、s2 传递给 getty 程序,而 getty 程序就会通过 s2、m2 和 telnet 程序往网络上返回”login:”字符串信息。

这样,登录程序与 telnet 程序就通过“伪终端”进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。

在使用设备文件系统 (device filesystem)之前,为了得到大量的伪终端设备特殊文件,使用了比较复杂的文件名命名方式。因为只存在16个 ttyp(ttyp0—ttypf) 的设备文件,为了得到更多的逻辑设备对,就使用了如 q、r、s 等字符来代替 p。

例如,ttys8 和 ptys8 就是一个伪终端设备对,不过这种命名方式目前仍然在RedHat等Linux系统中使用着。

但 Linux 系统上的 Unix98 并不使用上述方法,而使用了”pty master”方式,例如 /dev/ptm3。它的对应端则会被自动地创建成 /dev/pts/3。这样就可以在需要时提供一个pty伪终端。

目录 /dev/pts 是一个类型为devpts的文件系统,并且可以在被加载文件系统列表中看到。虽然“文件” /dev/pts/3 看上去是设备文件系统中的一项,但其实它完全是一种不同的文件系统。

即:

TELNET —> TTYP3(S3: slave) —> PTYP3(M3: master) —> GETTY

/dev/pts/n

在 Xwindows 模式下的伪终端.

/dev/random 与 /dev/urandom

/dev/random/dev/urandom 是 Linux 系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如 SSH Keys,SSL Keys 等)需要它们提供的随机数据流。

这两个设备的差异在于:/dev/random 的 random pool 依赖于系统中断,因此在系统的中断数不足时,/dev/random 设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random 设备可以保证数据的随机性。/dev/urandom 不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。

/dev/urandom 是伪随机数生成器(PRND),而 /dev/random 是“真”随机数生成器。

使用 cat 命令可以读取 /dev/random/dev/urandom 的数据流(二进制数据流,很难阅读),可以用 od 命令转换为十六进制后查看

cat /dev/random | od -x
cat /dev/urandom | od -x

在 cat 的过程中发现,/dev/random 产生的速度比较慢,有时候还会出现较大的停顿,而 /dev/urandom 的产生速度很快,基本没有任何停顿。

而使用 dd 命令从这些设备中 copy 数据流,发现速度差异很大:

dd count=1 ibs=1024 if=/dev/random > /dev/null
dd count=1 ibs=1024 if=/dev/urandom > /dev/null

扩展阅读:

/dev/tty

如果当前进程有控制终端(Controlling Terminal)的话,那么 /dev/tty 就是当前进程的控制终端的设备特殊文件。可以使用命令”ps -ax”来查看进程与哪个控制终端相连。

对于你登录的 shell,/dev/tty 就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它具体对应哪个实际终端设备。/dev/tty 有些类似于到实际所使用终端设备的一个联接。

/dev/ttyn, /dev/console

在Linux 系统中,计算机显示器通常被称为控制台终端 (Console)

它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2 等。

当你在控制台上登录时,使用的是 tty1。使用 Alt+[F1—F6] 组合键时,我们就可以切换到 tty2、tty3 等上面去。

tty1-tty6 等称为虚拟终端,而 tty0 则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。

因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话存在。只有系统或超级用户 root 可以向 /dev/tty0 进行写操作 即下例:

tty # 查看当前TTY

echo “test tty0” > /dev/tty0

/dev/ttySn

串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。

有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。

这些串行端口所对应的设备名称是 /dev/tts/0(或 /dev/ttyS0), /dev/tts/1(或 /dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于 DOS 系统下的 COM1、COM2 等。

若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可!!!!

例如,在命令行提示符下键入:echo test > /dev/ttyS1 会把单词”test”发送到连接在 ttyS1(COM2)端口的设备上。可接串口来实验。


/etc

这个目录用来存放所有的系统管理所需要的配置文件和子目录.

/etc/audit/auditd.conf

auditd 守护程序的默认配置文件

# 设置日志文件
log_file = /var/log/audit/audit.log
log_group = root
log_format = ENRICHED
flush = INCREMENTAL_ASYNC
freq = 50

# 设置日志文件大小,单位是MB
max_log_file = 8

# 日志文件滚动的数目,如果设置为小于 2,则不会循环记录。没设置则位 0,不循环日志文件
num_logs = 5
priority_boost = 4
name_format = NONE

##name = mydomain
# 日志文件到达最大值后的动作,ROTATE 是滚动记录
max_log_file_action = ROTATE

更详细的配置信息请查看 https://man7.org/linux/man-pages/man5/auditd.conf.5.html , auditd

/etc/audit/audit.rules

audit 记录审计规则的文件

audit可以自定义对指定的文件或命令进行审计(如监视rm命令被执行、/etc/passwd文件内容被改变),只要配置好对应规则即可,配置规则可以通过命令行(auditctl 临时生效)或者编辑配置文件(audit.rules)两种方式来实现。

# First rule - delete all
# 第一条规则--删除所有
-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
# 增加缓冲区,以度过压力事件。
-b 8192

## This determine how long to wait in burst of events
# 决定了在突发事件中要等待多长时间
--backlog_wait_time 60000

## Set failure mode to syslog
# 将故障模式设置为 syslog
-f 1

监控文件系统行为

  • 规则格式:-w 路径 -p 权限 -k 关键字

其中权限动作分为四种

  • r 读取文件
  • w 写入文件
  • x 执行文件
  • a 修改文件属性
# 监控 / etc/passwd 文件的修改行为
-w /etc/passwd -p wa

# 如果没有 -p 选项,则默认监视所有动作 rwxa

监控系统调用行为(依靠系统调用来识别)

  • 规则:-a 一系列动作 -S 系统调用名称 -F 字段=值 -k 关键字
# 监视文件权限变化,因为改变权限必须调用 umask
-a entry,always -S umask -S chown

# 监视主机名变化,因为修改主机名必须调用 sethostname
-a entry,always -S sethostname -S setdomainname

# 监视系统时间变化
-a entry,always -S adjtimex -S settimeofday -S stime

# 设置系统日期和时间
-a entry,always -S stime

# 监控用户和组ID变化
-a entry,always -S setuid -S seteuid -S setreuid
-a entry,always -S setgid -S setegid -S setregid

# 监控挂载
-a entry,always -S mount -S umount

/etc/bashrc (ubuntu 为 /etc/bash.bashrc)

为每一个运行 bash shell 的用户执行此文件.当 bash shell 被打开时,该文件被读取.如果你想对所有的使用 bash 的用户修改某个配置并在以后打开的 bash 都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个 bash 即可生效.

Ubuntu 没有此文件,与之对应的是 /etc/bash.bashrc .

/etc/crontab

/etc/crontab 是系统的周期任务, /etc/crontab 是个纯文本文件,可以 root 的身份编辑这个文件

基本上,cron 服务的最低检测时间单位是分钟,所以 cron 会每分钟读取一次 /etc/crontab/var/spool/cron 中的数据内容,因此,只要编辑完 /etc/crontab 文件并且保存之后,crontab 时设定就会自动执行。但是某些原因或在其他的 unix 系统中,由于 crontab 是读到内存中,所以在修改完 /etc/crontab 之后可能并不会马上执行,这时请重新启动 crond 服务。

/etc/rc.d/init.d/crond   restart

/etc/hosts.allow

/etc/hosts.allow 和 / etc/hosts.deny 两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个 ip 或者 ip 段的客户访问 linux 的某项服务。

host.allow 文件列出了允许连接到一个特定服务的主机

hosts.allow 的优先级高于 hosts.deny

这两个文件只控制对有 hosts_access 功能的服务(如 xinetd 所管理的那些服务、sshd 和某些配置的 sendmail)的访问

sshd:1.1.1.*:allow
# 允许 1.1.1.* ip 段连接 sshd 服务

all:218.24.129.110
# 表示接受 110 这个 ip 的所有请求!

/etc/hosts.deny

hosts.deny 文件则负责限制访问

sshd:all:deny
# 禁止除 /etc/hosts.allow 以外的所有主机进行 ssh 连接

注意修改完后:

service xinetd restart

才能让刚才的更改生效。

/etc/ld.so.conf

/etc/ld.so.conf.d/*/etc/ld.so.conf 和 ldconfig. /etc/ld.so.conf.d/* 目录下的文件和 /etc/ld.so.conf 记录了动态链接库的路径,系统默认搜索 /lib/usr/lib ,在其他路径下的库文件就需在这些文件中指定。或者,还有个方法,就是设置 LD_LIBRARY_PATH 环境变量,添加其他路径,多个中间用 :分隔开。

  • ldconfig

    ldconfig 是一个用来将 /etc/ld.so.conf.d/*h/etc/ld.so.conf 中列出的库缓存到 /etc/ld.so.cache 文件中以供使用,因此在装完一些库或更新 /etc/ld.so.conf 文件时,需运行 /sbin/ldconfig 命令一下。

    Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。

    第二类是动态链接的可执行程序。

    我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的:

    ldd /sbin/sln
    

    通常,动态链接的程序比其静态链接的等价程序小得多。不过,静态链接的程序可以在某些低级维护任务中发挥作用。例如,sln 是修改位于 /lib 中的不同库符号链接的极佳工具。但通常你会发现几乎所有 Linux 系统上的可执行程序都是某种动态链接的变体。

    那么,如果动态可执行程序不包含运行所需的所有函数,Linux 的哪部分负责将这些程序和所有必需的共享库一起装入,以使它们能正确执行呢?答案是动态装入器(dynamic loader),它实际上是你在 ln 的 ldd 清单中看到的作为共享库相关性列出的 ld-linux.so.2 库。动态装入器负责装入动态链接的可执行程序运行所需的共享库。现在,让我们迅速查看一下动态装入器如何在系统上找到适当的共享库。

    动态装入器找到共享库要依靠两个文件 — /etc/ld.so.conf/etc/ld.so.cacheld.so.conf 文件包含一个所有目录(/lib/usr/lib 除外,它们会自动包含在其中)的清单,动态装入器将在其中查找共享库。

    但是在动态装入器能“看到”这一信息之前,必须将它转换到 ld.so.cache 文件中。可以通过运行 ldconfig 命令做到这一点:

    ldconfig
    

      当 ldconfig 操作结束时,你会有一个最新的 /etc/ld.so.cache 文件,它反映你对 /etc/ld.so.conf 所做的更改。从这一刻起,动态装入器在寻找共享库时会查看你在 /etc/ld.so.conf 中指定的所有新目录。

    1. /lib/usr/lib 里面加东西,是不用修改 /etc/ld.so.conf 的,但是完了之后要调一下 ldconfig ,不然这个 library 会找不到
    2. 想往上面两个目录以外加东西的时候,一定要修改 /etc/ld.so.conf ,然后再调用 ldconfig ,不然也会找不到
    3. 总之,就是不管做了什么关于 library 的变动后,最好都 ldconfig 一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

/etc/login.defs

设置用户账户限制的配置文件,对 root 用户无效

PASS_MAX_DAYS   90      # 用户的密码最长使用天数
PASS_MIN_DAYS   0       # 两次修改密码的最小时间间隔
PASS_MIN_LEN    7       # 密码的最小长度
PASS_WARN_AGE   9       # 密码过期前多少天开始提示
UID_MIN 1000            # 用户 ID 的最小值    这个代表你新建用户的 UID
UID_MAX 60000           # 用户 ID 的最大值
GID_MIN 500             # 组 ID 的最小值
GID_MAX 60000           # 组 ID 的最大值
ENCRYPT_METHOD SHA512   # 用 SHA512 加密密码

/etc/pam.d/

PAM(Pluggable Authentication Modules)可动态加载验证模块,因为可以按需要动态的对验证的内容进行变更,所以可以大大提高验证的灵活性。

更多内容参考 PAM模块

/etc/pam.d/su

su 命令配置

etc/passwd

/etc/passwd 是用户数据库,其中的域给出了用户名、加密口令和用户的其他信息

/etc/passwd 文件中的每个用户都有一个对应的记录行,记录着这个用户的一下基本属性。/etc/passwd 只有系统管理员才可以修改的,该文件对所有用户可读。

更多内容参考 认证

/etc/profile

当一个用户登录 Linux 系统或使用 su - 命令切换到另一个用户时,也就是 Login shell 启动时,首先要确保执行的启动脚本就是 /etc/profile .从 /etc/profile.d 目录的配置文件中收集 shell 的设置.如果你有对 /etc/profile 有修改的话必须得 source 一下你的修改才会生效,此修改对每个用户都生效.

敲黑板:只有 Login shell 启动时才会运行 /etc/profile 这个脚本,而 Non-login shell 不会调用这个脚本.

一些重要的变量就是在这个脚本文件中设置的,含义如下:

  • PATH: 预设可执行文件或命令的搜索路径.
  • USER: 用户登录时使用的用户名.
  • LOGNAME: 其值为 $USER.
  • HOSTNAME: 所使用的主机名.
  • MAIL: 存放用户电子邮件的邮箱(实际上是一个 ASCII 码文件).
  • HISTSIZE: 历史记录的行数.
  • INPUTRC: 存放的是针对键盘热键的信息(也是一个 ASCII 码文件).

/etc/securetty

/etc/securetty 文件允许你规定 root 用户可以从那个 TTY 设备登录.

登录程序(通常是 /bin/login)需要读取 /etc/securetty 文件.

列出来的 tty 设备都是允许登录的,注释掉或是在这个文件中不存在的都是不允许 root 登录的.

  • pts 是 pesudo tty slave,是伪终端的 slave 端
  • console 好像是指当前的控制台(或者监视器),比如说你 Ctrl+Alt+x,然后 echo "123" > /dev/console,123 总会显示在你的 monitor 上.
  • vc 是 virtual console,也可以理解为虚拟的监视器,当你 Ctrl+Alt+x,就会切换到 vc x,在 /dev 下面没有直接对应的设备文件,不过你如果尝试 echo "123" > /dev/vcs1, 你在 monitor 上也能看到,不过要切换到对应的 vc.
  • vt 指的是 virtual terminal,虚拟终端

/etc/shadow

/etc/shadow 是在安装了影子(shadow)口令软件的系统上的影子口令文件

在linux中,口令文件在 /etc/passwd 中,早期的这个文件直接存放加密后的密码,前两位是"盐"值,是一个随机数,后面跟的是加密的密码。为了安全,现在的 linux 都提供了 /etc/shadow 这个影子文件,密码放在这个文件里面,并且是只有 root 可读的。

Unix 系统最初是用明文保存密码的,后来由于安全的考虑,采用 crypt() 算法加密密码并存放在 /etc/passwd 文件。现在,由 于计算机处理能力的提高,使密码破解变得越来越容易。/etc/passwd 文件是所有合法用户都可访问的,大家都可互相看到密码的加密字符串,这给系统 带来很大的安全威胁。现代的 Unix 系统使用影子密码系统,它把密码从 /etc/passwd 文件中分离出来,真正的密码保存在 /etc/shadow 文件中,shadow 文件只能由超级用户访问。这样入侵者就不能获得加密密码串,用于破 解。使用 shadow 密码文件后,/etc/passwd 文件中所有帐户的 password 域的内容为"x",如果 password 域的内容为"*",则 该帐号被停用。使用 passwd 这个程序可修改用户的密码。

更多内容参考 认证

/etc/sudoers

/etc/sudoers 文件以及 /etc/sudoers.d/ 目录下的文件主要是用来控制用户的访问权限的

当用户执行 sudo 时,系统会主动寻找 /etc/sudoers 文件,判断该用户是否有执行 sudo 的权限

  • 确认用户具有可执行 sudo 的权限后,让用户输入用户自己的密码确认
  • 若密码输入成功,则开始执行 sudo 后续的命令

/etc/sudoers 文件设置为允许用户在不输入该用户的密码的情况下使用所有命令

%表示用户组,!表示禁止执行

如设置允许 wheel 用户组中的用户在不输入该用户的密码的情况下使用所有命令

%wheel  ALL=(ALL)   NOPASSWD: ALL

FOO 组可以从任何主机登陆,并且可以用 sudo -u 用户 不用输入密码执行任何命令,但是不能呢个执行 /usr/sbin 下的命令

%FOO    ALL=(ALL)   NOPASSWD: ALL,!/usr/sbin/

允许 users 用户组中的用户像 root 用户一样使用 mount、unmount、chrom 命令

%users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

允许users用户组中的用户像root用户一样使用shutdown命令

%users  localhost=/sbin/shutdown -h now

让普通用户 test 具有 / etc/init.d/nagios 脚本重启的权限

test    ALL=NOPASSWD:/etc/init.d/nagios restart

针对 MySQL 数据库的设置,让 test 组中的 test 用户具备 / etc/init.d/mysqld 的权限

groupadd test
useradd -g test -m -d /home/test -s /bin/bash test
passwd test

visudo
test ALL=(ALL)  /etc/init.d/mysqld

针对 tomcat 的设置,让 test 组中的 test 用户具备 tomcat 操作的权限

groupadd test
useradd -g test -m -d /home/test -s /bin/bash test
passwd test

visudo
test ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh

更多内容参考 认证

/etc/ntp.conf

ntp 服务配置

# 服务器地址
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org

# 记录上次的 NTP server 与上层 NTP server 联接所花费的时间
driftfile /etc/ntp/drift

# 设置默认策略为允许任何主机进行时间同步
restrict default ignore

# 设置允许访问此时间服务器的时间服务的 IP 地址
# 根据自己实际情况配置
restrict 127.0.0.1   
restrict 192.168.10.2                           # 指定某台机器时间同步
restrict 192.168.0.0 mask 255.255.255.0         # 允许 192.168.0.0/254 子网内主机时间同步
restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap   # 允许任何主机跟进行时间同步

# 指定阶层编号为 10,降低其优先度。
fudge 127.127.1.1 stratum 10

# 设置 ntp 日志的 path
statsdir /var/log/ntp/

# 设置 ntp 日志文件
logfile /var/log/ntp/ntp.log

/home

用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的. 比如用户 user 的主目录就是 /home/user,可以用 ~user 表示;


/lib

这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件.几乎所有的应用程序都需要用到这些共享库.

/lib/modules

各不同版本核心的模组


/lost+found

这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件.


/media

linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下.


/mnt

系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了.


/opt

这是给主机额外安装软件所摆放的目录.比如你安装一个 ORACLE 数据库则就可以放到这个目录下.默认是空的.


/proc

这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息.这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件.

/proc/self/

我们都知道可以通过 /proc/$pid/ 来获取指定进程的信息,例如内存映射、CPU 绑定信息等等.如果某个进程想要获取本进程的系统信息,就可以通过进程的 pid 来访问 /proc/$pid/ 目录.但是这个方法还需要获取进程 pid,在 fork、daemon 等情况下 pid 还可能发生变化.为了更方便的获取本进程的信息,linux 提供了 /proc/self/ 目录,这个目录比较独特,不同的进程访问该目录时获得的信息是不同的,内容等价于 /proc/本进程 pid/.进程可以通过访问 /proc/self/ 目录来获取自己的系统信息,而不用每次都获取 pid.

/proc/[pid], 当查看当前进程的时候可以用 /proc/self 代替

  • cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
  • cwd — 指向当前进程运行目录的一个符号链接
  • environ — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示

/root

该目录为系统管理员,也称作超级权限者的用户主目录.

/root/anaconda-ks.cfg

系统安装的时候生成的一个文件,通过这个文件可以修改成自动安装的脚本,用于自动安装同样配置的系统.这个配置文件经修改之后使用 Kickstart 来自动安装大量同样的操作系统,


/run

是一个临时文件系统,存储系统启动以来的信息.当系统重启时,这个目录下的文件应该被删掉或清除.如果你的系统上有 /var/run 目录,应该让它指向 run.

转到 /run。如果你使用 df 来检查它,你会看到这样的输出:

> cd /run
> df -k .
Filesystem     1K-blocks  Used Available Use% Mounted on
tmpfs             609984  2604    607380   1% /run

它被识别为 “tmpfs”(临时文件系统),/run 中的文件和目录没有存储在磁盘上,而只存储在内存中。它们表示保存在内存(或基于磁盘的交换空间)中的数据,它看起来像是一个已挂载的文件系统,这个可以使其更易于访问和管理。


/sbin

s 就是 Super 的意思,这里存放的是系统管理员使用的系统管理程序.


/selinux

这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 selinux 相关的文件的.


/srv

该目录存放一些服务启动之后需要提取的数据.如 www 服务需要访问的网页数据存放在 /srv/www 内.


/sys

因为 UEFI 系统会将其固件、变量和设置映射到根目录下的 /sys 分区里面,所以,如果在 UEFI 环境中清除根目录下的所有内容,也会同样清除 /sys ,这将可能会导致你丢失 UEFI 的固件设置,从而使设备变砖。

/sys/devices/system/cpu/vulnerabilities/

CPU 漏洞修复的文件


/tmp

这个目录是用来存放一些临时文件的.


/usr

这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录.

/usr/etc

存放配置文件

/usr/games

存放游戏和教学文件.

/usr/include

开发和编译应用程序所需要的头文件.

/usr/share

存放结构独立的数据.

/usr/bin

系统用户使用的应用程序.

/usr/sbin

超级用户使用的比较高级的管理程序和系统守护程序.

/usr/share/man , /usr/share/info , /usr/share/doc

手册页、GNU信息文档和各种其他文档文件.

/usr/lib

程序或子系统的不变的数据文件,包括一些 site-wide 配置文件,名字 lib 来源于库(library), 编程的原始库存在 /usr/lib 里.

/usr/local

本地安装的软件和其他文件放在这里,/usr/local/bin 存放本地增加的命令,/usr/local/include 存放本地增加的库文件.

/usr/src

存放程序的源代码,linux 内核的源代码存放在 /usr/src/kernels .


/var

这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下.包括各种日志文件.

这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里.

/var/catman

当要求格式化时的 man 页的 cache.man 页的源文件一般存在 /usr/man/man* 中;有些 man 页可能有预格式化的版本,存在 /usr/man/cat* 中.而其他的 man 页在第一次看时需要格式化,格式化完的版本存在 /var/man 中,这样其他人再看相同的页时就无须等待格式化了. (/var/catman 经常被清除,就象清除临时目录一样.)

/var/lib

系统正常运行时要改变的文件.

/var/local

/usr/local 安装的程序的可变数据(即系统管理员安装的程序).注意,如果必要,即使本地安装的程序也会使用其他 /var 目录,例如 /var/lock .

/var/lock

锁定文件.许多程序遵循在 /var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件.

/var/log

各种程序的 Log 文件,特别是 login (/var/log/wtmp log 所有到系统的登录和注销) 和 syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件) 经常不确定地增长,应该定期清除.

/var/run

保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息.

/var/spool,/var/mail, /var/news

打印队列和其他队列工作的目录.每个不同的 spool 在 /var/spool 下有自己的子目录,例如,用户的邮箱在 /var/spool/mail 中.

/var/tmp

/tmp 允许的大或需要存在较长时间的临时文件. (虽然系统管理员可能不允许 /var/tmp 有很旧的文件.)


inode

inode 译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是 inode,另一部份是 block,block 是用来存储数据用的.而 inode 呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等.inode 为每个文件进行信息索引,所以就有了 inode 的数值.linux 操作系统下可以使用 ls -id 命令来查看文件或者目录的 inode 值,一般"root"目录的 inode 值为 2,一个分区挂载到一个目录下时,这个"root"目录的 inode 值为 2


Source & Reference