Linux总结笔记2

Stella981
• 阅读 649

1.用户身份与能力

用户身份号码——即UID

超级用户UID0:系统的超级用户。

系统用户UID1-999:系统中系统服务由不同用户运行,更加安全,默认被限制不能登录系统。

普通用户UID1000~:即管理员创建的用于日常工作而不能管理系统的普通用户。

注意UID一定是不能冲突的,管理员创建的普通用户UID从1000开始(即便前面有闲置的号码)

用户组号码——即GID

为了方便管理同一组的用户还有用户组的概念,用户组号码——即GID(Group IDentification),在Linux系统中每个用户在建立时也会自动创建一个与其同名的基本用户组,这个基本用户组只有该用户一个人,而该用户以后被归纳入的用户组则叫做扩展用户组,因此一个用户只有一个基本用户组,而可以有多个扩展用户组,来满足日常的工作需要。

创建用户

使用这个命令来创建用户帐号,默认的用户家目录会被存放在/home目录中,默认的Shell解释器会是/bin/bash,默认会创建一个与该用户同名的基本用户组以及默认该用户不包含其他的扩展用户组,这些默认值可以依据下面的参数来自行修改:

useradd命令用于创建新的用户,格式为:“useradd [选项]  用户名”。

参数

作用

-d

指定用户的家目录(默认为/home/username)

-e

帐号有效截至日期,格式:YYYY-MM-DD.

-u

指定该用户的默认UID

-g

指定一个初始的用户基本组(必须已存在)

-G

指定一个或多个扩展用户组

-N

不创建与用户同名的基本用户组

-s

指定该用户的默认Shell

创建用户组

为了能够让系统中各个用户的权限指派更加的有效率,我们的工作中常常会把几个用户组设置成某个用户的扩展用户组,这样的话就可以针对于一类用户进行统一的权限安排的

groupadd命令用于创建群组,格式为:"groupadd [选项] 群组名"。

修改用户的属性

用户的信息被保存到了/etc/passwd文件中,我们可以直接用文本编辑器来修改其中的数值项目,也可以用usermod来修改已经创建的用户信息项目,诸如用户身份号码、基本/扩展用户组、默认终端等等:

usermod命令用于修改用户的属性,格式为“usermod [选项] 用户名”。

参数

作用

-c

填写帐号的备注信息

-d -m

-m与-d连用,可重新指定用户的家目录并自动把旧的数据转移过去。

-e

帐户到期时间,格式“YYYY-MM-DD”

-g

变更所属用户组

-G

变更扩展用户组

-L

锁定用户禁止其登陆系统

-U

解锁用户,允许其登陆系统

-s

变更默认终端

-u

修改用户的UID

修改用户的密码

该命令用于修改用户的密码、过期时间、认证信息等,普通的用户只有权限修改自身的系统密码,而超级用户则有权限来修改其他所有人的密码。

passwd命令用于修改用户的密码,格式为:“passwd [选项] [用户名]”。

参数

作用

-l

锁定用户禁止其登陆

-u

解除锁定,允许用户登陆。

--stdin

允许从标准输入修改用户密码,如(echo "NewPassWord" | passwd --stdin Username)

-d

使帐号无密码

-e

强制用户下次登陆时修改密码

-S

显示用户的密码状态

删除用户

如果我们确认以后不需要某个用户登录到本地系统中,则可以通过userdel命令来删除有关该用户的所有信息,默认该用户的家目录数据会被保留下来,而如果想要一起删除的话可以加上-r或-f参数即可:

userdel命令用于删除用户,格式为:“userdel [选项] 用户名”。

参数

作用

-f

强制删除用户,家目录与其相关文件

-r

同时删除用户,家目录与其相关文件

2.文件权限与归属

每个文件的类型不尽相同,并且可以用不同的符号来加以区分,常见的包括有

-:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件

-:普通文件权限解读:

可读权限就是能够读取该文件的实际内容

可写权限就是能够编辑、新增、修改文件的实际内容

可执行则代表能够运行一个脚本程序的权限

d:目录文件权限解读:

可读权限就是能够读取该目录内的结构和文件列表

可写权限就是能够更改目录内文件结构列表、新增、删除、重命名文件

可执行则代表进入该目录的权限

=======================================================

读(read),写(write),执行(execute)简写即为(r,w,x),亦可用数字(4,2,1)表示,如下表:

3.文件的特殊权限

SUID :让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)

