Linux权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限:属主、属组以及其他人,通过这样的机制来限制哪些用户或用户组可以对特定文件进行相应的操作。
| 全拼 | 翻译 | 简写 |
|---|---|---|
| owner | 属主 | u |
| group | 属组 | g |
| other | 其它人 | o |
| 权限 | 对文件的影响 | 对目录的影响 |
|---|---|---|
| r(读取) | 可读取文件内容 | 可列出目录中内容 |
| w(写入) | 可修改文件内容 | 可在目录中创建删除内容 |
| x(执行) | 可作为命令执行 | 可访问目录内容 |
注意:目录必须拥有 x 权限,否则无法查看其内容
| 第一种 | 第二种 |
|---|---|
| - - - | 0 |
| - - x | 1 |
| - w - | 2 |
| - w x | 3 |
| r - - | 4 |
| r - x | 5 |
| r w - | 6 |
| r w x | 7 |
Linux每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,运行该进程的用户的权限越大,则进程拥有的权限就越大。
文件有属主和属组,进程有属主和属组
//权限修改主要修改三类对象的权限
//语法:chmod MODE file,...
-R //递归修改权限
//修改某类对象权限:u,g,o,a
权限修改的三种方式:
chmod 对象类别=MODE file,.....
chmod 对象类别=MODE,对象类别=MODE file,.....
例如:
[root@zsl ~]# chmod u=rwx zsl
[root@zsl ~]# chmod u=rwx,g=rwx zsl
chmod 对象类别+|-MODE file,.....
chmod 对象类别+|-MODE,对象类别+|-MODE file,.....
chmod +|-MODE file,.....
例如:
[root@zsl ~]# chmod u+rwx zsl
[root@zsl ~]# chmod u-x,g-x zsl
[root@zsl ~]# chmod +x zsl
chmod "mode number" file,.....
例如:
[root@zsl ~]# chmod 777 zsl
//chown命令只有管理员可以使用。
chown USERNAME file,...
-R //修改目录及其内部文件的属主
chown USERNAME:GROUPNAME file,...
chown USERNAME.GROUPNAME file,...
例如:
[root@zsl ~]# chown root.root zsl
[root@zsl ~]# chown root:root zsl
linux的权限默认是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。
SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是发起者为属主
chmod u+s file
chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
SGID(2) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
//一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
//如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
SBIT(1) //公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
chmod o+t DIR
chmod o-t DIR
//如果DIR本身原来就有执行权限,则SBIT显示为t,否则显示为T
特殊权限的数字表示方式:
4755 //有SUID,文件权限为755
2755 //有SGID,文件权限为755
1755 //有Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky
facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。
//语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m //设定权限条目
u:UID:perm
g:GID:perm
示例:
setfacl -m u:test:rw file
setfacl -m g:test:rw file
//如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可
示例:
setfacl -m d:u:test:rw file
//此时在此目录中创建的文件均继承此访问控制列表所设置的权限
-x //删除权限条目
u:UID
g:GID
示例:
setfacl -x u:test file
setfacl -x g:test file
-b //Remove all
示例:
setfacl -b file
//查看文件系统访问控制列表getfacl
//语法:getfacl [-aceEsRLPtpndvh] file ...
示例:
getfacl file
为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
新建文件和新建目录的默认权限是由遮罩码umask来控制的。
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。
举例:如果你不想让人家认出你,你会怎么办?
文件最终的权限为:
666-umask 文件最高权限 - 遮罩码 = 文件最终权限
目录最终的权限为:
777-umask 目录最高权限 - 遮罩码 = 目录最终权限
文件默认是不能具有执行权限的,如果文件有了执行权限则将其权限整体加1。
sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令
sudo的配置文件:/etc/sudoers
//使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:
示例:
who which_hosts=(runas) command
who : User,User_Alias //表示运行命令者的身份
which_hosts : Host,Host_Alias //通过哪些主机
runas : User,Runas_Alias //以哪个用户的身份
command : Command,Cmnd_Alias //运行哪些命令
//别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反
//别名分类
1.用户别名:
User_Alias "Alias" =
用户的用户名
组名,使用%引导
还可以其它已经定义的用户别名
2.主机别名:
Host_Alias "Alias" =
主机名
IP地址
网络地址
其它主机别名
3.命令别名:
Cmnd_Alias =
命令路径
目录(此目录内的所有命令)
其它已定义的命令别名
//sudo命令语法:sudo [options] COMMAND
-V //显示版本编号
-h //帮助信息,会显示版本编号及指令的使用方式说明
-l //列出当前用户可以使用的所有sudo类命令
-v //重新做一次密码确认,如果超过N(默认为5)分钟,也会问密码
-k //立刻清除认证信息,如果不指定-k,默认认证信息在5分钟后失效
-b //将要执行的指令放在后台执行
-u USERNAME //以指定的用户名执行命令,默认为root
chattr命令用于改变文件的特殊属性。与chmod命令相比,chmod只是改变文件的读写、执行权限,而chattr是基于内核的更底层的属性控制。
命令格式:
chattr [选项] [+/-/=属性] [文件或目录]
选项:
-R //递归
-V //显示过程
模式:
+ //用于增加属性
- //用户删除属性
= //用于指定属性
A //告诉系统不要修改该文件的最后访问时间
a //只能向文件追加数据,不能删除
i //设定文件不能被删除,改名,写入或新增内容
示例:
[root@hzz ~]# chattr +a hzz.txt //为hzz.txt增加a属性
[root@hzz ~]# lsattr hzz.txt //查看文件特殊属性
-----a-------e-- hzz.txt
sleep //睡眠
//写脚本时为防止上一个命令没执行完下一命令就开始执行时可以sleep命令
//语法:sleep NUMBER[SUFFIX]...
SUFFIX:
s:秒,默认
m:分
h:小时
d:天
示例:
sleep 5 //表示睡眠5秒后再执行后面的命令
last //显示/var/log/wtmp文件内容,用户登录历史及系统重启历史
-n # //显示最近#次的相关信息
lastb //显示/var/log/btmp文件内容,用户错误的登录尝试
-n # //显示最近#次的相关信息
lastlog //显示每个用户最近一次成功登录信息
-u username //显示特定用户最近的登录信息
basename //显示路径基名
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我正在为我的用户实现一些rubyonrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需
我正在关注Ryan的RailsCast第339集。我已经安装了rbenv并且可以运行ruby-v。我退出了我的session,当我试图返回时(通过root的sudeployer,我得到了这个错误/home/deployer/.rbenv/bin/rbenv:line20:cd:/root:Permissiondenied这是rbenv文件:#!/usr/bin/envbashset-e[-n"$RBENV_DEBUG"]&&set-xresolve_link(){$(type-pgreadlinkreadlink|head-1)"$1"}abs_dirname(){localcwd="
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好