当前位置:首页 » 操作系统 » linuxsetuid

linuxsetuid

发布时间: 2023-07-05 20:13:04

linux 关于set位权限

set位只对可执行文件起作用(主要是命令),你对文件的设置是无效的,虽然可以添加上,但不会生效的。

⑵ Linux权限管理基本知识

Linux权限管理基本知识大全

Linux系统有什么基本权限,权限管理命令是什么?下面跟我一起来看看吧!

一、基本权限

linux权限机制采用UGO模式。其中 u(user)表示所属用户、g(group)表示所属组、o(other)表示除了所属用户、所属组之外的情况。

u、g、o 都有读(read)、写(write)、执行(excute) 三个权限,所以UGO模式是三类九种基本权限。

用命令 ls -l 可列出文件的权限,第一列输出明确了后面的输出(后面一列代表 ugo权限)。第一个字母对应的关系:

“-” 普通文件

“d” 目录

”l“ 符号链接

”c“ 字符设备

"b" 块设备

"s" 套接字

"p" 管道

修改文件或目录的所属用户: chown 文件名 | 目录名 用户

-R 该参数以递归的方式修改目录下所有文件的所属用户,参数可以敲 chown --help 查看。

修改文件或目录的所属组: chgrp 文件名 | 目录名 组名

-R 该参数以递归的方式修改目录下的所有文件的'所属组。

命令chmod 用来修改文件或目录的权限: chmod -参数 模式 文件 | 目录

例子: 修改目录 log下所有文件的权限为700

chmod -R 700 log

注:700的来历是 u g o

rwx rwx rwx

111 000 000

关于 chmod 命令的权限模式除了数字表示,还可以是 u、g、o 、a 加 +、- 来表示。格式如下:u、g、o分别代表用户、属组和其他,a 就是

all ,可以代替ugo。 +、- 代表增加或删除对应的权限,r、w、x 代表三种权限,分别是读、写、执行。

例子:对于目录 log下的所有文件(已有权限是700)增加所属组(g)的读(r)、执行(x)权限。

chmod -R g+rx log

类似的命令可能还有很多,这里只是举几个最基本且常用的例子。很多命令用到时,再去查也可以。还可参考《鸟哥的Linux私房菜》。

二、特殊权限

Linux的3个特殊的权限,分别是setuid、setgid和stick bit。

setuid权限(S):只有用户可拥有,出现在执行权限(x)的位置。

setuid权限允许用户以其拥有者的权限来执行可执行文件,即使这个可执行文件是由其他用户运行的。

setgid权限(S):对应于用户组,出现在执行权限(x)的位置。

setgid权限允许以同该目录拥有者所在组相同的有效组权限来允许可执行文件。但是这个组和实际发起命令的用户组不一定相同。

stick bit (t /T):又名粘滞位,只有目录才有的权限,出现在其他用户权限(o)中的执行位置(x)。当一个目录设置了粘滞位,只有创建了该目录的用户才能删除目录中的文件,但是其他用户组和其他用户也有写权限。使用 t 或 T来表示。若没有设置执行权限,但是设置了粘滞位,使用 t;若同时设置了执行权限和粘滞位使用 T。典型的粘滞位使用是 /tmp 目录,粘滞位属于一种写保护。

设置特殊权限:

setuid: chmod u+s filename

setgid: chmod g+s directoryname

stick bit: chmod o+t directoryname

用数字表示特殊权限,是在基本权限之上的。浊嘴笨腮说不清楚,看例子:

例子:将上面例子中的log日志目录(已有权限 700)权限设置为755。特殊权限是类似 /tmp目录的 stick bit有效。

特殊权限 基本权限

setuid setgid stick bit user group other

0 0 1 rwx rwx rwx

111 000 000

所以,设置特殊权限(stick bit)的命令应该是:chmod 1755 log

设置特殊权限后,ls -dl 查看该目录:drwxr-xr-t 2 gg gg 4096 5月 11 19:05 log ( 注意 other 的 x 位是代表特殊权限的字母 t )

取消该特殊权限的命令:chmod 755 log 。如此 stick bit的权限就没有了。

再次 ls -dl 查看该目录: drwxr-xr-x 2 gg gg 4096 5月 11 19:15 log ( 注意最后一位已经变为代表普通权限的字母x )

需要注意的是,最前面一位 ”1“ 就是特殊权限位。其他两个特殊权限的设置也类似。setuid使用不是无限制的。出于安全目的,只能应用在Linux ELF格式二进制文件上,而不能用于脚本文件。

三、高级权限

ACL(Access Control List),访问控制列表是Linux下的的高级权限机制,可实现对文件、目录的灵活权限控制。ACL 允许针对不同用户、

不同组对同一个目标文件、目录进行权限设置,而不受UGO限制。

在一个文件系统上使用ACL需要在挂载文件系统的时候打开ACL功能。而根分区(ROOT)默认挂载的时候支持ACL。

命令:mount -o acl /挂载路径

例子:mount -o acl /dev/sdb1 /mnt

