最近在学习中,感觉在用户,组,权限这一块比较搞,特此在这里总结。
1.用户
概念
我理解中,用户就是使用系统的人。分为root用户,系统用户,普通用户。
root用户就是超级管理员,拥有至高无上的权限,是神。uid=0
系统用户是一些服务需要的用户,shell为/sbin/nologin。无法登陆系统,uid:1到500
普通用户最最一般的用户,是凡人,除了自己的文件,其他都要授权。可以登陆系统。uid:501到60000
命令
关于用户的命令总共有这么三个useradd,usermod,userdel,文件有这么两个?/etc/login.defs,/etc/default/useradd
useradd用来创建用户名,usermod用来修改用户信息,userdel用来删除用户,格式如下:
useradd + 参数 + 用户名 用来新建用户
-d 指定家目录
-s 登陆shell
-u 指定UID
-g 主组
-G 附属组(属于哪些组)
值得注意的是,useradd在创建新用户的时候会默认创建新用户的家目录并把/etc/skel/下的所有文件都复制到新用户的家目录里。
默认是否创建家目录在/etc/login.defs里修改。一般不改。
usermod + 参数 + 用户名 用来修改用户状态信息(uid,gid,属组,shell等),参数如下
-l 新用户名
-u 新userID
-d 用户家目录位置
-g 用户所属主组
-G 用户所属附属组(-G在使用的时候,必须有多少组写多少组,如果本来有个g1,g2,-G g3会把g1,g2覆盖掉剩下个g3)
-L 锁定用户使其不能登陆
-U 解除锁定
用户修改完成后是否生效,可以用以下方法查看:
id + 用户名 可以查看用户名是否更改,uid,gid,属组信息。
uid=4009(username) gid=4012(username) groups=4012(username)
也可以再/etc/passwd文件里查看。passwd文件里面一行数据代表一个用户,以下为username的数据信息。
username:x:4009:4012::/home/username:/bin/bash
:为分隔符,两个数据项之间用:分隔,以下从左边第一个username开始对每个数据项做个说明
username 用户名
x 密码位,加密方式在/etc/login.defs文件中查看。
4009 uid
4012 gid
空白 用户的详细描述(创建用户的时候可以-c写入描述)
/home/username 家目录
/bin/bash shell
另外,shell我理解当中是命令解释器,用来翻译用户输入的指令给计算机。
userdel + 参数 + 用户名 用来删除用户。
-r 递归删除用户的家目录。
2.密码
passwd + 参数 + 用户名
-d 删除密码
-f 强制执行
-k 更新只能发送在过期之后
-l 停止账号使用
-S 显示密码信息
-u 启用已被停止的账户
-x 设置密码的有效期
-g 修改群组密码
-i 过期后停止用户账号
创建用户的时候不会出现密码选项。我们可以通过passwd命令来设置密码。
root 用户下 passwd + 用户名
普通用户下只能在有密码的情况下更改密码,并且只能改自己的密码不能改别人的密码。
2.组
概念:我理解中,组是用户的集合,也是权限的集合。文件属于a组,则a组的所有用户可以拥有g(ugo的g)部分的权限。另外说明一点,要网组里添加用户不是使用group系列的命令,而是用useradd -G或者usermod -G来添加
groupadd + 参数 + 组名 创建一个组。
groupmod + 参数 + 组名 更改组的状态信息
groupdel + 参数 + 组名 删除组(被删除的组必须不属于某个用户的主组)
3.权限
虽然我们在学习中,经常会这样说:a用户权限不够,进不了目录或打不开文件。但是权限从来都不是设置给用户和组的,linux里权限是通过设置文件来实现的。
ll 文件名可以看到文件的详细信息。
drwxr-xr-x. 2 mary tom 4096 Jun 19 09:58 test
先看中间,mary,tom。表示该文件属于mary这个用户,tom这个组。
通过chown命令来修改所属用户,所属组
chown 所属用户.所属组 文件名
常用参数-r 同事修改目录下的所有的文件目录的所有者和所有组。
chown命令单独加上一个用户名,则修改的是拥有者。通过用户名.拥有组来添加则两个一起修改
如果单独修改用户组则用chgrp来修改。
再来看最前面一串字母
drwxr-xr-x 第一位d表示这是一个目录,rwxr-xr-x,每三个为一组,分别代表user,group,others。rwx(u)r-x(g)r-x(o),u权限是针对文件拥有者的,g权限针对所属组,o权限针对除了不在ug内的其他人。
每一部分对应位置都是rwx,
r表示可读
w表示可写
x表示可执行
这里要说明以下文件和目录的rwx分别代表什么意思。
文件:r-可以看文件,w-可以改文件,x-如果文件是可执行文件,则有权限的用户可以执行、
目录:r-可以ls,w可以添加删除该目录下的文件或目录,x-可以进去(cd)
如果改位置有对应字母则表示,该位置有相应权限,如果是-则表示没有权限。
test这个目录对mary这个用户可读可写可执行,对tom这个组里的其他用户,可读可执行,对mary和tom组的用户以外的其他用户可读可执行。
更改ugo位置用chomd命令
chmod u+r test 表示对test目录u位置赋予可读权限。
也可以这样写,
chmod o+rwx test 一次给test目录o位置赋予可读可写可执行权限。
或者这样
chmod u-r,g+w,o-x test 同时给ugo更改权限用逗号隔开。
另外,增加权限用+,减少用-,赋予用=
+-很好理解,=看以下例子
chmod g=rwx test 表示不管g位原来是什么权限,直接赋予rwx。
当然对文件权限更改格式和目录是一样的,只是最后由目录名,换成文件名。
另外除了用ugo加减权限外,还有数字模式可以添加权限。分别是
r=4
w=2
x=1
数字模式是通过rwx对应的数字相加来赋予文件权限。一共有四位数字,这四位数字通过权限rwx相加来得到比如
0755
第一位0表示没有特殊权限
第二位7表示u位权限
第三位5表示w位权限
第四为5表示o位权限
那具体数字怎么表示,我们同样这个文件
drwx r-x r-x. 2 mary tom 4096 Jun 19 09:58 test
7 5 5
u=4+2+1=7
w=4+1=5
x=4+1=5
这里要说明一点用chomd 数字 文件名 来修改权限,除了特殊位,其他位需要一次写全。
如果要给ugo都赋予rwx权限,则命令是这样的
chmod 777 test
但是如果只给g+w,用数字模式则是
chmod 775 test
不能用
chmod g=7 test
除了rwx外,文件和目录还有特殊权限,分别是suid,sgid,sticky
suid针对可执行文件,让执行该文件的用户,暂时以文件拥有者的身份来执行,直至命令结束
比如passwd命令,这条命令是用来修改密码的,起结果保存在/etc/shadow文件中
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
----------. 1 root root 1793 Jun 18 17:00 /etc/shadow
shadow文件没任何权限。但是普通可以通过passwd命令来修改自己的密码。修改的密码保存在shadow文件中。能够实现这样的操作,就是suid的作用。
sgid针对目录和文件
sgid对文件操作的时候,和suid差不多,只是suid暂时暂时或者文件拥有者身份来执行,sgid暂时获得文件组的身份来执行。
比如
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate
真对目录的时候,在该目录下创建文件或目录时,拥有组与该目录相同。
sticky针对目录
必须拥有可读可执行权限。进入有t权限目录的用户,该用户如果拥有写的权限,则他只能删除该目录下自己拥有的文件。
suid,sgid,sticky添加方法和基本权限一样。都是使用chmod命令。也同样可以附加给文件和目录,但是suid给目录sticky给文件都是没有意义的。
chmod u+s,g+s,o+t test
chmod 7755 test
最后,说一句,suid,sgid赋值给文件的时候,极其危险,应谨慎和慎重。
本文出自 “大左” 博客,请务必保留此出处http://dazuo.blog.51cto.com/10418944/1663497
原文地址:http://dazuo.blog.51cto.com/10418944/1663497