Linux权限与sudo

Linux的rwx权限

Linux的文件权限表示其实还是比较简单的。 对于任意一个文件,都可以通过ls -l filename来查看ta的权限序列。 例如:

-rwxr-xr-x 1 wgjak47 wgjak47 221287 11月 16 2010 aliedit.sh

权限序列的第一位是文件类型:

  • 当为[ d ]则是目录
  • 当为[ - ]则是文件
  • 若是[ l ]则表示为连结档(link file);
  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);(例如/dev/sda)
  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。常见于/dev

上例中的文件为-,表示普通文件。

是然后三组rwx,r表示可读,w可写,x可执行,-表示没有权限。

  • 第一组rwx表示文件拥有者的权限
  • 第二组rwx表示文件拥有者所在组中其他人的权限
  • 第三组rwx表示其他人的权限。

举个例子,如果一个文件属性是754,也就是(rwxr-xr-)。

  • 如果你是这个文件的拥有者,那么你能对这个文件读写执行
  • 如果你不是这个文件的拥有者,但是和这个文件的拥有者是一个组别的,那么你可以读取和执行这个文件
  • 如果你并非文件拥有者的组别,那你只能读取这个文件

可以使用chmod改变文件的权限。基本用法如下:

<!-- lang: shell -->
chmod XXXX filename

其中X是8进制数,第一位一般省略,原因下面会说,转化为2进制就正好对应rwx,例如7(111)表示rwx,而5(101)表示r-x。对于目录,可以使用-R选项递归修改其子目录和子文件的属性。另外XXXX也可以使用操作符+符号来改变格式:

  • 操作符'+'使得用户选择的权限被追加到每个指定文件,(操作给 指定文件添加所选权限)
  • 操作符'-'使得这些权限被撤消;'='使得 指定文件只具有这些权限。

字符串'rwxXstugo':给用户选择新的属性

  • (r)读权限
  • (w)写权限

  • (x)执行权(或对目录的访问权)

  • (X)只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性

  • (s)同时设定用户或组ID

  • (t)粘滞位(保存程序的文本到交换设备上)

  • (u)目标文件属主

  • (g)目标文件属主所在的组

  • (o)其他用户

因此,'chmod g-s file' 撤消sgid位,'chmod ug+s file'同时设置了suid和sgid位,'chmod o+s file' 则没有进行任何设置


##Linux的特殊权限

从chmod的man Page当中,我们可以发现,除了rwx三个基本权限,还有s,t两个权限。 展开来说是:setuid、setgid、stick bit (粘贴位)

  1. setuid、setgid 简单的说就是如其名字一样,set uid,set gid。当普通用户使用这重属性的文件时会以root/root组的权限执行。

举个例子:/etc/passwd文件,用于储存用户密码的文件。

-rw-r--r-- 1 root root 2090 12月 23 20:29 /etc/passwd

我们知道这是储存用户密码的文件,但权限是root才能读写,其它用户只读。而读写这个文件的passwd属性如下:

-rwsr-xr-x 1 root root 47032 2月 17 2014 /usr/bin/passwd

第三个字母s表示的就是setuid,表示提权执行,也就是普通用户运行passwd的时候会以root身份去运行passwd: 在tty1以普通用户启动passwd,tty2执行ps -aux | grep passwd将得到如下结果:

root 20174 0.0 0.0 64680 1584 pts/23 S+ 23:37 0:00 passwd

执行者为root。 setpid这种权限一般就是为了应对像密码修改这种敏感,要求权限高但是许多普通用户却需要执行的操作而诞生的。

