一、IO重定向(二)
1、tr 命令
tr – 转换和删除字符
tr [OPTION]... SET1 [SET2]
选项:
-c 或——complerment :取字符集的补集
[root@6 ~]# tr -c 'abc' '1' << end > abcdefghijklmn > end abc111111111111[root@6 ~]#
-d 或——delete :删除所有属于第一字符集的字符(可以用八进位制数代替);
[root@6 ~]# tr -cd '[1-9]' < a1 1234565678[root@6 ~]# [root@6 ~]# tr -d '\141' << end ##a的八进位制为141 > abcdr > end bcdr
-s 或—squeeze-repeats:把连续重复的字符以单独一个字符表示压缩
[root@6 ~]# tr -s 'se' << end > asssssssssssdeeeeeeeeeeeeef > end asdef
-t 或--truncate-set1:先删除第一字符集较第二字符集多出的字符
# echo abcde |tr -t 'abcde' 'xyz' ##-t,模式下,对第一字符集较第二字符集多的内容不做转换 xyzde # echo abcdef |tr 'abcde' 'xyz' ##一般情况下,第一字符集多的将按第二字符集最后一个字符处理 xyzzzf [root@6 ~]# tr 'abc' 'xyzw' << end ##当第二字符集比第一字符集多时,去掉第二字符集多的内容 > abcqsdfg123 > end xyzqsdfg123
特殊字符:
\r :^M
\n :$
# cat a.txt |tr -d '\r' ###将win中的文本转换为linux中的文本文件
2、从文件中导入STDIN
使用< 来重定向标准输入
某些命令能够接受从文件中导入的STDIN:
$ tr ‘a-z’ ‘A-Z’< /etc/issue
[root@6 ~]# tr '[:lower:]' '[:upper:]'< /etc/issue CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \M cat >
该命令会把/etc/issue 中的小写字符都转换成写写字符
tr –d abc < /etc/fstab 删除fstab 文件中的所有abc 中任意字符
按ctrl+d 离开,可以使用文件来代替键盘的输入
[root@7 ~]# cat > d abc def dhff ###ctrl+d退出,回到命令提示符 [root@7 ~]# cat d abc def dhff
#Cat > e < d
[root@7 ~]# cat d abc def dhff [root@7 ~]# cat > e < d [root@7 ~]# cat e abc def dhff
3、把多行发送给STDIN
使用“<< 终止词”命令从键盘把多行重导向给STDIN
直到 终止词 位置的所有文本都发送给STDIN
有时被称为就地文本(heretext)
# mail -s "Please Call" admin@magedu.com <<END
> Hi Wang,
> Zhang
> END
#echo "redhat"| passwd --stdin apple
[root@7 ~]# cat > c << end > my > name > is > lvasu. > end [root@7 ~]# cat c my name is lvasu.
4、管道
管道(使用符号“| ”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
将命令1 的STDOUT 发送给命令2 的STDIN ,命令2的 的
STDOUT 发送到命令3 的STDIN
STDERR 默认不能通过管道转发,可利用2>&1 或 或 |& 实现
最后一个命令会在当前shell 进程的子shell 进程中执行用来
组合多种工具的功能
ls | tr 'a-z' 'A-Z'
less :一页一页地查看输入:
$ ls -l /etc | less
mail:通过电子邮件发送输入:
$ echo "test email" | mail \
-s "test" user@example.com
lpr :把输入发送给打印机
$ echo "test print" | lpr -P printer_name
# echo abcdefg | tr 'a-z' 'A-Z'
[root@6 ~]# echo abcdefg | tr 'a-z' 'A-Z' ABCDEFG
# Xecho abcdefg 2>&1 | tr 'a-z' 'A-Z'
[root@6 ~]# Xecho abcdefg 2>&1 | tr 'a-z' 'A-Z' -BASH: XECHO: COMMAND NOT FOUND
# Xecho abcdefg |& tr 'a-z' 'A-Z'
[root@6 ~]# Xecho abcdefg |& tr 'a-z' 'A-Z' -BASH: XECHO: COMMAND NOT FOUND
5、重定向到多个目标(tee)
$ 命令1 | tee 名 文件名 | 命令2
把命令1 的STDOUT保存在文件名中,然后管道输入给命令2
使用:
保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出
[root@7 ~]# cat d |tee a.txt abc def dhff [root@7 ~]# cat a.txt abc def dhff
二、用户组(一)
1、基本知识
1.1介绍安全3A 资源分派:
Authentication :认证
Authorization :授权
Accouting|Audition :审计
1.2、用户user
令牌token,identity
Linux 用户:Username/UID
管理员:root, 0
普通用户:1-65535
系统用户:1-499 (CENTOS6 ), 1-999,对守护进程获取资源进行权限分配
登录用户:500 (CENTOS6 )+, 1000+交互式登录
查看用户信息命令:
#finger
[root@6 桌面]# finger root Login: root Name: root Directory: /root Shell: /bin/bash On since 二 8月 2 08:50 (CST) on tty1 from :0 6 hours 12 minutes idle On since 二 8月 2 08:52 (CST) on pts/0 from :0.0 4 hours 1 minute idle On since 二 8月 2 08:53 (CST) on pts/1 from 10.1.250.77 On since 二 8月 2 14:43 (CST) on pts/2 from 10.1.250.77 18 minutes 25 seconds idle New mail received 二 8月 2 09:48 2016 (CST) Unread since 一 8月 1 09:49 2016 (CST) No Plan.
1.3组group
Linux 组:Groupname/GID
管理员组:root, 0
普通组:
系统组:1-499, 1-999
普通组:500+, 1000+
###用户和组的ID和名字可以相同的
1.4、安全上下文 Linux 安全上下文 security context
运行中的程序:进程 (process)
以进程发起者的身份运行:
root: /bin/cat
mage: /bin/cat
进程所能够访问资源的权限取决于进程的运行者的身份
1.5、组的类别
Linux 组的类别:
用户的主要组( 主组):
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户:私有组
用户的附加组( 辅助组):
一个用户可以属于零个或多个辅助组
2、用户和组的配置文件及其格式
2.1、用户和组的配置文件及文件格式
Linux 用户和组的主要配置文件:
/etc/passwd :用户及其属性信息( 名称、UID 、主组ID 等)
login name :登录用名(wang)
passwd :密码 (x)
UID号 :用户身份编号 (1000)
GID :登录默认所在组编号 (1000)
GECOS :用户全名或注释
home directory录 :用户主目录 (/home/wang)
shell :用户默认使用shell (/bin/bash)
/etc/group :组及其属性信息
[root@7 ~]# getent passwd root root:x:0:0:root:/root:/bin/bash
/etc/shadow :用户密码及其相关属性
用户名:登录用名
加密密码:一般用sha512 加密
密码最近一次修改时间:1970 年1 月1日起到密码最近一次被更改的时间
=0 用户下次登陆后必须修改时间
密码最短修改时间:密码再过几天可以被变更
=0 没有密码最短使用时间,(0 表示随时 可被变更)
密码最长修改时间:密码再过几天必须被变更
<最短修改时间时,则被禁止修改密码 (99999 表示永不过期)
密码警告时间:密码过期前几天系统提醒用户
(默认为一周)
账号非活动时间:密码过期几天后帐号会被锁定
账户过期时间:从1970 年1 月1 日算起,多少天后帐号失效。
[root@7 ~]# getent shadow root root:$6$yE.b6vYZm3r2giVr$U9M5ROSqW0GgKYw/Q4wQF3AqasBPX1dtQZah9PdcznYv4od3eYNFRJ7r06teBsJPxD50NRRlvFsSrD72.JvuE.::0:99999:7:::
/etc/group;组及其用户属性、
群组名称:就是群组名称
群组密码:通常不需要设定,密码是被记录在
GID的 :就是群组的 ID
以当前组为附加组的用户列表( 分隔符为逗号)
[root@7 ~]# getent group root root:x:0:
/etc/gshadow:组密码及其相关属性
群组名称:就是群组名称
群组密码:
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表:( 分隔符为逗号)
[root@7 ~]# getent gshadow root root:::
2.2密码加密及复杂性策略
加密机制:
加密:明文--> 密文
解密:密文--> 明文
对称加密:加密和解密使用同一个密码
公钥加密:每个密码成对出现,一个为私钥(secret key),一个为公钥(public key)
单向加密(指纹加密):散列加密,提取数据特征码 ,常用于数据完 整性校验
单向加密:哈希算法,原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
加密算法:
md5: message digest, 128bits ### $1
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits ### $5
sha384: 384bits
sha512: 512bits ###目前centos6之后只用的加密算法 $6
(salt加盐):$1后两个$符之间的即为salt
lv:$1$vBgtHhcL$S0a/60DF0dTcfbE/HpLDT1:17015:0:99999:7:::
更改加密算法 authconfig --passalgo=sha256 -- update
[root@6 桌面]# authconfig --passalgo=md5 --update [root@6 桌面]# useradd lv [root@6 桌面]# getent shadow lv lv:!!:17015:0:99999:7::: [root@6 桌面]# passwd lv 更改用户 lv 的密码 。 新的 密码: 无效的密码: WAY 过短 无效的密码: 过于简单 重新输入新的 密码: passwd: 所有的身份验证令牌已经成功更新。 [root@6 桌面]# getent shadow lv lv:$1$vBgtHhcL$S0a/60DF0dTcfbE/HpLDT1:17015:0:99999:7:::
更改密码存放的位置:
早期密码存放在/etc/passwd中,现在一般存放在中/etc/shadow,即转换存放位置。
#pwunconv pw passwd unconvert 不转换密码位置,存放在/etc/passwd
#pwconv 转换密码位置,存放在中/etc/shadow
[root@6 桌面]# head -1 /etc/shadow root:$6$WCeeOGmBq7sO4OUR$7ilpCkqcbLCewVKKXKpOH1V1SBqZI4m57d1fZocbrlYZhbF9thDSGJhei1c.DYfnFT5UuamVtUS0CsESHBzqK/:17002:0:99999:7::: [root@6 桌面]# pwunconv [root@6 桌面]# head -1 /etc/shadow head: 无法打开"/etc/shadow" 读取数据: 没有那个文件或目录 [root@6 桌面]# head -1 /etc/passwd root:$6$WCeeOGmBq7sO4OUR$7ilpCkqcbLCewVKKXKpOH1V1SBqZI4m57d1fZocbrlYZhbF9thDSGJhei1c.DYfnFT5UuamVtUS0CsESHBzqK/:0:0:root:/root:/bin/bash [root@6 桌面]# pwconv [root@6 桌面]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash
2.3文件操作
vipw :编辑/etc/passwd 同时检查账户完整性
[root@7 ~]# vipw root 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
vigr :编辑/etc/group 同时检查账户的完整性
[root@7 ~]# vigr root:x:0: bin:x:1: daemon:x:2: sys:x:3:
pwck :检查/etc/passwd
[root@7 ~]# pwck 用户“ftp”:目录 /var/ftp 不存在 用户“avahi-autoipd”:目录 /var/lib/avahi-autoipd 不存在 用户“saslauth”:目录 /run/saslauthd 不存在 用户“pulse”:目录 /var/run/pulse 不存在 用户“gnome-initial-setup”:目录 /run/gnome-initial-setup/ 不存在 pwck:无改变
grpck:检查/etc/group
[root@7 ~]# grpck
3、用户和组管理命令
3.1、用户创建:useradd
useradd [options] LOGIN
-u UID : [UID_MIN, UID_MAX] 定义在/etc/login.defs
-o 配合-u 选项,不检查UID 的唯一性
-g GID :指明用户所属基本组,可为组名,也可以GID
-c "COMMENT" :用户的注释信息
-d HOME_DIR: 以指定的路径( 不存在) 为家目录
-s SHELL : 指明用户的默认shell 程序可用列表在/etc/shells 文件中
-G GROUP1[,GROUP2,...] :为用户指明附加组,组必须事先存在
-N 不创建私用组做主组,使用users 组做主组 (users UID:100)
-r: 创建系统用户 CentOS 6: ID<500 ,CentOS 7: ID<1000
-m (-k):强制创建家目录
(-k):创建用户默认把/skel目录下的文件复制到用户家目录下
-M: 拒绝为影虎创建家目录
[root@6 ~]# useradd -u 1234 -G root,ftp -s /bin/csh -d /testdir/testuser testuser
默认值设定:/etc/default/useradd 文件中
显示或更改默认设置:
#useradd -D
useradd –D -s SHELL
[root@6 桌面]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
默认配置文件:
/etc/default/useradd
/etc/skel/*
/etc/login.defs
批量创建用户:
newusers passwd 格式文件 批量创建用户
user1:x:3000:::/testdir/user1:/bin/csh user2:x:3001:::/testdir/user2:/bin/csh user3:x:3002:::/testdir/user3:/bin/csh user4:x:3003:::/testdir/user4:/bin/csh newusers a
cat b|chpasswd 批量修改用户口令
[root@6 ~]# cat b user1:user1pass user2:user2pass user3:user3pass user4:user4pass chpasswd b
3.2用户属性修改usermod,chfn
usermod [OPTION] login
-u UID: 新UID
-g GID: 新基本组
-G GROUP1[,GROUP2,...[,GROUPN]]] :新附加组,原来的附加
组将会被覆盖;若保留原有,则要同时使用-a 选项,表示append;
-s SHELL :新的默认SHELL;
-c 'COMMENT' :新的注释信息;
-d HOME: 新家目录不会自动创建,原家目录中的文件不会同时移
动至新的家目录;若要创建新家目录并移动原家数据,同时使用-m 选项
-l login_name: 新的名字;
-L: lock 指定用户, 在/etc/shadow 密码栏的增加 !
-U: unlock 指定用户,将 /etc/shadow 的 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期;
-f INACTIVE: 设定非活动期限;
-o:忽略检查,而直接修改用户UID -u -o
chfn:修改、添加附加信息
root@6 桌面]# chfn lvasu Changing finger information for lvasu. Name []: lvasu Office []: class1 Office Phone []: 911 Home Phone []: **** Finger information changed. [root@6 桌面]# finger lvasu Login: lvasu Name: lvasu Directory: /home/lvasu Shell: /bin/bash Office: class1, 911 Home Phone: **** Last login 一 8月 1 18:09 (CST) on pts/2 from 10.1.250.77 Mail last read 日 7月 31 22:21 2016 (CST) No Plan.
chsh:修改用户shell类型
[root@6 桌面]# chsh -s /bin/csh lvasu Changing shell for lvasu. Shell changed. [root@6 桌面]# getent passwd lvasu lvasu:x:1001:500:lvasu,class1,911,****:/home/lvasu:/bin/csh
3.3、删除用户userdel
userdel [OPTION]... login
-r: 删除用户家目录;
[root@6 桌面]# userdel -r lv [root@6 桌面]# ls /home ha1 ha2 ha3 lvasu test [root@6 桌面]# useradd app [root@6 桌面]# userdel app [root@6 桌面]# ls /home app ha1 ha2 ha3 lvasu test
3.4查看用户相关的ID 信息
id [OPTION]... [USER]
-u: UID
-g: GID
-G: Groups
-n: Name
[root@6 桌面]# id -u lvasu 1001 [root@6 桌面]# id -g lvasu 500 [root@6 桌面]# id -G lvasu 500 [root@6 桌面]# id -un lvasu lvasu [root@6 桌面]# id -gn lvasu lvasu [root@6 桌面]# id -Gn lvasu lvasu
3.5 组修改
groupmems 用户组管理
groupmems -a user_name | -d user_name | [-g group_name] | -l | -p
-a :添加组用户
-d:删除组用户
-p:删除组内的所有用户(当组内没有其他用户的时候)
[root@6 桌面]# groupmems -a lvasu [root@6 桌面]# id lvasu uid=1001(lvasu) gid=500(lvasu) 组=500(lvasu),0(root) [root@6 桌面]# groupmems -d lvasu [root@6 桌面]# id lvasu uid=1001(lvasu) gid=500(lvasu) 组=500(lvasu)
#newgrp 临时切换主组 exit退出
[root@6 桌面]# newgrp lvasu [root@6 桌面]# id uid=0(root) gid=500(lvasu) 组=500(lvasu),0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@6 桌面]# exit exit [root@6 桌面]# id uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
#groups 显示组中的用户
groups [OPTION]... [USERNAME]...
[root@6 桌面]# groups root root : root [root@6 桌面]# groups lvasu lvasu : lvasu
3.6切换用户或以其他用户身份执行命令
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的
配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置
文件,切换至家目录,完全切换
###读取的配置文件不同
root su 至其他用户无须密码;非root 用户切换时需要密码
换个身份执行命令:
su [-] UserName -c 'COMMAND'
选项:-l --login: :
su -l UserName 于 相当于 su - UserName
su -c 退出切换用户模式
# su - root -c `cat /etc/shadow`
如何给用户提权
1、通过SU 、SU - 切换到管理员账户
2、通过把用户加入到管理员组
3、通过useradd -u -o 0 user 将用户设置为管理员
取消管理员设置,修改/etc/passwd 文件 的UID 为原UID
# chown -R lvasu /home/lvasu 修改属主 重启登陆成功