查看一个文件的ACL设置的命令: getfacl file

(针对一个用户)为一个文件设置指定用户的权限的命令: setfacl -m u:username:rwx filename

(针对一个组)为一个文件设置指定组的权限的命令: setfacl -m g:groupname:r-x filename

删除一个ACL设置的命令: setfacl -x u:username filename

;

⑶ 如何让Linux下非root用户程序使用小于1024端口

在Linux下,默认端口1024下的程序是要在root下才能使用的,在其他用户下,如果尝试使用将会报错。在有的时候,我们可能考虑程序运行在root帐户下,可能会给Linux系统带来安全风险。那如何能够让非root用户运行的程序能够对外启用小于1024的端口呢?本文尝试给出一些方法: x0dx0ax0dx0a第一种方消旅法:x0dx0aSetUIDx0dx0a为用户的应用程序在执行位设置user ID能够使程序可以有root权限来运行,这个方法让程序能够像在root下运行有同样的效果,不过需要非常小心,这种方法同样会带来安全风险,特别是当要执行的程序本身存在安全风险。使用的方法是:x0dx0achown root.root /path/to/application #使用SetUID chmod u+s /path/to/application x0dx0ax0dx0a我们可以看到在系统下,/usr/bin/passwd这种文件,就使用了SetUID,使得每个系统的用户都能用passwd来修改密码——这是要修改/etc/passwd的文件(而这个只有root有权限)。x0dx0a既然要使用非root用户运行程序,目的就是要降低程序本身给系统带来的安全风险,因此,本方法使用的时候需要特别谨慎。 x0dx0a第二种方法:x0dx0aCAP_NET_BIND_SERVICEx0dx0a从2.1开始,Linux内核有了能力的概念,这使得普通用户也能够做只有超级用户才能完成的工作,这包括使用端口1。x0dx0a获取CAP_NET_BIND_SERVICE能力,即使服务程序运行在非root帐户下,也能够banding到低端口。使用的方法:x0dx0a#设置CAP_NET_BIND_SERVICE setcap cap_net_bind_service =+ep /path/to/application x0dx0ax0dx0aNote:x0dx0a1. 这个方法并不是所有Linux系统通适,内核在2.1之前的并没有提供,因此你需要检查要使用此方法所在系统是否支持(Linux must support capacity);x0dx0a2. 另外需要注意的是,如果要运行的程序文件是一个脚本,这个方法是没有办法正常工作的(Script won't work)。 x0dx0a第三种方法:x0dx0aPort Forwardingx0dx0a如果要运行的程序有权限监听其他端口,那么这个方法是可以使用的,首先让程序运行在非root帐户下,并绑定高于1024的端口,在确保能正常工作的时候,将低端口通过端口转发,将低端口转到高端口,从而实现非root运行的程序绑定低端口。要使用此方法可以使用下面的方式:x0dx0a# Enable the IP FORWARD kernel parameter. sysctl -w net.ipv4.ip_forward=1 # Use iptables rules to redirect packets iptables -F -t nat iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088 x0dx0ax0dx0a第一步使用sysctl确保启用IP FORWARD功能(此功能在Red Hat/CentOS默认是扒桥悉被禁用的),注意,代码中使用的sysctl设置是临时性设置,重启之后将会被重置,如果要长久保存,需要在/etc/sysctl.conf文件内修改:x0dx0a# Default value is 0, need change to 1. # net.ipv4.ip_forward = 0 net.ipv4.ip_forward = 1 x0dx0ax0dx0a然后从文件中加载新的配置x0dx0a# load new sysctl.conf sysctl -p /etc/sysctl.conf # or sysctl -p # default filename is /etc/sysctl.conf x0dx0ax0dx0a第二步就是使用iptables的规春乎则来实现端口转发到程序所在的端口,示例中我们要将80端口转发到8088。x0dx0a此种方法能够比较好的达到我们的目的,我们的程序可以通过非root用户来运行,并能够对外提供低端口号的服务。 x0dx0a第四种方法:x0dx0aRINETD2x0dx0a这种方法使用的也是端口转发,此工具可以将本地端口映射到远程端口,但此功能对于我们当前的功能来说,有点鸡肋,毕竟我们新增了一个额外的程序,这将可能会增加我们系统的风险性。在此不做推荐。

热点内容
如何更改报考密码 发布:2025-03-19 01:08:12 浏览:415
python日期类型 发布:2025-03-19 01:02:28 浏览:414
android飞机大战源码 发布:2025-03-19 00:56:52 浏览:736
javaset方法 发布:2025-03-19 00:44:21 浏览:246
淘宝上传文件夹 发布:2025-03-19 00:36:30 浏览:73
oracle数据库备份数据 发布:2025-03-19 00:35:04 浏览:547
蚕丝算法 发布:2025-03-19 00:34:16 浏览:660
录制测试脚本 发布:2025-03-19 00:33:33 浏览:376
x3000r存储卡 发布:2025-03-19 00:12:22 浏览:221
ie不显示脚本错误 发布:2025-03-19 00:09:53 浏览:958