setgid同理,只不过变成了用户组。

  1. stick bit 在Linux中,文件夹的权限作用如下:
  • r(read):可以读取文件夹内容列表,但如果没有x权限,就只能看到文件名而无法查看其他内容(大小、权限等)
  • w(write):由于文件夹记录的是其中内容的列表,因此具有w权限即可修改这个列表,前提是拥有x权限可以进入这个目录内。w具体拥有以下几项权限: 建立新的文件或文件夹、 删除已存在的文件或文件夹(无视该文件或文件夹的权限)、 对已存在的文件或文件夹改名、 更改目录内文件或文件夹的位置
  • x(execute):可以进入该文件夹,没有x权限便无法执行该目录下的任何命令

stick bit(t)属性暂时只用于目录,主要是/tmp目录,tmp属于root,属性为drwxrwxrwt, 但是任何人都可以往里写文件。但是每个用户对于其他人的文件无法删除(root除外)。 简单的说就是当用户在拥有该属性的目录下建立文件或目录时,仅有自己与 root才有权力删除。


##setuid与sudo 在Linux中,由于root用户的权利过大,经常容易误操作造成无法挽回的损失。为了限制root权限,有人提出让普通用户仅在必要的时候获取root权限执行一些操作,平时以普通用户权限工作。于是sudo工具诞生。 sudo的简述:

在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。 sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是**/etc/sudoers**),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。 由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。

sudo的原理就是利用了setuid属性:

-rwsr-xr-x 1 root root 155008 2月 11 2014 /usr/bin/sudo

sudo的工作流程大致如下:

  1. sudo在执行时,系统会读取/var/run/sudo/%HOME%/下是否有用户的时间戳文件,若存在的并文件过期的话,系统则会提示用户输入自身的密码

  2. 验证成功后,系统会继续查找/etc/sudoers的相关配置,来判断用户的sudo具体权限

  3. 若权限存在,会自动会由当前用户切换到其他或root用户下,执行权限操作

  4. 执行完成后,再返回当前用户。


##sudo的配置和使用: sudo的配置文件编辑方式有些类似与crontab,sudoers并不能直接编辑,而是通过visudo来编辑的。visudo类似于crontab -e,也是先复制一个副本(/etc/sudoer.tmp),保存副本之后在更新/etc/sudoer。

sudoers的语法:

  • 权限配置: 默认的配置如下:

root ALL=(ALL) ALL

第一项是用户名,表示哪一个用户可以使用sudo。
第二项是登陆者的主机名,表示可以接受的远程登陆的主机名。ALL表示root可以从从任何一台主机以root身份登陆到本机并使用sudo。
第三项表示可以通过sudo切换的身份,ALL表示可以通过sudo切换任何身份执行命令。 第四项表示可以执行的命令,ALL表示所有命令,如果要特别声明命令,必须使用绝对路径,而且还支持参数和通配符。不同的命令使用**','**分割。 鸟哥书上的例子:

myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root # ! 表示不能执行(黑名单)

如果要添加一个可以使用sudo的用户,那么就另起一行,即可。 例如wgjak47 ALL=(ALL) ALL

  • 高级配置 一、群组功能,为了方便管理,sudo支持根据用户群组授权。 例如:

%sudo ALL=(ALL) ALL

这样配置的化,只要在sudo用户组内的用户都可以使用sudo。

二、免密码操作 sudo默认是需要密码的,而且只支持交互式的输入,当然可以通过expect或者有名管道模拟这个过程。但是将密码明文写在脚本中是很不安全的(索尼就是这么死的),而且我们一般只希望对于某些操作免密码,而不是所有操作。
sudoer支持NOPASSWD关键字:例如你希望运行service操作时面密码,可以这样配置:

username ALL=(ALL) NOPASSWD:/sbin/service

这样你在脚步中以sudo运行service就不需要密码了。

三、主机,用户,命令管理(alias) 为了方便管理,可以将用户,主机名,和命令打包成别名,方便管理: 鸟哥的例子改一下

User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2 Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root Host_Alias THO = *.threebody.com ADMPW THO=(root) ADMPWCOM

注意Linux是严格区分大小写的,一定要注意开头的字母大写。

转载于:https://my.oschina.net/u/1242185/blog/360184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值