命令总结之用户组和权限管理篇
- 更新时间2017年06月11
-由于资料过多可能会分很多篇章
useradd
- 创建用户
- useradd有时候是反过来的adduser
[root@localhost ~]# useradd tank #添加用户
[root@localhost ~]# useradd -r zhangy #添加系统用户
[root@localhost ~]# useradd -d /home/zhangying zhangying #添加用户,并且指定,home目录
[root@localhost ~]# useradd -g mytest -d /home/hao hao #添加用户,指定组,并且设定home目录
[root@localhost ~]# useradd -e 04/05/13 fxxk #添加用户,并给用户设置有效期
需要说明的是,设定ID值时尽量要大于500,以免冲突。因为Linux安装后会建立一些特别用户,一般0到499之间的值留给bin、mail这样的系统账号。
[root@localhost ~]# useradd caojh -u 544
新创建一个oracle用户,这初始属于oinstall组,且同时让他也属于dba组。
[root@localhost ~]# useradd oracle -g oinstall -G dba
无法登录,且其用户目录至/var/ftp/service
[root@localhost ~]# useradd zcx -d /var/ftp/service -s /sbin/nologin
创建一个新用户 webmaster,不创建用户自家目录,指定登录目录 /www,同时加入 apache 附加组中
[root@localhost ~]# useradd -d /www -M -G apache webmaster
[root@localhost ~]# useradd –g sales jack –G company,employees # -g:加入主要组、-G:加入次要组
userdel|deluser
- 删除用户
[root@localhost ~]#userdel fxxk #删除用户
[root@localhost ~]#userdel -r hao #删除用户,并且删除用户home目录
usermod|usermod
- 修 改 使 用 者 帐 号
[root@Blackghost ~] usermod -d /home/bak/ zhangying #更改用户home目录
[root@Blackghost ~] usermod -e 05/06/13 zhangying #给用户加个有效期
1、将 newuser2 添加到组 staff 中
[root@localhost ~]# usermod -G staff newuser2
2、修改 newuser 的用户名为 newuser1
[root@localhost ~]# usermod -l newuser1 newuser
3、锁定账号 newuser1
[root@localhost ~]# usermod -L newuser1
4、解除对 newuser1 的锁定
[root@localhost ~]# usermod -U newuser1
groupadd|addgroup
- groupadd - 建 立 新 群 组
添加一个用户组
[root@localhost ~]# groupadd mytest
添加一个用户组,并指定GID
[root@localhost ~]# groupadd -g 444 test
添加组groupadd -g GID 组名
[root@localhost ~]# groupadd -g 3000 nsd1702
[root@localhost ~]# grep 'nsd1702' /etc/group
groupdel
- 删除群组
[root@localhost ~]# groupdel test #删除组test
groupmod
- 修 改 群 组
[root@localhost ~]#groupmod test -n test2 #将test组名换成test2
[root@localhost ~]#groupmod -g 1111 test2 #将test2的gid换成1111
passwd
- 修改用户密码
[root@localhost ~]#passwd zhangying #给zhangying修改密码
[root@localhost ~]#passwd -l test # 锁定用户test不能更改密码;
Locking password for user test.
passwd: Success
[root@localhost ~]#passwd -d test #清除test用户密码;
Removing password for user test.
passwd: Success
[root@localhost ~]#passwd -S tank #要显示用户密码的状态信息
tank LK 2015-07-25 0 99999 7 -1
[root@localhost ~]#passwd -e test #使test用户的密码过期,这将强制用户在下次登录时更改密码
Expiring password for user test.
passwd: 操作成功
[root@localhost ~]#passwd -u test #解锁用户密码
Unlocking password for user test.
passwd:Success
在 passwd 命令中使用 -i 选项用于设系统用户的非活动时间。当用户(我使用的是test用户)密码过期后,用户再经过 ‘n‘ 天后(在我的情况下是10天)没有更改其密码,用户将不能登录。
[root@localhost ~]#passwd -i 10 test
调整用户密码老化数据test。
passwd: 操作成功
-n 选项为指定密码最小有效期,用户在此期限内不可更改密码
[root@localhost ~]#passwd -n 90 test
调整用户密码老化数据test。
passwd: 操作成功
‘-w’ 选项在 passwd 命令中用于设置用户的警告期限。这意味着,n天之后,密码将过期
[root@localhost ~]#passwd -w 20 test
调整用户密码老化数据test。
passwd: 操作成功
加密机制:
加密:明文–> 密文
解密:密文–> 明文
单向加密:哈希算法(散列算法),原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
更改加密算法authconfig–passalgo=sha256 –update
即使没密码相同,密文也不相同,加的有随机数(salt)。
openssl passwd 1 “salt” :salt一样,算法一样 产生的密文也一样。
authconfig passalgo256 –update 定义加密算法 或者更改/etc/login.defs文件
getent shadow 用户名 查看口令密文
默认空口令不予许登录,!是锁定,不允许登录的意思
usermod u 用户名 解锁的意思 在无口令情况下,高版本的只能解单!的 !!不能解
usermod L 用户名 锁住
root的用户可以切换到锁定的账号 但是普通用户切换时要读passwd文件所以切换不了
chage 用户名 改密码有效期等
gpasswd
-gpasswd命令
-功能:管理组
-用法:gpasswd[-a user][-d user][-A user,...][-M user,...][-r][-R]groupname
参数:
-a:添加用户到组
-d:从组删除用户
-A:指定管理员
-M:指定组成员和-A的用途差不多
-r:删除密码
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组
[root@localhost ~]# gpasswd -A peter test2 #将peter设为test2组管理员
[root@localhost ~]# gpasswd -a peter test2 #将用户peter加入到test2组
[root@localhost ~]# gpasswd -d peter test2 #将用户peter从test2组中移出
getent
- 用来察看系统的数据库中的相关记录
- 用法: getent [选项...] 数据库 [键 ...]
[root@localhost ~]#getent hosts baidu.com #从hosts库中得到baidu.com的IP信息
180.149.132.47 baidu.com
220.181.57.217 baidu.com
123.125.114.144 baidu.com
[root@localhost ~]#getent passwd tank #从passwd库中得到账号tank信息
tank:x:502:502::/home/tank:/bin/bash
su
- 切换用户
[root@localhost ~]# su zhangying #切换用户,原用户环境变量
[root@localhost ~]# su - zhangying #切换用户,新用户环境变量
[root@localhost ~]# su -c ls root #切换用户执行命令,执行后返回原用户
su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。
[root@localhost ~]# su #切换到root
[root@localhost ~]# su - #切换到root
newgrp
- 功能说明:登入另一个群组
[root@localhost ~]# newgrp www #登录到www群组
id
- 用法:id [选项]... [用户名]
- 显示指定用户或当前用户(当未指定用户时)的用户与组信息
[root@localhost ~]# id #显示当前用户的信息
uid=0(root) gid=0(root) 组=0(root)
[root@localhost ~]# id zhangy #显示zhangy的信息
uid=999(zhangy) gid=999(zhangy) 组=999(zhangy)
chage
密码失效是通过此命令来管理的。
参数意思:
-m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M 密码保持有效的最大天数。
-W 用户密码到期前,提前收到警告信息的天数。
-E 帐号到期的日期。过了这天,此帐号将不可用。
-d 上一次更改的日期
-I 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期
[root@localhost ~]# chage -l zhangy #查看用户密码设定情况
最近一次密码修改时间 : 4月 27, 2013
密码过期时间 : 从不
密码失效时间 : 从不
帐户过期时间 : 从不
两次改变密码之间相距的最小天数 :-1
两次改变密码之间相距的最大天数 :-1
在密码过期之前警告的天数 :-1
[root@localhost ~]# chage -M 90 zhangy #密码有效期90天
[root@localhost ~]# chage -d 0 zhangy #强制用户登陆时修改口令
[root@localhost ~]# chage -d 0 -m 0 -M 90 -W 15 zhangy #强制用户下次登陆时修改密码,并且设置密码最低有效期0和最高有限期90,提前15天发警报提示
[root@localhost ~]# chage -E '2014-09-30' test # test这个账号的有效期是2014-09-30
chfn
chfn - 改 变 你 的 finger 讯 息
[root@localhost ~]#hfn
正在改变 root 的用户信息
请输入新值,或直接敲回车键以使用默认值
全名 [root]: zhangy
房间号码 []: 8888
工作电话 []: 1234567
家庭电话 []: 7654321
其它 []: no
[root@localhost ~]# chfn -f tank
finger
- 用户信息查找程序
[root@localhost ~]# finger munin #查看munin用户信息
Login: munin Name: Munin user
Directory: /var/lib/munin Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
[root@localhost ~]#finger -l #显示当前登录用户信息
[root@localhost ~]#finger -m root@192.168.1.13 #显示远程用户信息
chsh
- 用于 改变 用户的 登录 shell. 如果 没有在 命令行上 指定 shell, chsh 能够 做出 提示.
[root@localhost ~]# chsh #必变当前用户的shell
Changing shell for root.
New shell [/bin/bash]: /bin/csh #输入新的shell地址
Shell changed.
[root@localhost ~]# chsh -s /bin/csh #改变当前用户shell,设置为 /bin/csh
Changing shell for root.
Shell not changed.
pwconv
- 命令用来开启用户的投影密码
[root@localhost ~]# cat /etc/passwd | grep test
[root@localhost ~]# test:x:3001:3001::/home/test:/bin/sh
此时可以发现密码段是x
[root@localhost ~]# cat /etc/shadow | grep test
[root@localhost ~]# test:nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:15022:0:99999:7:::
## pwunconv
- pwunconv命令与pwconv功能相反,用来关闭用户的投影密码。它会把密码从shadow文件内,重回存到passwd文件里
[root@localhost ~]# pwunconv #关闭影子密码
[root@localhost ~]# cat /etc/passwd | grep test #发现密码已经在passwd文件中了
test:nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:3001:3001::/home/test:/bin/sh
[root@localhost ~]# ls /etc/shadow #查看影子文件,提示没有这个文件或目录
ls: cannot access /etc/shadow: No such file or directory
## pwck
- pwck命令用来验证系统认证文件/etc/passwd和/etc/shadow的内容和格式的完整性
用法:pwck [-q] [-r] [-s] [passwd [shadow]]
[root@localhost ld.so.conf.d]# pwck /etc/passwd
user 'adm': directory '/var/adm' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'gopher': directory '/var/gopher' does not exist
user 'ftp': directory '/var/ftp' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'saslauth': directory '/var/empty/saslauth' does not exist
pwck:无改变
## chown
>用法:chown [选项]... [所有者][:[组]] 文件...
或:chown [选项]... --reference=参考文件 文件...
更改每个文件的所有者和/或所属组。
[root@localhost ~]# chown zhangy:zhangy nginx.conf #将nginx.conf所属用户和组改为zhangy,zhangy
[root@localhost ~]# ls -al |grep nginx.conf
-rw-r--r-- 1 zhangy zhangy 0 5月 3 15:21 nginx.conf
[root@localhost ~]# chown -R zhangy:zhangy www #将www目录,所属用户和组改为zhangy,zhangy
[root@localhost ~]# ls -al |grep ww
drwxr-xr-x 2 zhangy zhangy 4096 5月 3 15:20 www
[root@localhost ~]# chown root nginx.conf #将nginx.conf,所属用户改为root
[root@localhost ~]# ls -al |grep nginx.conf
-rw-r--r-- 1 root zhangy 0 5月 3 15:21 nginx.conf
[root@localhost database]# ll
总用量 4592
-rw-r--r-- 1 root root 2466 7月 23 18:02 1.html
-rw-r--r--. 1 tank tank 4099771 5月 28 14:42 28toplearning.sql
-rw-r--r--. 1 tank tank 596069 5月 29 00:07 toplearning.tar.gz
[root@localhost database]# chown .tank 1.html #只改变组
[root@localhost database]# ll
总用量 4592
-rw-r--r-- 1 root tank 2466 7月 23 18:02 1.html #组已改变
-rw-r--r--. 1 tank tank 4099771 5月 28 14:42 28toplearning.sql
-rw-r--r--. 1 tank tank 596069 5月 29 00:07 toplearning.tar.gz
## chmod
>相关命令:chattr,chown,chacl
用法:chmod [选项]... 模式[,模式]... 文件...
或:chmod [选项]... 八进制模式 文件...
或:chmod [选项]... --reference=参考文件 文件...
将每个文件的模式更改为指定值。
-c, --changes 类似 --verbose,但只在有更改时才显示结果
--no-preserve-root 不特殊对待根目录(默认)
--preserve-root 禁止对根目录进行递归操作
-f, --silent, --quiet 去除大部份的错误信息
-v, --verbose 为处理的所有文件显示诊断信息
--reference=参考文件 使用指定参考文件的模式,而非自行指定权限模式
-R, --recursive 以递归方式更改所有的文件及子目录
--help 显示此帮助信息并退出
--version 显示版本信息并退出
每种 MODE 都应属于这类形式"[ugoa]*(-+=)+"。
操作对像
u 文件属主权限
g 同组用户权限
o 其它用户权限
a 所有用户(包括以上三种)
权限设定
- 增加权限
- 取消权限
= 唯一设定权限
权限类别
r 读权限
w 写权限
x 执行权限
X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
s 文件属主和组id
l 给文件加锁,使其它用户无法访问
r-->4
w-->2
x-->1
[root@localhost ~]# chmod ugo+r nginx_bak.conf #所有人皆可读取
[root@localhost ~]# chmod a+r nginx_bak.conf #所有人皆可读取
[root@localhost ~]# chmod ug+w,o-w nginx_bak.conf #设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
[root@localhost ~]# chmod u+x nginx_bak.conf #创建者拥有执行权限
[root@localhost ~]# chmod -R a+r ./www/ #将www下的所有档案与子目录皆设为任何人可读取
[root@localhost ~]# chmod a-x nginx_bak.conf #收回所有用户的对nginx_bak.conf的执行权限
[root@localhost ~]# chmod 777 nginx_bak.conf #所有人可读,写,执行
[root@localhost ~]#chmod a+s test.ppt #chmod g+s ,为某个文件设置替代组标识
[root@localhost ~]#ls -al |grep test.ppt
-rwSr-Sr--. 1 tank tank 2320384 11月 18 19:29 test.ppt
第一个S指示用户替代标识(suid)已经被设置。
第二个S指示替代组标识(sgid)已经被设置。
这样,每一个运行该程序的用户将给予和程序拥有者同样有效的用户标识,和用户所属组同样有效的组标识。
[root@localhost ~]# chmod +x test #所有用户加执行权限
## wc
- wc命令的功能为统计指定文件中的字节数、单词数、行数, 并将统计结果显示输出
>参数
-c, --bytes打印字节数
-m, --chars 打印字符数
-l, --lines 打印行数
-L, --max-line-length 打印最长行的长度
-w, --words 打印单词数
[root@localhost ~]# cat /etc/passwd |wc -l #查看passwd文件有多少行
38
[root@localhost ~]# echo "aaa bbb ccc" |wc -w #查看输出有多少个单词
3
[root@localhost ~]# echo "12344" |wc -m #查看输出有多少个字符
6
## sort
>用法:sort [选项]... [文件]...
或:sort [选项]... --files0-from=F
串联排序所有指定文件并将结果写到标准输出。
[root@www ~]# cat /etc/passwd | sort #sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3 #/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3n #用数字排序,默认是以字符串来排序的
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3nr #倒序排列,默认是升序排序
[root@www ~]# ccat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r #对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序
[root@www ~]# cat /etc/passwd | sort -t':' -k 7 -u #查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重
## uniq
>用法:uniq [选项]... [文件]
从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出
[root@localhost ~]# cat uniqtest #测试文件
this is a test
this is a test
this is a test
i am tank
i love tank
i love tank
this is a test
whom have a try
WhoM have a try
you have a try
i want to abroad
those are good men
we are good men
[root@localhost ~]# uniq -c uniqtest #uniq的一个特性,检查重复行的时候,只会检查相邻的行。重复数据,肯定有很多不是相邻在一起的
3 this is a test
1 i am tank
2 i love tank
1 this is a test #和第一行是重复的
1 whom have a try
1 WhoM have a try
1 you? have a try
1 i want to abroad
1 those are good men
1 we are good men
[root@localhost ~]# sort uniqtest |uniq -c #这样就可以解决上个例子中提到的问题
1 WhoM have a try
1 i am tank
2 i love tank
1 i want to abroad
4 this is a test
1 those are good men
1 we are good men
1 whom have a try
1 you have a try
[root@localhost ~]# uniq -d -c uniqtest #uniq -d 只显示重复的行
3 this is a test
2 i love tank
[root@localhost ~]# uniq -D uniqtest #uniq -D 只显示重复的行,并且把重复几行都显示出来。他不能和-c一起使用
this is a test
this is a test
this is a test
i love tank
i love tank
[root@localhost ~]# uniq -f 1 -c uniqtest #在这里those只有一行,显示的却是重复了,这是因为,-f 1 忽略了第一列,检查重复从第二字段开始的。
3 this is a test
1 i am tank
2 i love tank
1 this is a test
2 whom have a try
1 you have a try
1 i want to abroad
2 those are good men #只有一行,显示二行
[root@localhost ~]# uniq -i -c uniqtest #检查的时候,不区分大小写
3 this is a test
1 i am tank
2 i love tank
1 this is a test
2 whom have a try #一个大写,一个小写
1 you have a try
1 i want to abroad
1 those are good men
1 we are good men
[root@localhost ~]# uniq -s 4 -c uniqtest #检查的时候,不考虑前4个字符,这样whom have a try 就和 you have a try 就一样了。
3 this is a test
1 i am tank
2 i love tank
1 this is a test
3 whom have a try #根上一个例子有什么不同
1 i want to abroad
1 those are good men
1 we are good men
[root@localhost ~]# uniq -u uniqtest #去重复的项,然后全部显示出来
i am tank
this is a test
whom have a try
WhoM have a try
you have a try
want to abroad
those are good men
we are good men
[root@localhost ~]# uniq -w 2 -c uniqtest #对每行第2个字符以后的内容不作检查,所以i am tank 根 i love tank就一样了。
3 this is a test
3 i am tank
1 this is a test
1 whom have a try
1 WhoM have a try
1 you have a try
1 i want to abroad
1 those are good men
1 we are good men
[root@localhost ~]# grep -oE '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/nginx/access.log |sort |uniq -c #查看nginx访问IP数
1 101.200.78.64
2 103.41.52.94
1 106.185.47.161
2 113.240.250.155
260 13.0.782.215
2 185.130.5.231
26 192.168.10.16
6 192.168.10.17
148 192.168.10.2
189 192.168.10.202
270 192.168.10.222
25 192.168.10.235
291 192.168.10.3
12 192.168.10.5
2 23.251.63.45
20 7.0.11.0
## diff
- diff 比较两个文件的内容 (源文件 和 目标文件)
- . 文件名可以是 - 由标准输入设备读入的文本. 作为特别的情况是,
- diff - - 比较一份标准输入的它自己的拷贝
- 如果 源文件 是一个目录和 目标文件 不是(目录)
- diff 会比较在 源文件
- (目录) 里的文件的中和 目标文件同名的(文件)
- 反过来也一样. 非目录文件不能是
[root@localhost ~]# diff test1.rb test.rb #比较二个文件的不同
1c1,6
< puts "hekkk"
require "mysql"
dbc=Mysql.real_connect('localhost','root','','test')
query_parse=dbc.query('select * from user')
while row=query_parse.fetch_row do
puts "#{row[0]},#{row[1]}"
end
[root@localhost ~]# diff myweb/ html/ #比较二个文件夹的不同
Only in html/: a.php
Only in html/: phpmyadmin
[root@localhost ~]# diff -r myweb/ html/ #递归比较二个文件夹的不同
Only in html/: a.php
Only in html/: phpmyadmin
[root@localhost ~]# diff -ruN test.rb test1.rb #补定文件的内容
--- test.rb 2013-01-31 21:24:57.000000000 +0800
+++ test1.rb 2013-01-31 21:10:08.000000000 +0800
@@ -1,6 +1 @@
-require "mysql"
-dbc=Mysql.real_connect('localhost','root','','test')
-query_parse=dbc.query('select * from user')
-while row=query_parse.fetch_row do
- puts "#{row[0]},#{row[1]}"
-end
+puts "hekkk"
[root@localhost ~]# diff -ruN test.rb test1.rb > test.diff #产生补定文件
## stat
- 用法:stat [选项]... 文件...
- 显示文件或文件系统的状态
[root@localhost ~]# stat abc.ph
文件:"abc.ph"
大小:0 块:0 IO 块:4096 普通空文件
设备:801h/2049d Inode:1200314 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2013-05-14 13:24:30.830729223 +0800
最近更改:2013-05-14 13:24:30.830729223 +0800
最近改动:2013-05-14 13:24:30.830729223 +0800
创建时间:-
[root@localhost ~]# stat -c %a pass.sh #显示pass.sh文件的数字权限
644