马哥linux0803课堂笔记

课堂笔记

 

重定向的几种方式

标准输入 0 (stdin)

标准输出 1 (stdout)

标准错误 2 (stderr)

 

标准输入的重定向方法

cat < file

cat << string (多行重定向)

xxx

aaa

string结束

cat file | cat

 

标准输出的重定向

ls echo who hostname ifconfig 有输出的命令都属于标准输出的命令

比如cd就没有输出

 

标准输出重定向的方法

ls > file

ls >> file

避免覆盖的方法有命令可以

set –C 禁止覆盖

set +C 与上相反

只对当前shell有效,临时性

 

需要标准输入的命令

cat mail tr passwd chpasswd newusers

 

标准错误的重定向方法

cmd err 2>> file > file2

cmd &>> allfile

cmd >> allfile2 2>&1(必须放在最后)

 

管道

cmd | cmd2

管道的效果就是将前面命令的正确结果传送到cmd2来执行

 

处理错误输出的管道信息需要做以下操作

cmd1 |& cmd2

cmd1 2>&1 | cmd2 (版本较好,兼容性好)

支持多次管道

cmd1 | cmd2 | cmd3

 

tee命令的作用

 

cmd1 | tee file | cmd3

-a 选项可以附加信息到文件

将cmd1的标准输出也打印到终端,同时也将结果通过管道传送到cmd2

 

tr命令的作用用于转换字符及删除字符

-c 补集 set1

-d 删除

-s 压缩重复

-t 对应的被替换,和不带t有区别.位数上的区别

 

/etc/passwd 用户的配置信息

七个字段

username:password:UID:GID:comment(注释):homedir:shell

pwconv(默认本来就是)可以转换密码到passwd配置文件中

pwunconv 可以不转换密码到/etc/shadow

 

UID编号顺序

在我们创建用户的时候

在centos7中从1000开始

在centos6中从500开始

ID编号范围定义的配置文件在/etc/login.defs

还有其他的一些用户定义

创建系统用户是不会自动创建家目录

 

 

 

 

处于安全考虑.比如我们需要维护系统,不希望其他用户登录

我们可以使用一下方法来限制普通用户的登录

 

touch /etc/nologin

touch /run/nologin (与上面命令效果一样,但是run目录只有centos7有)

可以让普通用户不能登录,在文件中写入一些信息,也能在普通用户登录的界面显示

 

所有用户的影子配置文件,主要存放管理员和用户密码的信息

/etc/shadow

格式为

username:password(加密的密码):口令的更改时间:最短口令有效期(指多少天不能更改口令的时间):最长的口令有效期:警告提醒时间(提前几天通知):非活动时间(口令有效期到了,仍然不修改口令,将会账户):账户的有效期:保留字段

 

chage –d0 USER

passwd –e USER

这俩个命令可以迫使口令马上到期,下次登录必须修改口令

 

/etc/group

groupname:password:GID:groupmember(组成员)

/etc/gshadow

groupname:password:groupadminlist(组管理员):

 

groupmems –l –g group (显示组名)

groumems –d USER –g group 删除这个组的某个用户

 

组管理员不一定非要是组的成员,可以单独是组管理员

 

useradd

-u UID

-g primary 主组

-G secondary g1,g2 辅助组

-d 家目录路径(自动生成)

例 /testdir/user1

父目录必须存在,子目录可以不存在

-s 指定shell

-c comment 注释信息

-M 不创建家目录

-m 默认创建家目录

 

useradd –ou0 rooter2 可以创建管理员(系统认定管理员只认UID,删除这个账户只能修改配置文件信息中的UID)

 

usermod

-l 改新的用户名

-L 锁定用户(在配置文件口令中增加!就是锁定的意思)

-U 解锁用户

-e 指定他的口令过期时间

-m 移动家目录,搬家使用 (配合-d使用)

 

 

userdel

-r 删除家目录及邮箱

批量创建用户

newusers passwdfile(跟passwd格式一样,必须七个字段)

批量修改密码

chpasswd

例: cat file1 | chpasswd

chpasswd 交互式

user:passwd

ctrl+D 结束

 

文本格式

user:password

 

批量创建用户的家目录会有问题,家目录中的配置文件没有

我们需要手动去移动过来如下

etc/skel下是专门存放这些配置文件

