3.1用户配置文件和密码配置文件
用户的配置文件在/etc/passwd;文件权限见下图:
用户的配置文件/etc/passwd内的每一行代表一个用户。用户又划分三类,如下:
第一类 超级用户(系统管理员)
root UID=0,GID=0 也可以认为UID=0的用户就是超级用户
第二类 虚拟用户
存在Linux系统中,满足文件或程序运行需要,而创建的 特点是不能登录,不能直接使用,类似傀儡
UID与GID范围 1-999 /etc/passwd用户配置文件对应用户名的结尾基本以/sbin/nologin(不能被shell 解析登录的)
第三类 普通用户
超级用户(管理员)创建生成的用户 UID与GID是以1000开始的
注意: root创建用户普通用户是可以指定UID的。不允许和已有的用户UID相同。
/etc/passwd是由 “ :” 分割7个字段,每个字段的含义如下:
1. 用户名(如第一行中的root就是用户名):代表用户账号的字符串。用户名字符可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。
2.口令(passwd):存放的就是该账号的口令,为什么是 ‘x’ 呢?早期的unix系统口令确实是存放在这里,但基于安全因素,后来就将其存放到 ‘/etc/shadow’ 中了,在这里只用一个 ‘x’ 代替。现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。
3.用户标识号(UID):这个数字代表用户标识号,也叫做uid。系统识别用户身份就是通过这个数字来的,0就是root,也就是说你可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。通常uid的取值范围是0~65535(但实际上已经可以支持到4294967294),0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始,如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于500的。
4. 组标识号(GID):表示组标识号,也叫做gid。这个字段对应着/etc/group 中的一条记录,其实/etc/group和/etc/passwd基本上类似。
5.注释说明,该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等。不过,当你使用finger的功能时就会显示这些信息的
6. 用户的家目录,当用户登录时就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,这个字段是可以自定义的,比如你建立一个普通用户test1,要想让test1的家目录在/data目录下,只要修改/etc/passwd文件中test1那行中的该字段为/data即可。
7.shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh, csh, ksh, tcsh, bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash.
用户密码配置文件在/etc/shadow;文件权限见下图:
/etc/shadow和etc/passwd是一一对应的,这个文件是专门用来控制用户的密码的,也用冒号分割成9段:
- 用户名,跟/etc/passwd对应。
- 用户密码,这个才是该账号的真正的密码,不过这个密码已经加密过了,但是有些黑客还是能够解密的。所以,该文件属性设置为000,但是root账户是可以访问或更改的。
- 上次更改密码的日期,这个数字是这样计算得来的,距离1970年1月1日到上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是 ‘365 x (2012-1970) + (2012-1970)/4 + 1 = 15341’. 因为如果是闰年,则有366天。
- 要过多少天才可以更改密码,默认是0,即不限制。
- 密码多少天后到期。即在多少天内必须更改密码,例如这里设置成30,则30天内必须更改一次密码,否则将不能登录系统,默认是99999,可以理解为永远不需要改。
- 密码到期前的警告期限,若这个值设置成7,则表示当7天后密码过期时,系统就发出警告告诉用户,提醒用户他的密码将在7天后到期。
- 账号失效期限。你可以这样理解,如果设置这个值为3,则表示:密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了。
- 账号的生命周期,跟第三段一样,是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号作废。
- 作为保留用的,没有什么意义。
3.2 用户组管理
查看用户组文件:/etc/group
/etc/group和/etc/passwd不太一样,没有完全对应,/etc/passwd有的/etc/group
因为默认创建用户的同时也会创建跟用户名一样的组,字段含义和/etc/passwd类似
查看用户组密码存放的配置文件:/etc/gshadow
/etc/shadow对应的,有一个/etc/gshadow ,它是组的密码的配置文件,几乎不动它
以上关于用户与用户组相关的配置文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),系统都会主动帮助用户备份。备份的名称是以配置文件名结尾处加上减号”-”。如图:
既然提到了用户组,下面说一下怎么增、删用户组:
groupadd 用户组名 增加用户组
groupadd -g GIU 用户组 增加用户组并给新增用户组指定GID (指定GID不可以和已经存在的相同)
groupdel 用户组名 删除已经存在不需要的用户组 (删除用户组,用户组内没有用户)
3.3用户管理
useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
-d<登入目录>:指定用户登入时的启始目录
-g<群组>:指定用户所属的群组,也可以是GID号
-G<群组>:指定用户所属的附加群组 也可以是GID号
-M:不要自动建立用户的登入目录;
-u<uid>:指定用户id
-s<shell>:指定用户登入后所使用的shell
useradd -d 用户家目录 用户名
特殊说明: 家目录可以不事先存在,自动创建,指定用户家目录。
useradd -g 用户组名或GID 用户名
useradd -G 用户组名或GID 用户名
useradd -M 用户名
特殊说明: 不创建用户家目录,但是在/etc/passwd用户配置文件显示了用户家目录。实质没有用户家目录
useradd -u UID 用户名
特殊说明: 没有指定用户的GID。指定用户的UID后GID默认也会和UID 相同。
还有指定的用户UID时,对应的GID已经被占用,才会显示UID与GID不同。下图示:
useradd -s shell类型 用户名
特殊说明: shell类型很多种,/bin/shutdown不可使用的, /sbin/nologin 不让用户远程或本地登录,常规普通用户创建使用的shell类型是/bin/bash
在CentOS中 useradd 等同于assuser
3.4 usermod命令
选项-u 更改用户的UID。例:usermod -u 1000 xiaosan 将用户xiaosan的UID更改为1000。
选项-g 更改用户的GID(只能指定一个已存在的组,且最多一个)。例:usermod -g 1000 xiaosan 将用户xiaosan的用户组更改为1000。
选项-G 为用户增加扩展组,在使用,分割时可以同时扩展多个组。例:
选项-d 表示为用户自定义家目录。
选项-s 指定用户的shell,默认为/bin/bash,可以设定为/sbin/nologin 禁止登陆。例:usermod -s /bin/bash xiaosan 解除xiaosan用户禁止登陆。
选项-L 锁定用户
选项-U 解锁用户
命令id查看用户的uid和gid等信息
3.5 用户密码管理
命令passwd更改对应用户的密码
命令passwd -l 锁定用户密码,锁定的用户密码,会在/etc/shadow的第二段密码前加注!!
命令passwd -u 解锁用户密码
命令passwd --stdin 更改用户密码时,可以只输入一次并明文显示密码。
命令echo “111222” |passwd --ssdin 用户名,“|”可以将前面的命令输出的结果传递给后面的命令,使得passwd修改密码直接成功。
命令echo -e “11112222\n11112222" |passwd 用户名, 可以生成一个换行的结果直接修改密码。(-t可以分割输出结果)
3.6 mkpasswd命令
使用mkpasswd前需要先安装 yum install -y expect工具
命令mkpasswd 可以生成一个随机密码
命令mkpasswd -l 12 -s 3 生成一个12个(-l)字符串并且包含3个(-s)特殊符号的密码。如图:
3.7 su命令
命令su - 可以切换至指定用户及用户环境。
使用id命令可以查询当前用户及信息。
命令su也可以切换到指定用户但不会切换当前的环境。
使用 su -c “命令” +用户名 可以使用指定用户名权限执行命令。如图:在root用户下,使用xiaosan创建1.txt文件。
当指定用户未创建用户家目录而无法登陆时可通过以下方式创建家目录。
ls -la /etc/skel/ 在该文件下有家目录文件的模板。
使用mkdir 在/home/目录下创建家目录(家目录为用户名称)
使用cp命令将/etc/skel/下的模板复制到新建的用户家目录下。
使用chown - R命令更改用户家目录及目录下子文件的所属用户和所属组。
3.8 sudo命令
sudo可以使一个普通用户拥有root用户的权限去执行一些指定命令。
命令sudo+指定命令 使用配置文件中添加给普通用户的指定命令
命令visudo实际是在使用vi编辑器编辑/etc/sudoers的配置文件,在修改后并会检测错误(而vi /etc/sudoers则不会提示)。
在vi下使用:set nu可以显示文件的序列号。
在该位置可以添加指定命令(root权限)给普通用户使用,必须使用绝对路径并用逗号和空格分割。如图:
在指定命令前,添加NOPASSWD: 可以让用户使用sudo时不用输入密码。如图:
在该位置可以添加命令的别名,例:图示 AMING_CMD就是ls,mv,cat的别名。
在该位置可以对用户组设置root权限命令。
在该位置可以设置一个虚拟组和虚拟组下的用户。
3.9 限制root远程登录
使用vi /etc/ssh/sshd_config 中将Root用户远程登录改为no(使用/Root搜索,并将#去除,修改为no后保存退出),然后使用 systemctl restart sshd.service重启服务。
visudo设置一个用户的Alias(别名)
设定规则,为这几个用户添加,root用户的su权限。
此时,便可不使用密码直接使用命令 sudo su - 登录root用户。
————————————————————————————————————————————————————————————————————————————————
课后笔记
命令chattr格式 : chattr [+-=] [Asaci] [文件或者目录名],其中,+ - =分别表示增加、减少和设定。
a:增加该属性后,表示只能追加不能删除,非root用户不能设定该属性
i:增加该属性后,表示文件不能删除、重命名、设定链接、写入以及新增数据
lsattr命令
概念:该命令用于读取文件或目录的特殊权限 格式:lsattr [-aRd] [文件/目录名] 选项: -a:类似于ls -a选项,目录里隐藏文件一同列出 -R:连同子目录的数据一并列出。 -d 查看目录本身
set uid
权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。比如passwd这个命令就具有该权限。当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码。
作用 :set uid的作用是保证普通用户临时拥有该命令所有者的身份。给一个文件设置成set uid,前提这个文件是一个二进制,可执行的文件。
**用法:**把一个二进制可执行文件的,所有者的权限上 +s 就添加上了set uid权限。
例如把ls命令设置成set uid 。 #chmod u+s /usr/bin/ls
chmod u-s /usr/bin/ls //去除set uid权限****
set_gid
set gid不仅能作用在文件上,还能作用在目录上。
权限说明: set gid权限可以作用在文件上(二进制可执行文件),也可以作用在目录上。当作用在文件上时,其功能和set,uid一样,它会使文件在执行阶段具有文件所属组的权限。目录被设置这个权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
作用:
当作用在 文件 上的时候 ,其作用和set uid是类似的,它可以让执行这个文件的普通用户临时拥有所属组的身份。
当作用在 目录 上的时候,创建子目录或子文件的所属组和该目录的所属组是保持一致的。
用法: 把一个二进制可执行文件的,所属组的权限上 +s 就添加上了set gid权限。
用在 文件上的时候 ,其作用和set uid是类似的,它可以让执行这个文件的普通用户临时拥有所属组的身份。
把ls命令设置成set gid 。 #chmod g+s /usr/bin/ls
stick_bit
可以理解为防删除位。文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新的文件。如果希望用户能够添加文件但不能删除该目录下其他用户的文件,则可以对父目录增加该权限。设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件。
**作用: * 防止别人删除自己的文件,root用户除外。
软链接: 也称为符号链接,即“symbolic links/soft links”,是一个通过名称指向另一个不同文件的特殊的文件类型,是一个单独的文件,有着不同于原文件(目标文件)的属性,相当于Windows系统中的快捷方式。当对软链接进行大多数操作(包括打开、读取、写入等等)时,系统内核会自动在软链接的目标文件上执行;但某些操作,例如删除,会直接对链接文件本身操作。
软链接特性:
- 软链接和目标文件不是同一个文件,节点号不同。
- 目标文件的删除操作会影响软链接文件。当链接文件被删除时,不会对目标文件产生影响;当删除目标文件/目录时,由于失去了目标指向,软链接会失效,变成死链。
- 能跨分区创建软链接。(使用命令 #hf -h 查看分区的大小是使用情况的时候,挂载点那一行就是分区。)
- 命令语法: ln[-s][来源文件][目的文件]
- 命令描述: 建立软链接
- 命令参数: -s 建立软链接时,必须要加上 -s 选项,如果不加 -s 选项就是建立硬链接。
硬链接
硬链接: 也即“hard link”,其本质为现有文件的另一个名字,因此硬链接和原文件是无法区分的。从技术上讲,它们共享相同的inode,而inode几乎包含文件的所有信息,包括指向数据块的直接/间接指针。
硬链接不支持目录,仅支持文件,不能跨分区,可删除,因为还有其他文件使用了inode
- 创建一个文件,这个文件和另外一个文件的inode号一样,那么这两个文件相互为硬链接文件。
- 只能对文件做硬链接,不能对目录做硬链接。
- 不能跨系统分区创建硬链接。
- 只能对已存在的文件进行创建。
- 删除一个硬链接文件并不影响其他有相同inode号的文件。
1.find命令
find命令通过指定查询的条件和索引,把相符的文件或目录列出来。
2.find命令的使用方法
语法:
find [路径] [选项] [索引]
2.1 根据文件名
- 根据文件名查找文件,通配符需要用引号引起来。
查找 /tmp 目录下 wang开头的文件。
find /tmp -name "wang*"
2.2 根据文件类型
- type:按文件类型查找。文件类型包括:b块设备。d目录。f一般文件。c字符文件。p管道文件。l链接文件。
查找 /tmp 目录下的普通文件
find /tmp -type f
2.3 根据时间
- 与天数有关的参数包括 atime ctime mtime
- 与分钟有关的参数包括 amin cmin min
atime (access time)访问时间 读取执行时更改。
ctime(change time)属性权限更改时间
mtime(modify time)内容更改时间 写入文件时更改。
以mtime为例。
- -mtime n:意思就是在n天之内。
查找24小时内的文件
find /tmp -mtime 0
- -mtime -n:意思就是在n天之内,含n天
找到三天和三天内的日志文件
find /var/log -mtime -3
- -mtime +n:意思就是在n天之前,不含n天
删除30天以前的日志文件。
find /var/log -mtime +30 |xargs rm
- -newer file:file为一个文件,列出比file新的文件
列出tmp目录下,创建修改file1之后的文件。
find /tmp -newer file1
2.4 根据用户和用户组
根据用户和用户组的权限查找
- -uid n:n为用户的uid
在tmp目录下找出所有uid为500的文件。
find /tmp -uid 500
- -username name :name为用户名
找出tmp目录下所有用户wang的文件。
find /tmp -username wang
- -gid n:n为用户的gid
同上
- -nouser :寻找文件的所有者不存在的文件
- -nogroup: 寻找文件所属组不存在的文件
找到不正常的文件
find / -nouser
2.5 根据文件权限和大小
- -size [+-] xx:查找比xx要大(+)或小(-)的文件。(c代表byte,k代表1024bytes)
查找tmp目录下比file文件大的文件。
find /tmp -size +file
- 在 /tmp文件夹下, 查找一个文件大小小于10K的文件。
find /tmp -size -10K
- -perm mode:查找文件权限刚好等于mode的文件,
文件权限为-rwsrwsret的文件
find / -perm 7777 -type f
- -perm -mode:查找文件权限最少包括mode的文件,
查找rwxr--r--的文件,结果resr-xr-x的文件会被列出来。搜索的是0744 结果是4755
find / -perm -0744
- -perm +mode:查找文件权限包含任mode的文件
包含s或t的都会被列出来。
find -perm +7000
2.6 根据inode号
- -inum xxx:根据inode号查找inode号相同的文件。查找硬链接文件
查找出来1.txt的硬链接文件。
find /root/ -inum 33610734
3.find命令的特殊操作
3.1 -exec
- -exec command : command为其他命令,exec后面可接其他命令来处理查询的结果。
在/tmp目录下查找文件类型为一般文件,文件名包含t的,文件大小要求大于1k切小于3k的文件,并使用ls -l 来查看其权限
find /tmp -type f -name t* -size +1k -size -3k -exec ls -l {}\;
这个命令的意思:前面的条件搜到的文件。交给-exec 后面的命令处理。{}代表前面搜索的结果。;有特殊意义,所以需要转义。
[root@www ~]# find /var/log/ -type f -mtime +10 -exec cp {} {}.tmp \;
[root@www ~]# find /var/log/ -name *.tmp -exec rm {} \;
在/var/log/目录下10天之前的文件,拷贝为文件名.tmp
在/var/log/目录下,查找文件后缀名为.tmp的文件。然后删除。