这是一种针对于二进制程序设置的特殊权限,例如所有用户都可以执行用于修改用户密码的passwd命令,而用户密码是被保存在/etc/shadow文件中的,但只要仔细的看下就会发现这个文件的默认权限是000,也就是说除了不受系统限制的root以外的所有用户都没有查看或编辑该文件的权限,所以把passwd命令加上SUID特殊权限位,则可让普通用户临时获得程序所有者的身份,即以root用户的身份将变更的密码信息写入到shadow文件中。这个很像我们在古装剧中看过拿着尚方宝剑的钦差大臣,他手持尚方宝剑惩治贪官的时候实际上也就代表了皇上的权威,以便他完成了想要的结果,但并不意味着他就永远成为了皇上。所以这是一种特殊的权限授权下放的方法。

[root@kangvcar ~]# ls -l /etc/shadow ----------. 1 root root 1004 Jan 3 06:23 /etc/shadow [root@kangvcar ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29 2014 /bin/passwd

SGID 功能一:让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)

这种特殊权限就是参考SUID而设计的,不同点就是让程序的执行者获取的不再是文件所有者的临时权限,而是获取到文件的所有组的权限。举例来说,在早期的Linux系统中/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:

cr--r-----   1 root system 2,  1 Feb 11 2015  kmem

读者们看出问题了吗?除了root超级用户身份或属于system组成员外的所有用户都没有读取该文件的权限,但平时我们需要查看系统进程状态,为了让用户能够获取到系统状态信息,因此将用于查看系统进程状态的ps命令权限上增加了SGID特殊权限位:

-r-xr-sr-x   1 bin system 59346 Feb 11 2015  ps

这样的话因为ps命令被赋予了SGID特殊权限位,所以当用户执行了该命令,实际上临时获取到了有效用户组system的权限啦,能够顺利的读取设备文件啦

SGID 功能二:在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)

正如前面提到过每个文件都有其归属的所有者和所有组,而当我们创建或传送一个文件后,这个文件就会自动的归属于执行这个操作的用户。那么比如我们工作中需要设置一个部门内的共享目录,让所有组内的人都能够读取里面的内容,那么我们就可以创建部门共享目录后,将该目录设置上SGID特殊权限位,这样任何用户在里面创建的任何文件都会归属于本目录的所有组,而不再是自己的基本用户组。

[root@kangvcar ~]# cd /tmp [root@kangvcar tmp]# mkdir testdir [root@kangvcar tmp]# ls -ald testdir/ drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/ [root@kangvcar tmp]# chmod -Rf 777 testdir/ [root@kangvcar tmp]# chmod -Rf g+s testdir/ [root@kangvcar tmp]# ls -ald testdir/ drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/

这样我们设置好777权限以保证普通用户可以写入文件,并为该目录设置了SGID特殊权限位后,就可以切换至一个普通用户尝试在该目录创建文件,看看新建出来的文件是否会继承上级目录的所有组名称:

[root@kangvcar tmp]# su - kangvcar Last login: Wed Feb 11 11:49:16 CST 2015 on pts/0 [kangvcar@kangvcar ~]$ cd /tmp/testdir/ [kangvcar@kangvcar testdir]$ echo "kangvcar.com" > test [kangvcar@kangvcar testdir]$ ls -al test -rw-rw-r--. 1 kangvcar root 15 Feb 11 11:50 test

chmod 命令用于修改文件或目录的权限,格式为:"chmod [参数] 权限 文件或目录名称"。

chown 命令用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”。

注意:chmod和chown命令是对文件属性和权限修改最常用的命令,它们还有一个特别的共性,就是对于目录文件时需要加上大写参数-R来表示递归操作,即对目录内所有的文件进行整体操作的意思。

SBIT (Sticky Bit):只可管理自己的数据而不能删除他人文件(仅对目录有效)

设置SBIT特殊权限位了,当然也可以叫做特殊权限位之粘滞位。SBIT特殊权限位的设置目的和效果是不让其他人删除自己的文件,换句话说就是文件只能被所有者执行删除操作。在RHEL7系统中的/tmp作为一个共享文件的目录默认已经被设置了SBIT特殊权限位,因此这里面的文件其他人是不能乱删除的

其实文件能否被删除并不取决于自身的权限大小,而是看上级目录是否有写入权限,

4.文件的隐藏属性

chattr 命令用于设置文件的隐藏权限,格式为:“chattr [参数] 文件”。

使用chattr命令来设置文件的隐藏权限,如果想要将某个隐藏功能添加到文件上面,则使用+参数,如果想要将某个隐藏功能移出文件,则使用-参数。可供我们选择的隐藏权限功能非常丰富,常见的隐藏权限包括有:

参数

作用

i

