1、用户管理
用户分为:
超级用户:又称为root或根目录,拥有系统最高权限
系统用户:与系统服务相关,通常在安装软件时自动安装
普通用户:由超级用户创建,只能管理自己启动的进程
用户UID范围:
管 理 员:0
普通用户:1-65535
系统用户:1-499(centos 6),1-999(centos 7)
普通登入用户:500-60000 (centos 6),1000-60000(centos 7)
用户管理相关的文件
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
--vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列: 用户名
第二列:密码 老版本这里放的就是密码,为了安全性考虑,密码放到了/etc/shadow的第二列
x代表/etc/shadow的第二列生效,去掉x就表示此用户登录的时候没有密码
第三列:uid 用户识别ID值,系统是通过这个值来确认是哪个用户
第四列:gid 组识别ID值
第五列:描述项 comment description
第六列:家目录
第七个:bash 当前用户使用的bash
更改shell:可在/etc/passwd(超级用户)中更改’/bin/bash‘;也可使用命令useradd -s /bin/zsh(要求更改的shell) +用户名 usermod -s /bin/shell(or 其他shell)+用户 普通用户:chsh -s /bin/shell+用户
/bin/bash 表示此用户使用bash,用户可以登录系统,可以收邮件,可以登录FTP
/sbin/nologin 表示用户不能登录系统,可以收邮件,可以登录FTP
/bin/false 表示用户不能登录系统,可以收邮件,不能登录FTP
--vim /etc/shadow
root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::
与/etc/passwd相对应 (但这里有九列)
第一列: 用户名
第二列:密码 (这里以*号开头或!开头默认是不能登陆的)
第三列:上一次修改密码的时间 linux以1970年1月1日到现在的天数来算的
第四列:修改密码后几天内不允许再修改 如果这里为5,那改过密码后5天内不能再修改 0代表不限制(只对普通用户有效)
第五列:多少天内必须要求你改 99999代表不限制
第六列:过期前几天给你一个告警信息
第七列:密码过期后还给的一个宽限天数
第8列: 这里可以写一个过期天数 这里也是以1970年1月1日到现在的天数来计算的,多用于收费系统
第九列: 保留,留着以后功能扩展
组管理:(groups:查看有效组)
vim /etc/group
bin:x:1:root,bin,daemon
第一列:组名
第二列:与/etc/passwd第二列一样
第三列:gid
第四列:哪些用户属于这个组
vim /etc/gshadow
bin:::root,bin,daemon
用户相关命令:
useradd -u(uid), -g(guid),-G(附加组),-c(指定用户全称),-d(指定用户主目录), -s(指定 shell), -r(创建系统用户), -M(不创建家目录)
思考题:删除dog用户家目录,如何还原(root用户重新创建dog的家目录,拷贝/etc/skel/.bash* 的三个文件到/home/dog/下即可)
步骤:
1)mkdir /home/dog
2)cp /etc/skel/.bash* /home/dog
3)chmod -R root.root /home/dog(-R表递归)
usermod -u, -g, -G, -a, -c, -l(修改用户名), -s, -L(锁定用户密码), -U(解锁用户密码)
userdel -r(同时删除家目录)
passwd -d(删除用户密码),-e(设置用户过期期限),–stdin
(方法1:echo "123" |passwd --stdin dog
方法2:passwd dog)
gpasswd-a(向组中添加用户),-d(向组中移除用户),
chage修改密码过期时间
groupadd -g, -r(创建系统用户)
groupmod-g, -n(修改组名)
groupdel (删除组)
chown:改变文件的所有者,所属组群。(chown dog:dog 1.txt 即把1.txt文件的所有者和所属组群都改为了 dog)
chmod:修改用户权限
id 命令 查看当前使用用户的用户信息和组信息
# id
uid=0(root) gid=0(root) groups=0(root))
# id bin
uid=1(bin) gid=1(bin) groups=1(bin),2(daemon),3(sys)
su切换环境变量,和不切换环境变量
给大家演示:
su - yhy1 -c “whoami” 不切换用户,以目标用户执行命令
2、权限管理
权限的判断为:一个用户(非一个程序)对一个文件拥有什么样的权限
-rw------- 1 root root 1112 Mar 27 03:14 anaconda-ks.cfg
rw------- 权限用九位来表示
前三位代表用户(u表示),中间三位代表组(g表示),后三位代表others(o表示)
权限有三种 r (read) 读 w (write) 写 x (execute) 执行
a表示all a=u+g+o( user+group+other)
r 读 权限
针对目录,有r权限,就代表能对此目录有列表的功能 (就是ls列出来的功能)
针对文件,有r权限,就代表能对此文件有阅读的功能 (就是指cat一类的命令)
w 写 权限
针对目录,有w权限,就代表在此目录下创建(删除)文件或者子目录 (touch,mkdir等)
针对文件,有w权限,就代表能在此文件写入内容或者修改 (> ,>>, vi 再写等)
x 执行 权限
针对目录,有x权限,就代表能进入此目录 (cd)
针对文件,有x权限,就代表能执行它 (命令,可执行文件等)
思考:
1)创建一个文件test,要求它实现user1只读,user2,user3可读可写,user4,user5可读可执行
先把user2,user3加入到group1组,然后创建下面的一个文件
r--rw-r-x user1 group1 test
2)创建一个文件test,要求它实现user1只读,user2,user3可读可写,user4,user5可读可执行,user6,user7可读可写可执行,user8,user9对其没有任何权限
这样的需求,仅靠九位权限实现不了;一定要实现,可以用文件file acl来做(主要的命令为setfacl和getfacl)
权限的修改
# chmod a+x 1.txt
# chmod g+x 1.txt
# chmod a+x 1.txt
# chmod a-r 1.txt
chmod u-w,g+x,o+x 1.txt --也可以一次性连写
权限用数字来表示 (r,w,x都可以用数字来表示)
r 4
w 2
x 1
rwx 7
rw_ 6
r_x 5
r__ 4
_wx 3
_w_ 2
__x 1
___ 0
-rw-r--r-- 这个以数字表示为644(严谨的说,不能叫它六百四十四,要叫它*四)
每三位里r代表4,w代表2,x代表1;由三个数组成一个三位数,就是你的权限
注意:文件默认权限为644,目录默认权限为755
# chmod 755 1.txt
# chmod 644 1.txt
chown user1.user1 1.txt --这个是改owner和group属性的
chown user1:user1 1.txt
思考:
3)什么情况下才能删除一个文件或目录?
答:跟这个文件或目录本身的权限无关,跟你对它们的上一级目录是否有写权限有关。你对一个目录有写权限,你就可以删除这个目录里任何文件
4)请问下面的情况,我一个普通用户能否rm -rf /test/abc/删除这个子目录
# ll -d /test
drwxr-xrwx. 3 root root 12288 Jul 16 17:42 /test
# ll /test
drwxr-xr-x. 2 root root 4096 Jul 16 17:40 abc
# ll /test/abc/
-rw-r--r--. 1 root root 0 Jul 16 17:40 1.txt
答案:删除不了,因为如果abc是个空目录就可以,但因为删除不了abc下的1.txt这个文件,所以造成abc也删除不了
5)什么情况下修改了一个文件才需要强制保存,什么情况下能够成功强制保存?
答案:如果你对一个文件没有写权限,那么修改后,要保存就会出现强制保存的选项;
虽然你对这个文件没有写权限,但如果你对文件所在的上一级目录有写权限,则可以强制保存成功,并且保存后,把文件的owner和group属性改成了你自己
如果对上一级目录没有写权限,则不可以强制保存;但也有一个例外,就是如果这个文件的owner就是你,那么你对它没有写权限,对它上级目录也没写权限,也可以强制保存成功
如果文件有i属性,那么无论什么情况都不能强制保存
6)如果一个用户对一个目录有r没有x会怎么样?有x没有r会怎么样?
这两种情况都是错误的情况,一般对目录要么能r能x,要么就都不行.
特殊权限位(s,t)
s位叫特权位,英文的叫法有setuid,setgid,suid,sgid等
特权位s
一个可执行文件拥有s位时,当其它用户来执行这个可执行文件的话,使用的权限是此可执行文件属主或者属组的权限
只针对前三位,中间三位
对目录可以加,但是无效,因为目录不是命令,根本不能执行它
[root@li ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 17 2012 /usr/bin/passwd
[root@li ~]# ll /etc/shadow
----------. 1 root root 1434 Jul 17 09:27 /etc/shadow
facl ----- 文件访问控制列表
1、设置facl权限
针对单个用户:
# setfacl -m u:<user>:<rwx> <file>
[root@test01 ~]# setfacl -m u:user4:r /uplooking/2.txt
针对单个用户组:
# setfacl -m g:<grp_name>:<rwx> <file>
[root@test01 ~]# setfacl -m g:shichang:rw /uplooking/2.txt
2、查看facl权限
[root@test01 ~]# getfacl /uplooking/2.txt
getfacl: Removing leading '/' from absolute path names
# file: uplooking/2.txt
# owner: user1
# group: user3
user::rwx
user:user4:r--
group::r-x
mask::r-x
other::rw-
3、删除facl权限
[root@test01 ~]# setfacl -x u:user4 /uplooking/2.txt
[root@test01 ~]# setfacl -x g:shichang /uplooking/2.txt
[root@test01 ~]# getfacl /uplooking/2.txt
getfacl: Removing leading '/' from absolute path names
# file: uplooking/2.txt
# owner: user1
# group: user3
user::rwx
group::r-x
mask::r-x
other::rw-
共同选项:
-R 递归修改权限
特殊权限: # chmod 2600
suid 4
sgid 2
sticky bit 1
1、suid
针对命令、脚本文件设置
作用: 当普通用户执行命令期间,会临时获取到命令的属主用户对系统的操作权限
[root@test01 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
设置suid
# chmod u+s <file>
2、sgid
针对目录设置
作用: 在目录下创建文件时,所有文件会继承目录的属组
[root@test01 ~]# chmod g+s /uplooking/
[root@test01 ~]# ls -ldh /uplooking/
drwxr-sr-x. 2 root caiwu 18 2月 10 23:36 /uplooking/
3、sticky bit
针对目录设置
作用: 目录下的文件只有文件属主用户、目录属主用户、root用可删除
# chmod o+t <dir_name>
--普通用户修改密码使用passwd能改自己的密码,但是密码是存放在/etc/shadow里,也就是说普通用户对/etc/shadow没有写的权限,但passwd可执行文件的前三位有s位,所以普通在调用passswd时是用的root的权限
小实验:
1,测试passwd命令的s位,去掉其s位,普通用户就不能自己改自己密码了,加上s位就可以了
2,/bin/touch这个命令是没有s位的,你可以尝试加上s位,然后用普通用户touch文件,观察效果。做完测试后,记得改回来也就是把s位去掉
3,普通用户能关机吗?怎么让普通用户关机
可以对关机命令加s位来让普通用户能关机,在rhel6下测试reboot,shutdown可以这样做,init不能这样做
这只是一个理论讨论,实际情况不会这么做的
--生产环境很多root的事情给普通用户做,是使用sudo工具来授权
粘贴位t --只针对目录有效
特别用在/tmp目录
有t位的目录,任何用户在有权限的情况下是可以创建文件和目录,就算是有权限删除别人的文件或目录也不能删除
自己只能删除自己创建的目录,用于一些共享上传的文件服务器场合
会提示Operation not permitted --这是操作不允许,不是pemission denied
小实验:
用一个测试目录(比如:/test/),再用两个普通用户,分别在此目录里建立不同的文件
测试结果:
目录没有t位,只要能写,能删除里面的任何文件
有t位,只能删除自己的文件
s位和t位注意的地方:
用数字表示
前三位上加s 4
中间三位加s 2
后三位加t 1
chmod 1777 /tmp --/tmp目录的t位很重要,不要把它去掉,否则会影响很多程序的运行
注意:s位和t位大小写的区别
小写的话就表示 有x执行权限
大写的话就表示 没有x执行权限
umask:权限遮罩码
查看当前的umask的值
umask UMASK值:设置umask的值,且仅对当前shell进程有效
install:复制文件并设置文件属性
install anaconda-ks.cfg -m 633 anaconda.new :复制anaconda文件为anaconda.new,并设置其权限
-o:指定属主
-g:指定属组
-d:创建目录
install -d data:创建data目录,类似与mkdir
setfacl:查看文档的ACL权限
选项:
-m 添加ACL条目
-x 删除指定的ACL条目
-R 递归处理所有的子文件与子目录
例:setfacl -m user:root:rwx /bin/chmod (设置该目录属于root用户并且设置他的权限为 rwx)