cp –r /etc/skel/. /home/user

.的意思就是当前目录下所有文件(..表示父目录所有的文件)

cp –r `ls -A` /home/user 同样可以达到效果,但是必须在skel目录下.

 

passwd [OPTIONS] UserName :修改指定用户的密码,仅root用户权限

passwd :修改自己的密码

-l 锁定指定账户

-u 解锁指定账户

-e 强制用户下次登录修改密码

-n mindays:指定最短使用期限

-x maxdays:最大使用期限

-w warndays:提前多少天开始警告

-I inactivedays:非活动期限

–stdin : 从标准输入接受用户密码

例:echo “PASSWORD”| passwd –stdin USERNAME

passwd很多选项跟usermod 相同

 

chage命令的用法,命令可修改用户的密码策略

-d LAST_DAT 密码使用期限

-E –expiredat EXPIRE_DATE

-I –inactive INACTIVE

-m –mindats MIN_DAYS

-M –maxdays MAX_DAYS

-W –warndays WARN_DAYS

-l 显示密码策略

下一次登录强制重设密码

chage –d 0 USER

chage –m 0 –M 42 –W 14 –I 7 USER

chage –E 2016-09-10 USER

 

getent shadow USER 查询账户密码策略

 

组的管理

groupadd [OPTIONS] … group_name

-g GID :指明GID号;[GID_MIN,GID_MAX]

-r:创建系统组;

Centos 6: ID<500

Centos 7: ID<1000

 

组属性修改:groupmod

groupmod [OPTIONS] … group

-n group_name:新名字

-g GID :新的GID

 

组删除:groupdel

groupdel GROUP

 

修改辅助组可以使用命令groupmems

修改主组可以使用命令 usermod

查看辅助组在group配置信息中查看

查看主组在passwd配置信息中查看,也可以在gshadow配置信息中查看到主组信息

例:

将Group1 加入到USER1中当辅助组

usermod –aG USER1 Group1

G选项需要配合-a使用,否则将清空原有的辅助组

 

将user1作为user2的主组

usermod –g user1 user2

 

有主组的组不能删,没有主组有成员可以直接删除组

 

组密码:gpasswd

gpasswd [OPTIONS] GROUP

-a user:将user添加到指定组中

-d user:从指定组中移除用户user

-A user1,user2,…:设置有管理权限的用户列表

 

newgrp命令:临时切换基本组

如果用户不属于此组,则需要组密码

 

‘’强引用,例如在里面写命令或者其他,他都当成字符串

“”弱引用,例如在里面写命令和变量,他识别变量,但是不识别命令

弱引用,例如在里面写命令和变量,他都识别

 

set –C 禁止覆盖

set +C 可以覆盖文件

>| 强制覆盖

当前shell临时生效

 

用户的权限

 

linux下文件常用的三种权限

r:read

w write

x excute

 

文件的权限分配是根据程序所有者,所属组,其他

 

linux的安全模型

所有者,所属组,其他人

rwxrwxrwx

 

chown(change owner):更改所有者

chown可以同时修改所有者和所有组

chown own:grp file 两个都修改

chown :grp file 只修改所属组

chown own file 只修改所有者

 

chgrp(change group):更改所属组

 

chmod (change mode)修改模式

分为模式法和数字法

模式法

chmod who opt per file…

who:

u:所有者 g :所属组 o:其他  a:所有人(三种人都包括)

opt: +,-,=

per: r,w,x

例: chmod u=rwx file  是所有者拥有文件rwx权限

 

例:我们设置一个文件的所有者权限为无,如果文件的的所有者是wang,我们用wang用户登录,是对文件做不了任何操作的,但是我们可以修改文件的权限,因为文件的所有者是wang.

所以可以证明只要是文件的所有者,就可以对文件进行权限操作

 

还有一例子,将一个文件全部清除

chmod a= file

权限就成了———.

 

显示所有用户都不能对文件进行操作,但是并不能对root管理员有效,事实证明权限只对普通用户有效

 

如果将文件权限设置成—-w—-只有写的权限

 

对于文件的意义

read: 文本

write: 可修改内容,但不能删除文件本身

x:针对二进制程序或脚本

X:不会增加x(前提是本身无x权限)

 

对于目录的意义

read:可以查看dir内文件列表,但不能访问文件,不能cd,也不能查看文件的元数据