将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。

a

仅允许补充(追加)内容.无法覆盖/删除(Append Only)。

S

文件内容变更后立即同步到硬盘(sync)。

s

彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。

A

不再修改这个文件的最后访问时间(atime)。

b

不再修改文件或目录的存取时间。

D

检查压缩文件中的错误。

d

当使用dump命令备份时忽略本文件/目录。

c

默认将文件或目录进行压缩。

u

当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。

t

让文件系统支持尾部合并(tail-merging)。

X

可以直接访问压缩文件的内容。

我们再次新建了一个普通文件并设置了不允许删除与覆盖(+a参数)权限后的效果:

[root@kangvcar ~]# echo "for Test" > kangvcar [root@kangvcar ~]# chattr +a kangvcar [root@kangvcar ~]# rm kangvcar rm: remove regular file ‘kangvcar’? y rm: cannot remove ‘kangvcar’: Operation not permitted

lsattr 命令用于显示文件的隐藏权限,格式为:“lsattr [参数] 文件”。

对于Linux系统中的隐藏权限必须用lsattr命令才能够看到,平时使用的ls之类的命令是看不出异样的:

[root@kangvcar ~]# ls -al kangvcar -rw-r--r--. 1 root root 9 Feb 12 11:42 kangvcar

一旦使用了lsattr命令后文件上被赋予的隐藏权限就会马上原形毕露出来,我们只需要按照提示的隐藏权限的类型(字母)来使用chattr命令去掉即可:

[root@kangvcar ~]# lsattr kangvcar -----a---------- kangvcar [root@kangvcar ~]# chattr -a kangvcar [root@kangvcar ~]# lsattr kangvcar ---------------- kangvcar [root@kangvcar ~]# rm kangvcar rm: remove regular file ‘kangvcar’? y

5.文件访问控制列表

setfacl 命令用于增加或者修改ACL规则,格式为:"setfacl [参数] 文件名称"。

ACL提供的是在所有者、所有组、其他人的读写执行权限外的特殊权限控制,使用setfacl命令可以让我们能够针对单一用户或用户组、单一文件或目录来进行读写执行权限的控制,其中对于目录文件需要使用递归-R参数,对普通文件需要使用-m参数,而如果想要删除某个文件的访问控制策划的话可以使用-b参数。于是我们来设置下用户在/root目录上面的权限吧:

[root@kangvcar ~]# setfacl -Rm u:kangvcar:rwx /root [root@kangvcar ~]# su - kangvcar Last login: Sat Mar 21 15:45:03 CST 2015 on pts/1 [kangvcar@kangvcar ~]$ cd /root [kangvcar@kangvcar root]$ ls anaconda-ks.cfg Downloads Pictures Public [kangvcar@kangvcar root]$ cat anaconda-ks.cfg [kangvcar@kangvcar root]$ exit

常用的ls命令是看不到访问控制列表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),而这就意味着这个文件已经被设置有了ACL访问策略啦:

[root@kangvcar ~]# ls -ld /root dr-xrwx---+ 14 root root 4096 May 4 2016 /root

getfacl命令用于显示文件的ACL规则,格式为:"getfacl 文件名称"。

[root@localhost ~]# getfacl /root getfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x user:kangvcar:rwx group::r-x mask::rwx other::---

6. su命令与sudo服务

su 命令可以让使用者在不注销的情况下顺畅的切换至其他用户

su命令与用户名之间有一个减号(-),这意味着完全的切换到新的用户,即把环境变量信息也变更为新的用户,而不保留原始的用户信息,这个是推荐必加的参数

sudo 服务用于给普通用户提供额外权利来完成原本超级用户才能完成的任务,格式为:“sudo [参数] 命令名称”。

参数

作用

-h

列出帮助信息。

-l

列出当前用户可执行的命令。

-u 用户名或UID值

以指定的用户身份执行命令。

-k

清空安全时间,下次执行sudo时需要再次密码验证。

-b

在后台执行指定的命令。

-p

更改询问密码的提示语。

总结来说sudo的特色功能有:

1:限制用户执行指定的命令。

2:记录用户执行的每一条命令。

3:配置文件(/etc/sudoers)提供集中的管理用户、权限与主机等参数。

4:验证过密码后5分钟(默认值)内无须再让用户验证密码,更加的方便。

按照下面的格式填写上制定的信息即可:

谁可以使用超级用户身份     允许使用sudo命令的主机=(以谁的身份执行命令)     可执行命令的列表

[root@kangvcar ~]# visudo 96 ## 97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 kangvcar ALL=(ALL) ALL
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这