Linux常用命令之--强制位与冒险位
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用命令之--强制位与冒险位相关的知识,希望对你有一定的参考价值。
参考技术A • 在Linux系统中文件除了有读写执行权限外,ext2文件系统还支持强制位 (setuid 、setgid)与冒险位(sticky)的特别权限
• 针对文件创建者可以添加强制位(setuid),文件属组也可以添加强制位 (setgid),针对其它用户又可以添加冒险位(sticky)
• 强制位与冒险位添加在执行权限(x)的位置上。如果该位置上原已有执行权限,则强制位与冒险位以小写字母(s或t)的方式表示,否则,以大写字母(S或T)表示
• 例:如果文件的权限为”rwx r-- r-x”,那么如果设置了强制位与冒险位则新的权限为“rwsr-Sr-t”
• 对创建者设置强制位setuid,一般针对的是一个 系统中的指令 或 可执行文件
• 在默认情况下,用户执行一个指令,会以该用户的身份来运行
• 当对一个指令对应的可执行文件设置了(setuid),那么任何一个用户在执行这个文件的时候,都会以指令对应的可执行文件的创建者身份来执行这个文件
• 语法:chmod u±s <文件名>
• 例:chmod u+s /bin/ls
可以查看到/bin/ls的所有者和所有组都是root。假如现在有一个文件夹是属于root用户root组,权限为-rwx--x--x,也就是除了root用户,所属组和其他用户对这个文件夹除了cd没有任何权限。这时随便切换一个other用户,发现在这个文件夹里敲ls会被拒绝。用ll /bin/ls 查看发现权限是-rwxr-xr-x,即除了root用户其他所有用户有读和执行的权限(即使将该文件的权限改成777,other用户仍然无法在该文件夹里敲ls)。用chmod u+s /bin/ls命令后,再用ll /bin/ls 查看发现权限变成了-rwsr-xr-x,说明我使/bin/ls这个命令在被执行的时候是按照这个可执行文件的创建者,即root来执行的,这时敲ls就不会被拒绝了。
bin文件夹和sbin文件夹里都是系统文件,所以即使是root用户把自己的权限(文件属主和属组)给其他普通用户,他也不能进行u±s操作。但是其他普通文件夹就可以
root用户赋予普通用户,普通用户权限随root
如果之后普通用户权限赋予root,root用户也会随这个普通用户的权限
• 对组设置强制位setgid,一般针对的是一个目录
• 在默认情况下,用户在某目录中创建的文件或子目录的属组是该用户的主属组
• 如果对一个目录设置了属组的强制位,则任何用户在此目录中创建的文件或子目录都会继承此目录的属组(前提:用户有权限在目录中创建文件或子目录)
• 语法:chmod g±s <目录>
• 例:chmod g+s /dir
即使是root用户在chmod g+s <目录>下它的所属组也会变成该文件所属的组
比如现在有一个文件夹的所属组为user1组,通过chmod g+s <文件夹>进行设置强制位以后,所有在这个文件夹里新创建的文件或文件夹都会为user1组, 旧的文件不会被更改 。
同样,在chmod g-s <文件夹>以后再新建的文件夹没有s,但是之前继承的有s的不会被更改。注意,比如有文件夹E,在E文件夹上设置g+s后,在E文件家里新建了文件夹F,那么F会继承E的g+s。之后在E文件夹上设置g-s后,还要在F文件夹上设置g-s才能把这个s去掉,否则在F文件夹里新建的文件夹还是会继承
实验 :
• 对其它用户设置冒险位sticky ,一般针对的是一个目录 ,chmod o+t <目录>
• 在默认情况下,如果一个目录对用户有r、w和x权限,则这个用户可以在此目录中建立与删除任何文件
• 一旦在目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与root用户才可以在目录中删除此文件
实验:
• 用户可以用chmod指令来为文件设置强制位与冒险位
• setuid:chmod u+s 文件名
• setgid:chmod g+s 目录名
• sticky:chmod o+t 目录名
• 强制位与冒险位也可以通过一个数字加和,放在读写执行的三位数字前来指定
• 4(setuid)
• 2(setgid)
• 1(sticky)
• 例:要为某文件设置为”rws r-x r-x”的权限则可以使用下面的指令:chmod 4755 <文件名>
stat <文件名或者目录名> 即可查看四位权限
四位权限位的第一位表示特殊权限位,即u+s=4,g+s=2,o+t=1
例如一个文件夹权限为:1777,表示设置了o+t,并且所有用户都有读写执行权限
❀一个文件能不能删要看这个文件所在的文件夹有没有w权限,和它所在的文件夹的上一层文件夹有没有w权限没有关系。除非用g+s让文件夹继承父文件夹权限
u+s 在文件夹上设置一点儿意义没有
g+s 在文件上设置一点儿意义没有
o+t 在文件上设置一点儿意义没有
Linux命令之远程连接ssh
概述
ssh
命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器,实现对服务器的远程管理。
在脚本中该命令有着重要重要,可用于在远程服务器中执行命令。
语法
ssh
命令的基本语法如下:ssh [选项] [参数]
。
常用选项如下:
选项 | 说明 |
---|---|
-1 | 强制使用ssh协议版本1 |
-2 | 强制使用ssh协议版本2 |
-4 | 强制使用IPv4地址 |
-6 | 强制使用IPv6地址 |
-A | 开启认证代理连接转发功能 |
-a | 关闭认证代理连接转发功能 |
-b<IP地址> | 使用本机指定的地址作为对位连接的源IP地址 |
-C | 请求压缩所有数据 |
-F<配置文件> | 指定ssh指令的配置文件,默认的配置文件为“/etc/ssh/ssh_config” |
-f | 后台执行ssh指令 |
-g | 允许远程主机连接本机的转发端口 |
-i<身份文件> | 指定身份文件(即私钥文件) |
-l<登录名> | 指定连接远程服务器的登录用户名 |
-N | 不执行远程指令 |
-o<选项> | 指定配置选项 |
-p<端口> | 指定远程服务器上的端口 |
-q | 静默模式,所有的警告和诊断信息被禁止输出 |
-X | 开启X11转发功能 |
-x | 关闭X11转发功能 |
-y | 开启信任X11转发功能 |
参数通常为远程服务器的IP地址。
使用
登录远程服务器
可以在本地服务器通过远程服务器的IP地址进行登录,命令如下:
ssh xxx.xxx.xxx.xxx
参数说明:
xxx.xxx.xxx.xxx
为远程服务器的IP地址。
例如,使用的是root用户,如果不是建立信任关系的服务器,则每次ssh
连接都需要输入远程服务器的登录密码。可以明确看到蓝色方框内的服务器名字是两个,表示成功登录到远程服务器。如果要退出远程服务器则输入exit
命令即可。
注意,当我们第一次连接远程服务器的时候,会在/root/.ssh
目录下生成一个名为known_hosts
的文件,该文件的内容是我们连接的远程服务器的信息,如果以前连接过远程服务器并且该文件存在那么刚刚连接的远程服务器信息会追加在known_hosts
文件的最后。
使用指定用户连接远程服务器
可以使用指定的用户连接远程服务器,使用-l
选项指定用户名即可,命令如下:
ssh -l remoteuser xxx.xxx.xxx.xxx
参数说明:
user
为远程服务器的用户。例如,使用远程服务器的test
用户。xxx.xxx.xxx.xxx
为远程服务器的IP地址。例如,远程服务器IP地址192.168.40.60
。
例如,使用test用户登录远程服务器,注意,需要输入test用户的登录密码。
在远程服务器执行命令【★★★★★】
可以通过ssh
命令连接登录远程服务器并且执行命令,该命令是作用在远程服务器上的,但是结果显示在本地服务器上。命令格式如下:
ssh xxx.xxx.xxx.xxx command
参数说明:
xxx.xxx.xxx.xxx
为远程服务器的IP地址。例如,远程服务器IP地址192.168.40.60
。command
指的是待执行的命令。如ls /root
查看root目录下的文件;如rm -rf /home/hello.txt
删除home目录下的hello.txt文件,这些命令都是可以执行的。
例如,查看远程服务器上的home目录下的文件列表信息,结果会显示在本地服务器显示器上,并且并没有切换到远程服务器。
该命令非常重要,在脚本中很常见。
拓展延申
- 如果想要执行
ssh
命令不用每次都输入密码,则需要在两台服务器之间建立信任关系,请参考:让两台甚至多台Linux服务器建立SSH信任关系。 - 连接远程服务器会在
/root/.ssh
目录下生成一个known_hosts
文件,该文件记录了连接过的远程服务器信息。 - 通常情况下,会把
known_hosts
文件与authorized_keys
文件做对比:authorized_keys
文件由本地服务器生成,放置于远程服务器的/root/.ssh
目录下来实现免密登录;known_hosts
文件也由本地服务器生成,放置于本地服务器的/root/.ssh
目录下用于记录连接过的远程服务器信息。
以上是关于Linux常用命令之--强制位与冒险位的主要内容,如果未能解决你的问题,请参考以下文章