write:可以创建或删除dir中文件,需要配合x权限

x:可以进入dir,可以访问dir中文件

X:不会增加x(前提是本身无x权限)功能:当你在一个目录中需要统一增加x权限时,会检测目录中的情况,目录中的目录会添加x权限,文件本身有x权限也会不变,没有的就不会增加x权限.这样就能保证安全.

 

X需要配合递归选项

chmod –R a=rX dir/

 

数字法

— 000 0

–x 001 1

-w- 010 2

-wx 011 3

r– 100 4

r-x 101 5

rw- 110 6

rwx 111 7

例:

750: rwxr-x—

r-x-wx-w-:532

 

chmod –-reference file1 file2

功能就是file2参考file1的权限

新建文件和目录的默认权限

umask 命令

umask 默认显示umask值

umask u=rwx,g=rwx,o=rwx  同样可以设置默认的文件或目录的权限,显示的目录的,所以文件的默认权限是-1

-S 以字符形式显示默认的文件或目录的权限,显示的是文件的,所以目录的默认权限+1

-p 显示出umask值,(输出的值可被调用)并把前面的命令打出来,这个存在的意义是直接可以将信息附加写入到配置信息中.

 

文件和文件夹是共用一个umask的

 

更改新建文件或目录的权限的umask值可以通过修改家目录的.bashrc或.bash_profile配置文件来修改,普通用户和管理员的umask的定义信息则是在/etc/profile和/etc/bashrc配置文件中)

 

umask本质是从目录或文件上屏蔽掉最大权限相应的位,从而得出默认的权限

假设,umask是125,新建目录的文件得到值是642

其实真正的工作原理是这样的

110          110       110           这是本身文件的默认666

001          010       101           这是上面说到的值125

110         100      010这才是真正通过上面俩个值得到的结果

6           4        2    第二行0表示不屏蔽,1表示屏蔽掉,第一行就是最大权限.所以得到了这个值 110100010 rw-r—w-

 

公式

dir:777-umask

file:666-umask 有奇数加1,偶数保留

同上面那个例子,umask值是125,那么666-125=541,奇数加1就是642得到的结果和实验的结果是一样.

 

文件的公式:umask+default per(默认的权限)=666

文件为什么是666,因为如果像目录一样是777,就有可能得到的值就有执行权限,这么操作的目的就是为了安全着想.

目录的公式:umask+default per =777

 

umask值越大,权限越小

 

非特权用户的umask值默认是002

root的umask值是022

 

umask 原理

从目录或文件上屏蔽掉最大权限相应的位,从而得出默认权限

三种特殊权限

suid s

sgid s

sticky t

表现为sst

例 rwsrwsrwt

数字法

suid 4 来表示

例 chmod 4755 /bin/cat

 

三种常用权限:r,w,x user,group,other

 

进程也有所有者和所属组

s权限只对普通用户有意义,对root无作用

root的权限无限大

 

安全上下文

前提:进程有属主和属组;文件有属主和属组

1. 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

2. 启动为进程之后,其进程的属主为发起者;进程的属组为发起者的属组

3. 进程访问文件时的权限,取决于进程的发起者

a. 进程的发起者,同文件的属主:则应用文件属主权限

b. 进程的发起者,属于文件属组;则应用文件属组权限

c. 应用文件”其他”权限

 

suid

如果一个文件具有suid权限,普通用户运行他将会继承文件所有者的权限.

例: rws—— /bin/cat 具有suid权限,那么普通用户执行

cat /etc/shadow将会继承root权限打开这个文件

 

sgid

如果一个文件具有sgid权限,那么普通用户将会继承文件的属组权限.

sgid作用与目录上:

chmod 4755 file

chmod 2755 file

chmod 1755 file

4表示suid 2表示sgid 1表示sticky 6表示suid+sgid(但是程序一般应用了一个就不会应用第二个了) 7表示三种权限全部有

如果文件或者目录本身没有x权限,而我们加上特殊权限,就会显示错误状态,就是大写的S,S,T

三种权限全部在如果使用数字模式去掉权限将会失败,只能使用字符模式去掉

 

数字模式要删除s权限

 

sticky t 粘滞位

 

chattr

 

 

原创文章,作者:Kartik,如若转载,请注明出处:http://www.178linux.com/30151