标签:sel username 用户 egrep boot 可以登录 数据 soc touch
Linux系统中的文件或目录的属性主要包括:
下面我们看执行 ls -lih 命令的结果(共10列):
[root@oldboy oldboy]# ls -lhi total 32K 275427 -rw-r--r-- 1 root root 8 Sep 4 14:56 123.log 275423 -rw-r--r-- 1 root root 0 Sep 4 14:46 dd.tx 275576 drwxr-xr-x 3 root root 4.0K Oct 1 2019 ext 275695 -rw-r--r-- 1 root root 71 Sep 4 19:45 file.txt 275582 -rw-r--r-- 1 root root 0 Oct 1 2019 jeacen 275694 -rw-r--r-- 1 root root 101 Sep 4 18:30 nginx.conf 275583 -rw-r--r-- 1 root root 0 Oct 1 2019 oldboy 275424 -rw-r--r-- 1 root root 0 Sep 4 14:47 second 275578 drwxr-xr-x 2 root root 4.0K Oct 1 2019 test 275584 -rw-r--r-- 1 root root 0 Oct 1 2019 wodi.gz 275579 drwxr-xr-x 2 root root 4.0K Oct 1 2019 xiaodong 275580 drwxr-xr-x 2 root root 4.0K Oct 1 2019 xiaofan 275581 drwxr-xr-x 2 root root 4.0K Oct 1 2019 xingfujie 275585 -rw-r--r-- 1 root root 0 Oct 1 2019 yingsui.gz
索引节点inode | 文件类型 | 文件权限 | 硬链接个数 | 文件属主 | 文件所属用户组 | 文件大小 | 文件修改时间 | 文件名 |
---|---|---|---|---|---|---|---|---|
275581 | d | rwxr-xr-x | 2 | root | root | 4.0K | Oct 1 2019 | xingfujie |
文字解释:
硬盘要存储数据(房子要主人),首先要分区(隔断),然后格式化创建文件系统(装修),最后存数据。
Inode,中文意思是 索引节点(index node)。
在每个Linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘...)被格式化为ext4文件系统 (CentOS6.7)后,一般都有两部分:
Block 是用来存储实际数据用的,例如:照片,视频等普通文件数据。
而 inode 就是用来存储这些数据属性信息的(也就是 ls -l的结果),inode包含的属性信息包括
但是,inode 里面唯独不包含文件名。
Inode 除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode 的数值。
操作系统根据指令,即可通过 inode 的值最快的找到相对应的文件实体。
文件,inode,block之间的关系如下:
这就相当于,教室们门口贴一张纸(inode),有大家的位置信息,以及学生姓名,性别,座位就相当于block。
打个比方,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页内容,而inode就相当于这本书前面的目录。
一本书有很多内容,一个知识点可能有很多页,如果想查找某部分或某知识点的内容,我们一般先查书的目录,通过目录能更快的找到我们想看的知识点的内容。
虽然不太恰当,但还是比较形象的。
当我们用 ls 查看某个目录或文件时,如果加上 -i 参数,就可以看到 inode 节点了。
ls -li 查看目录下所有文件和目录的属性和inode节点:
[root@oldboy oldboy]# ll -i /oldboy total 32 275427 -rw-r--r-- 1 root root 8 Sep 4 14:56 123.log 275423 -rw-r--r-- 1 root root 0 Sep 4 14:46 dd.tx 275576 drwxr-xr-x 3 root root 4096 Oct 1 2019 ext 275695 -rw-r--r-- 1 root root 71 Sep 4 19:45 file.txt 275582 -rw-r--r-- 1 root root 0 Oct 1 2019 jeacen 275694 -rw-r--r-- 1 root root 101 Sep 4 18:30 nginx.conf 275583 -rw-r--r-- 1 root root 0 Oct 1 2019 oldboy 275424 -rw-r--r-- 1 root root 0 Sep 4 14:47 second 275578 drwxr-xr-x 2 root root 4096 Oct 1 2019 test 275584 -rw-r--r-- 1 root root 0 Oct 1 2019 wodi.gz 275579 drwxr-xr-x 2 root root 4096 Oct 1 2019 xiaodong 275580 drwxr-xr-x 2 root root 4096 Oct 1 2019 xiaofan 275581 drwxr-xr-x 2 root root 4096 Oct 1 2019 xingfujie 275585 -rw-r--r-- 1 root root 0 Oct 1 2019 yingsui.gz
查看指定某个文件的包括inode在内的所有属性的命令为:stat filename
[root@oldboy oldboy]# stat nginx.conf File: `nginx.conf‘ Size: 101 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 275694 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-09-04 18:30:51.437111190 +0800 Modify: 2019-09-04 18:30:51.422111642 +0800 Change: 2019-09-04 18:30:51.434111276 +0800
第1列inode值是 275694:查看一个文件或目录的inode,通过 ls命令的 -i 参数即可。
因为 inode 要存放文件的属性信息,所以 inode 是有大小的。
CentOS5 inode 的默认大小是128字节,而CentOS 6 inode 的默认大小是256 字节,inode的大小在分区被格式化创建文件系统之后就定下来了,格式化以后就无法更改inode大小了。格式化前可以通过参数指定 inode大小,但是一般工作环境没这个需求。
[root@oldboy oldboy]# dumpe2fs /dev/sda3|grep -i "Inode size" dumpe2fs 1.41.12 (17-May-2010) Inode size: 256
[root@oldboy oldboy]# dumpe2fs /dev/sda1|grep -i "inode size" dumpe2fs 1.41.12 (17-May-2010) Inode size: 128
[root@oldboy oldboy]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 462384 56099 406285 13% / tmpfs 127522 1 127521 1% /dev/shm /dev/sda1 51200 38 51162 1% /boot
查看的对应信息为:文件系统名,Inode总数量,使用的Inode数量,剩余的Inode剩余量,使用的百分比占比,挂载所在分区。
[root@oldboy oldboy]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.9G 1.5G 5.1G 22% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 190M 36M 145M 20% /boot
任何一项满了,都无法进行存储。
磁盘满的一个特征( no space left on device).
[root@oldboy oldboy]# dumpe2fs /dev/sda3|egrep -i ‘block count|inode count‘ dumpe2fs 1.41.12 (17-May-2010) Inode count: 462384 Block count: 1849088 Reserved block count: 92454 [root@oldboy oldboy]# dumpe2fs /dev/sda3|egrep -i ‘block size|inode size‘ dumpe2fs 1.41.12 (17-May-2010) Block size: 4096 Inode size: 256
当前的生产环境一般设置为4k。特殊的业务,如视频可以加大block大小。
rm `find . -inum 159004`
find . -inum 159004 -exec rm {} \;
所以,应该养成好习惯,先备份再操作,要能快速还原,不容易还原的,先通过多套测试环境测试,然后再操作。
企业面试题:一个100M(100000K)的磁盘分区,分别写入 1K 的文件或写入 1M 的文件,分别可以写多少个?
错误解答:1k的个数:100 x 1000=100000个,1M的文件个数:100/1=100个
正确答案:
假设 Block的默认大小为 4K,写入1k的文件的数量基本上就是block的数量:
假设 Block的默认大小为 4K,写入1M的文件的数量:
总的block数量/ 250 block = 存放1M的数量
磁盘空间多大,基本就可以写入100/1M数量,一般情况下inode和block都是足够的。
知识点:
企业面试题:一个100M(Block的总大小,个数和单个block大小有关)的磁盘分区,分别写入 0.5K 的文件,及写入 1M 的文件,分别可以写多少个?为什么?
答案相关知识点:
正确解答:
企业案例:如果向磁盘写入数据提示如下错误:No space left on device,通过 df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景,什么情况下会导致这个问题发生呢?
答案:
可能是inode数量被消耗尽了。
企业工作中邮件临时队列/var/spool/clientmqueue这里很容易被大量小文件占满导致No space left on device的错误。
Clientmqueue目录只有安装了sendmail服务,才会有,是sendmail邮件的临时队列。
CentOS5.8默认就会安装sendmail服务,CentOS6.6 默认没有sendmail。
Linux系统不同于Windows系统,两者的文件类型和文件扩展名也有很大的差异。
Linux系统中的文件类型和文件扩展名所代表的意义和Windows系统中是不同的。
在Linux系统中,我们一般通过应用程序或命令创建的文件,如file.txt, file.tar.gz,这些文件的扩展名不同,且要用不同的程序或命令来打开,但都是常规文件(也被称为普通文件)。
后面附带的后缀文件扩展名(.txt,.tar.gz),除了让曾经习惯windows的用户易读外,大多数对于Linux系统来说没有特别实际的意义,在Linux系统中也是为了易读,而Windows系统中的扩展名就是实实在在表示文件的类型格式。
例如:
在Linux系统中,可以说一切设备(包括目录、普通文件)皆为文件。
文件类型包含有:
当执行 ls -l 或 ls -al 命令后显示的结果中:
[root@oldboy oldboy]# ls -al total 40 drwxr-xr-x 7 root root 4096 Sep 4 19:45 . dr-xr-xr-x. 28 root root 4096 Sep 5 04:54 .. -rw-r--r-- 1 root root 8 Sep 4 14:56 123.log -rw-r--r-- 1 root root 0 Sep 4 14:46 dd.tx drwxr-xr-x 3 root root 4096 Oct 1 2019 ext -rw-r--r-- 1 root root 71 Sep 4 19:45 file.txt -rw-r--r-- 1 root root 0 Oct 1 2019 jeacen -rw-r--r-- 1 root root 101 Sep 4 18:30 nginx.conf -rw-r--r-- 1 root root 0 Oct 1 2019 oldboy -rw-r--r-- 1 root root 0 Sep 4 14:47 second drwxr-xr-x 2 root root 4096 Oct 1 2019 test -rw-r--r-- 1 root root 0 Oct 1 2019 wodi.gz drwxr-xr-x 2 root root 4096 Oct 1 2019 xiaodong drwxr-xr-x 2 root root 4096 Oct 1 2019 xiaofan drwxr-xr-x 2 root root 4096 Oct 1 2019 xingfujie -rw-r--r-- 1 root root 0 Oct 1 2019 yingsui.gz
第一列第2-10个字符(比如rw-r--r--)是用来描述文件权限的。
而一列的第一个字符就是描述文件类型的,比如上面结果中就有-, d两种类型。
文件类型标识符 | 英文名称 | 文件类型说明 |
---|---|---|
d | directory | 表示这是一个目录,如上文ext,在ext2fs中,目录是一个特殊的文件 |
- | regular file | 表示这是一个普通的文件,如上文的oldboy |
l | link | 表示这是一个符号链接文件,实际上它指向另一个文件 |
b | block | 表示块设备和其他的外围设备,是特殊类型的文件 |
c | character | 表示字符设备文件 |
s | socket | 表示socket文件 |
p | named pipe | 表示管道文件 |
find -type 的文件类型的参数:
File is of type c: b block (buffered) special c character (unbuffered) special d directory p named pipe (FIFO) f regular file l symbolic link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken. If you want to search for symbolic links when -L is in effect, use -xtype. s socket D door (Solaris)
[root@oldboy oldboy]# ls -l nginx.conf -rw-r--r-- 1 root root 101 Sep 4 18:30 nginx.conf
通过ls -l查看nginx.conf的属性,可以看到第一列内容为-rw-r--r--,值得注意的是第一个符号是-,在Linux中,以这样的字符开头的文件就表示普通文件。
这些文件一般是用相关的应用程序或系统命令创建,比如:
普通文件的删除方式可以使用 rm 命令。
windows下的doc,ppt,zip,jpg等格式的文档在Linux下都属于普通文件。
Linux下的二进制文件,各种服务的配置文件,如:/etc/exports,/etc/rc.local等都是纯文本文件。
普通文件(regular file):第一个属性为"-",按照文件内容,又大略可以分为:
补充:通过 file 命令可以查看文件类型。
[root@oldboy oldboy]# file nginx.conf nginx.conf: ASCII text [root@oldboy oldboy]# file ext ext: directory [root@oldboy oldboy]# file /var/log/wtmp /var/log/wtmp: data
执行 ls -ld 查看当前目录的目录属性:
[root@oldboy oldboy]# ls -ld drwxr-xr-x 7 root root 4096 Sep 4 19:45 .
我们在oldboy目录下执行 ls -ld 目录名 时,可以看到第一列内容为 drwxr-xr-x,这种开头带有 d 字符的文件就表示目录。
目录在Linux中是比较特殊的文件。
创建目录的命令可以用 mkdir 命令 或 cp命令(带-r 或 -a 参数),cp可以把一个目录复制为另一个目录。
删除目录用 rm -r 或 rmdir(删空目录才可以)命令。
提示:执行 ls -F的结果,在写脚本时可以直接区别目录和文件,注意,每个目录的后面多了斜线。
[root@oldboy oldboy]# ls -F 123.log ext/ jeacen oldboy test/ xiaodong/ xingfujie/ dd.tx file.txt nginx.conf second wodi.gz xiaofan/ yingsui.gz
在生产场景中,我们一般通过下面办法过滤出所有目录文件:
如果我们进入/dev 目录,列一下文件:
[root@oldboy dev]# ls -la /dev/tty crw-rw-rw- 1 root tty 5, 0 Sep 5 05:25 /dev/tty
我们看到/dev/tty 的属性是 "c",表示这是 字符设备文件。
字符设备就是串行端口的接口设备,如猫等串口设备。
[root@oldboy dev]# ll /dev/sda brw-rw---- 1 root disk 8, 0 Sep 4 21:25 /dev/sda
我们看到/dev/sda的属性是"b", 表示这是 块设备。
块设备就是存储数据供系统及程序访问的接口设备,如:硬盘,光驱等都属于块设备。
以上种类的文件,一般可用 mknod (mknod - make block or character special files)来创建,用 rm 来删除。
目前在最新的 Linux 发行版本中,我们一般不需要自己来创建 设备文件 了。
因为这些文件是和内核相关联的。
当我们启动 MySQL 服务时,会产生一个 mysql.sock 文件。这个文件的属性的第一个字符是 s。
.sock 文件也是一类特殊的文件,这类文件通常在网络之间进行数据连接,如:我们可以启动一个程序来监听客户端的请求,客户端可以通过套接字来进行数据通信:
mysql -uroot -ppass -S /data/3306/mysql.sock
这个就是mysql 数据库 客户端程序连接服务器端命令,通过套接字文件来和数据库服务器通信的例子。
符号链接文件 也被称之为 软链接文件
[root@oldboy /]# ls -l /bin/sh lrwxrwxrwx. 1 root root 4 Aug 30 07:19 /bin/sh -> bash
当我们查看文件属性时,第一个字符是‘l‘,这类文件标识链接文件(提示:上面的是软链接文件)。
[root@oldboy /]# ls -l /etc/rc.d/init.d /etc/init.d -d lrwxrwxrwx. 1 root root 11 Aug 30 07:19 /etc/init.d -> rc.d/init.d drwxr-xr-x. 2 root root 4096 Sep 5 01:05 /etc/rc.d/init.d
/etc/rc.d/init.d 是真实的文件,/etc/init.d指向的是/etc/rc.d/init.d
FIFO 也是一个特殊的文件类型,主要是解决多个程序同时访问一个文件所造成的错误,第一个字符为p。
FIFO是fifo - first-in first out的缩写。
一般来说,Linux中的文件是不需要扩展名的。
Windows中可执行文件扩展名结尾通常是.ext, .com, .bat,而在Linux中文件可否执行就是看权限位的 x 位是否会有 x,图片文件扩展名结尾通常是.jpg, .gif, .bmp, .png等。
在Linux中,虽然扩展名没什么实际意义,但是为了兼容windows,同时,便于我们大部分习惯了windows的用户区分文件的不同,所以,我们还是习惯通过扩展名来表示不同文件的类型。
Linux/Unix 是一个多用户、多任务的操作系统。
Linux是一个多用户,多任务的分时操作系统,如果要使用系统资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统。
这个账户和用户是一个概念,通过建立不同属性的用户,一方面,可以合理的利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
每个用户都有一个唯一的用户名和用户口令,在登录系统时,只有正确输入了用户名和密码,才能登入系统和相应的目录(除了密码验证外,还可以是密钥验证)。
在生产环境中,我们一般会为每个有权限管理服务器的运维人员分配一个独立的普通用户账号及8位(包含数字、字母、特殊字符)以上的密码,如oldboy。
该人员只能通过建立的这个账号登录到系统中进行维护,当需要超级用户权限时,可以通过"sudo 命名名"的方法来执行仅有root用户才允许执行的权限。
当然,sudo权限要尽量的小,还有,当运维人员人数不多时,如2-3个,也可以直接 su - 切换到超级用户root下,在执行相应的维护工作,在这里要特别提醒大家,维护时,如果不需要root权限,就不要进入root用户下操作,以减少误操作对系统带来的损失。
Linux系统中的用户组group,就是具有相同特征的用户user的集合。
不设定组的话,默认的组和用户名相同,uid和gid也相同
[root@oldboy ~]# id oldboy uid=500(oldboy) gid=500(oldboy) groups=500(oldboy) [root@oldboy ~]# id zoe uid=501(zoe) gid=501(zoe) groups=501(zoe)
在Linux系统中用户是分角色的,在Linux系统中,由于角色不同,权限和所完成的任务也不同;值得注意的是,对于Linux系统来说,用户的角色是通过UID和GID识别的;
特别是UID,在Linux系统运维中座中,一个UID是唯一标识一个系统用户的账号(相当于我们的身份证)。用户系统账号的名称(如oldboy)其实就是给人(管理员)看的,linux系统能够识别的仅仅是UID和GID这样的数字。
用户的UID就相当于我们的身份证一样,用户名就相当于我们的名字。
Linux系统下的账户文件主要有/etc/passwd, /etc/shadow, /etc/group,/etc/gshadow 四个文件。
useradd username 添加用户,会对/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow这四个文件进行改动。
[root@oldboy ~]# useradd beaty [root@oldboy ~]# tail -1 /etc/passwd beaty:x:502:502::/home/beaty:/bin/bash [root@oldboy ~]# tail -1 /etc/shadow beaty:!!:18144:0:99999:7::: [root@oldboy ~]# tail -1 /etc/group beaty:x:502: [root@oldboy ~]# tail -1 /etc/gshadow beaty:!::
/etc/passwd 文件中每行定义一个用户账号,有多少行就表示多少个账号,在一行中可以清晰地看出,各内容之间又通过":"号划分了多少个字段,共7部分,这7部分分别定义了账号的不同属性,passwd文件实际内容如下:
[root@oldboy ~]# head -5 /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
root | x | 0 | 0 | root | /root | /bin/bash |
---|---|---|---|---|---|---|
账号名称 | 账号密码 | 账号UID | 账号组GID | 用户说明 | 用户家目录 | shell解释器 |
登陆的解释器:
[root@oldboy ~]# echo $SHELL /bin/bash [root@oldboy ~]# cat /etc/shells # 前三个是常用的登录解释器 /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh
由于passwd文件必须要被所有的用户读,所以会带来安全隐患。而shadow文件就是为了解决这个安全隐患而增加的。
看/etc/shadow的文件属性,尤其是权限:
[root@oldboy ~]# ls -l /etc/shadow ---------- 1 root root 996 Sep 6 02:30 /etc/shadow
可以发现,/etc/shadow的读写执行权限都是关闭状态,其文件内容为:
[root@oldboy ~]# head -5 /etc/shadow root:$6$a3Nz7mPHQhejVvc8$ulRgApnmQBjLbliTkD7/9BCjx2Ysy/EY7FQ2vIySBmo44dMOvM8VOqV0HNOgMaor1iHqwCM.K/dSmhvdayoY..:18137:0:99999:7::: bin:*:15980:0:99999:7::: daemon:*:15980:0:99999:7::: adm:*:15980:0:99999:7::: lp:*:15980:0:99999:7:::
字段名称 | 注释说明 |
---|---|
账号名称 | 用户的账号名称 |
账号密码 | 用户密码,这是加密过的口令 |
最近修改密码的时间 | 从1970年1月1日起,到用户最近一次更改口令的天数 |
禁止修改密码的天数 | 从1970年1月1日起,到用户可以更改密码的天数 |
用户必须更改口令的天数 | 从1970年1月1日起,到用户必须更改密码的天数 |
警告更改密码的期限 | 在用户密码过期前多少天提醒用户更改密码 |
不活动时间 | 在用户密码过期之后到禁用账户的天数 |
失效时间 | 从1970年1月1日起,到用户被禁用的天数(useradd -f) |
标志 |
保留
|
比如:
我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的。
用户组的特性在系统管理中为系统管理员提供了极大的方便,但是安全性也是值得关注的,如:某个用户下有对系统管理有重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去。
字段名称 | 注释说明 |
---|---|
用户组名 | 该组的名称 |
用户组密码 | 通常不需要设置该密码,由于安全原因,该密码被记录在/etc/gshadow中,因此,显示为‘x‘。这类似/etc/shadow |
GID | 该用户组的ID |
用户组成员 | 加入这个组的所有用户账号 |
/etc/gshadow 是/etc/group 的加密咨询文件,比如用户组Group管理密码就是存放在这个文件。
/etc/gshadow 和 /etc/group 是互补的两个文件。
对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。
比如,我们不想让一些非用户组成员永远拥有用户组的权限和特定,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码:/etc/gshadow
格式如下:每个用户组独占一行:
[root@oldboy ~]# ls -l /etc/gshadow ---------- 1 root root 509 Sep 6 02:30 /etc/gshadow [root@oldboy ~]# head -5 /etc/gshadow root::: bin:::bin,daemon daemon:::bin,daemon sys:::bin,adm adm:::adm,daemon
默认是root用户,其UID和GID均为0。
root用户在每台unix/Linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限。
在生产环境中,一般会禁止root账号通过SSH远程连接服务器(保护好皇帝),当然了,也会更改默认的SSH端口(保护好皇宫),以加强系统安全。
企业工作中:没有特殊需求,应该尽量在普通用户下操作任务,而不是root。
在Linux系统中,UID为0的用户就是超级用户。但是通常不这么做,而是sudo管理提权,可以细到每个命令权限分配。
root比喻为皇帝,Root家目录就是皇宫。操作系统就是全国。
# 0 和 0 分别是UID 和 GID [root@oldboy ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
这类用户一般是由具备系统管理员root的权限的运维或系统管理人员添加的。
例如:
oldboy这类用户可以登录系统,但仅具备操作自己家目录中的文件及目录的权限,除此之外,还可以进入、或浏览相关目录(/etc, /var/log),但是无法创建、修改和删除;
普通用户:比喻皇帝的臣民,干坏事时,国家有法律管束你。 为普通用户授权sudo,封官。布衣也可以提权。
su -root,角色切换,农名起义,推翻皇帝,自己当皇帝。
sudo ls 授权、封官,尚方宝剑。可以为皇帝办事,有一定的权限,但还是自己。
与真实普通用户区分开来,这类用户最大的特点是安装系统后默认就会存在,且默认情况大多数不能登录系统,但是,他们是系统正常运行不可缺少的,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
例如:
系统默认的bin, adm, nobody, mail用户等。
由于服务器业务角色不同,有部分用不到的系统服务被禁止开机执行,因此,做系统安全优化时,被禁止开机启动的服务对应的虚拟用户也是可以处理掉的(删除或注释)
# 结尾是nologin的都是虚拟用户 [root@oldboy ~]# cat /etc/passwd|grep ‘nologin$‘ 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 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 games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin
虚拟用户角色傀儡:
linux安全优化:
UID整数范围 | 用户类型 | 具备该UID用户特性 |
---|---|---|
0 | 超级用户(皇帝) | 当用户的UID为0时,表示这个账号为超级管理员账号;如果要增加一个系统管理员账号的话,只需要将该账号的UID改成0即可。不建议这样做,用sudo替代 |
1-499 | 虚拟用户(傀儡) | 这个范围是保留给系统使用的UID,是为了防止认为建立账户的UID和系统的UID之间冲突,并没有其他特殊的含义。除了0之外,所有的UID在使用上没有任何区别 |
500-65535 | 普通用户(臣民) | 普通账户UID,当使用useradd username建立账户时,默认情况下UID就是从500开始的。我们可以随时指定UID来创建账户 |
Linux中每个文件或目录都有一组共9个基础权限位,每三个字符被分为一组,他们分别是:
[root@oldboy /]# ls -l total 118 drwxr-xr-x 3 root root 4096 Sep 4 15:42 app dr-xr-xr-x. 2 root root 4096 Aug 30 09:17 bin
最后一位的“.”和selinux的状态相关,selinux的开启状态下,创建的文件就有“.”,关闭状态下创建的文件就没“.”。
在Linux系统中,链接可分为两种:
ln 这个命令就是创建 链接文件的,在默认不带参数的情况下,执行 ln 命令创建的链接 是硬链接。
如果使用 ln -s 创建链接则为 软连接,前面文件类型为l(字母L)的是软连接。
实践直观命令演示理解:
硬链接是指通过索引节点Inode来进行链接。
在Linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Index Inode)简称Inode,即在系统中文件的编号。
在Linux文件系统中,多个文件名指向同一个索引节点(Inode)是正常且允许的。这种情况的文件就称为硬链接。
提示:硬链接文件就相当于文件的另外一个入口。
硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件存储,如 netapp存储中的快照功能就应用了这个原理,增加了一个快照就多了一个硬链接)。
为什么一个文件建立了 硬链接就会防止数据误删呢?
因为文件系统ext2的原理是,只要文件的索引节点还有一个以上的硬链接。
只删除其中一个硬链接(即仅仅删除了该文件的链接指向)并不影响索引节点本身和其它的链接(即数据文件实体并未被删除),只有当文件的最后一个链接被删除后,此时如果有新数据要存储到硬盘上时或者系统通过类似 fsck 做磁盘检查的时候。被删除文件的数据块及目录的链接才会被释放,空间被新数据占用并覆盖。 此时,数据就再也无法找回了。
也就是说,在Linux系统中,删除静态文件(没有进程调用)(目录也是文件)的条件是与之相关的所有硬链接文件均被删除(暂时这样理解即可,后文会讲和进程的占用也有关)。
示例:
# 创建文件a [root@oldboy oldboy]# echo 1 > a [root@oldboy oldboy]# ls -l a -rw-r--r-- 1 root root 2 Sep 5 18:58 a [root@oldboy oldboy]# cat a 1 # 创建a的硬链接b,两个互为硬链接 [root@oldboy oldboy]# ln a b [root@oldboy oldboy]# cat a 1 [root@oldboy oldboy]# cat b 1 # 查看a和b文件的属性,索引节点inode相同,都显示2个硬链接数 [root@oldboy oldboy]# ls -li a b 275727 -rw-r--r-- 2 root root 2 Sep 5 18:58 a 275727 -rw-r--r-- 2 root root 2 Sep 5 18:58 b [root@oldboy oldboy]# \rm -f a [root@oldboy oldboy]# ls -li a ls: cannot access a: No such file or directory # a 删除后,a的索引节点的另一个入口b仍然存在,文件内容仍然存在。 [root@oldboy oldboy]# ls -li b 275727 -rw-r--r-- 1 root root 2 Sep 5 18:58 b [root@oldboy oldboy]# cat b 1
硬链接知识小结:
软连接Soft Link 也称为 符号链接Symbolic Link。
Linux里的软链接文件就类似于 Windows系统中的快捷方式。
Linux里的软链接文件 实际上是一个特殊的文件,文件类型是 l。
软链接文件实际上可以理解为一个 文本文件,这个文件中包含有软链接 指向另一源文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接指向的源文件实体。
软链接原理图:
从oldboyfile_soft_link这个软链接文件进入,从软链接的inode找到对应的软链接的block。 软链接的block中存储着指向oldboyfile的源文件,读取源文件的inode,找到对应的block,读取block的数据内容。
文件内容的权限主要看源文件的权限。
查看软链接的value:
[root@oldboy newdir]# touch file [root@oldboy newdir]# ln -s file soft_file # 创建软链接 # 软链接和源文件的inode、文件类型和权限都不同 [root@oldboy newdir]# ls -li file soft_file 275516 -rw-r--r-- 1 root root 0 Sep 5 20:03 file 275730 lrwxrwxrwx 1 root root 4 Sep 5 20:03 soft_file -> file [root@oldboy newdir]# readlink soft_file file
软链接的创建:
ln -s 源文件 软链接文件
误区: 创建软链接 源文件是需要存在的,要创建的软链接文件是不能存在的,是要用 ln 命令创建的。
软链接知识小结:
操作示例:
[root@oldboy application]# mkdir /test/oldboy -p [root@oldboy application]# cd /test/oldboy [root@oldboy oldboy]# touch oldboyfile # 创建硬链接和软链接 [root@oldboy oldboy]# ln oldboyfile oldboy_hard_link [root@oldboy oldboy]# ln -s oldboyfile oldboy_soft_link # 显示文件属性 [root@oldboy oldboy]# ls -li total 0 275736 -rw-r--r-- 2 root root 0 Sep 5 21:35 oldboyfile 275736 -rw-r--r-- 2 root root 0 Sep 5 21:35 oldboy_hard_link 275737 lrwxrwxrwx 1 root root 10 Sep 5 21:36 oldboy_soft_link -> oldboyfile
[root@oldboy oldboy]# mkdir oldboydir # 无法创建目录硬链接 [root@oldboy oldboy]# ln oldboydir oldboydir_hard_link ln: `oldboydir‘: hard link not allowed for directory # 为目录创建软链接 [root@oldboy oldboy]# ln -s oldboydir oldboydir_soft_link [root@oldboy oldboy]# ls -li total 4 275736 drwxr-xr-x 2 root root 4096 Sep 5 21:55 oldboydir 275737 lrwxrwxrwx 1 root root 9 Sep 5 21:56 oldboydir_soft_link -> oldboydir
问:请问下面的目录的链接数为什么是3?
[root@oldboy oldboy]# ls -alid ../oldboy/ 275735 drwxr-xr-x 3 root root 4096 Sep 5 21:56 ../oldboy/
答案:
[root@oldboy test]# ls -ali /test/oldboy total 12 275735 drwxr-xr-x 3 root root 4096 Sep 5 21:56 . 275700 drwxr-xr-x 7 root root 4096 Sep 5 21:35 .. 275736 drwxr-xr-x 2 root root 4096 Sep 5 21:55 oldboydir 275737 lrwxrwxrwx 1 root root 9 Sep 5 21:56 oldboydir_soft_link -> oldboydir
根据显示,/test/oldboy/ 目录下有两个隐藏文件,‘.‘指向/test/oldboy/,互为硬链接。
还有一个子目录oldboydir,子目录下的隐藏文件‘..‘指向上一层目录,也就是/test/oldboy,也就是说,/test/oldboy/oldboydir/.. 与/test/oldboy/ 互为硬链接,所以总共是3个硬链接。
[root@oldboy test]# ls -alid /test/oldboy /test/oldboy/. /test/oldboy/oldboydir/.. 275735 drwxr-xr-x 3 root root 4096 Sep 5 21:56 /test/oldboy 275735 drwxr-xr-x 3 root root 4096 Sep 5 21:56 /test/oldboy/. 275735 drwxr-xr-x 3 root root 4096 Sep 5 21:56 /test/oldboy/oldboydir/..
注意:由于每一个子目录中都有一个‘..‘硬链接文件指向父目录,所以每增加一个子目录,硬链接数就+1。
[root@oldboy ~]# ll total 40 -rw-------. 1 root root 1073 Aug 30 07:22 anaconda-ks.cfg -rw-r--r--. 1 root root 22179 Aug 30 07:22 install.log -rw-r--r--. 1 root root 5890 Aug 30 07:21 install.log.syslog
第7,8,9列是时间(默认是修改时间mtime)。
用--time-style参数可以规范时间显示(格式化显示时间属性,可以做成别名):
[root@oldboy ~]# ls -l --time-style=long-iso /oldboy total 4 drwxr-xr-x 3 root root 4096 2019-09-05 22:17 ett [root@oldboy ~]# ls -l --time-style=full /oldboy total 4 drwxr-xr-x 3 root root 4096 2019-09-05 22:17:49.189994142 +0800 ett
用stat 查看文件的时间属性:
[root@oldboy ~]# stat /oldboy/ett File: `/oldboy/ett‘ Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 803h/2051d Inode: 275739 Links: 3 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-09-06 04:25:39.599000000 +0800 Modify: 2019-09-05 22:17:49.189994142 +0800 Change: 2019-09-05 22:17:49.189994142 +0800
# 创建time_test文件,atime,mtime和ctime都是一致的 [root@oldboy oldboy]# touch time_test [root@oldboy oldboy]# stat time_test File: `time_test‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 275701 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-09-06 04:54:58.612994186 +0800 Modify: 2019-09-06 04:54:58.612994186 +0800 Change: 2019-09-06 04:54:58.612994186 +0800 # 修改time_test文件内容,mtime和ctime一起发生变化(由于文件大小发生了变化,ctime也随之相应改变) [root@oldboy oldboy]# echo 1234556788gaga>time_test [root@oldboy oldboy]# stat time_test File: `time_test‘ Size: 15 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 275701 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-09-06 04:54:58.612994186 +0800 Modify: 2019-09-06 04:55:41.054000828 +0800 Change: 2019-09-06 04:55:41.054000828 +0800 # 仅访问读取time_test 文件内容,仅atime发生变化 [root@oldboy oldboy]# cat time_test 1234556788gaga [root@oldboy oldboy]# stat time_test File: `time_test‘ Size: 15 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 275701 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-09-06 04:57:12.595999043 +0800 Modify: 2019-09-06 04:55:41.054000828 +0800 Change: 2019-09-06 04:55:41.054000828 +0800 # 将time_test的属主和属组改为zoe,只有ctime发生变化 [root@oldboy oldboy]# chown zoe.zoe time_test [root@oldboy oldboy]# stat time_test File: `time_test‘ Size: 15 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 275701 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 501/ zoe) Gid: ( 501/ zoe) Access: 2019-09-06 04:57:12.595999043 +0800 Modify: 2019-09-06 04:55:41.054000828 +0800 Change: 2019-09-06 04:58:20.355991099 +0800
第10列,文件名不在文件inode里,而是在上级目录的block里。
标签:sel username 用户 egrep boot 可以登录 数据 soc touch
原文地址:https://www.cnblogs.com/zoe233/p/11919603.html