首页 > 编程知识 正文

linux umount命令,linux连接sftp

时间:2023-05-06 14:47:48 阅读:50887 作者:905

最近发生了什么事,我需要权限打开工作室服务器的网站目录上传文件,要求静态网站的上传马上就可以使用。 为了简单起见,我想的方法是让新用户加入www-data组,把登录目录设置在网站所在的目录下,上传网站直接掉文件就可以了。 假设这些网站在同一个域名下。 否则,需要单独配置服务器。 但是,在SFTP上上传的所有文件都是默认的755,原本vsftpd可以控制用户local_umask上传文件的权限,但是坑爹的硬件防火墙阻止了FTP端口但是,虽然SFTP名称中有FTP,但实际上SFTP由openssh而不是vSFTPd控制,SFTP没有专用守护程序或独立配置文件。 (

查看openssh配置并未找到umask配置,您应该只能更改bash的环境配置。

那么,我给/etc/passwd设定的登录地址是网站的所在地,系统没有自动生成bash的配置文件。 于是,我手动创建. bash_profile,在其中填写umask 002行,重新启动sshd,惊讶地发现没有效果。 上传——元权限777的文件后也是777

仔细想想,bash的配置文件似乎有多个,可能是SFTP读取配置错误了吗? 因此,我又调查了一下bash的配置。 查了一下,吓了我一跳。 还有这么小的问题,我到现在都没在意。 最大的问题是登录外壳和非登录外壳之间的区别:

定义:

loginshell :要获取bash,需要一个称为loginshell的完整登录过程。

non-log in shell :获取基本界面的方式不需要重复登录。

log in shell和non-log in shell之间的最大区别是读取环境变量的配置文件。 系统启动或打开新终端登录系统时,调用/gsdxrz/login程序处理登录并在shell上显示命令提示符。 这个外壳就是login外壳。 shell程序可以是bash、sh或csh,具体使用哪个shell可以设置为/etc/passwd。 /gsdxrz/login程序读取此文件以确定使用哪个shell

例如,要登录tty 1到tty 6,必须输入用户名和密码。 在这种情况下,获取的bash称为登录shell,通过SSH登录并使用启动的shell

苏- l

切换帐户时调用的都是登录shell。

另一方面,在X window上登录linux后,在x图形界面上启动虚拟终端时,不需要输入用户名和密码,其bash环境称为非登录shell。 或者在本来bash环境中使用

巴斯夫

没有启动新shell,同样要求输入用户名和密码。 其第二个bash也是非登录外壳。 此外,在执行su命令时不指定-l参数而使用

bash -c

觉醒的新外壳也是非登录外壳。

现在可以看到,用于SSH和SFTP登录的shell必须是log in shell,并据此配置基本配置文件。

如果获取了这两个bash,则读取的配置文件不同

log in shell实际上只读取这两个配置文件。

/etc/profile :这是整个系统的设置,所以最好不要修改此文件;

~/.bash_profile或~/.bash_login或~/.profile :用户个人设置,如果要更改自己的资料,请在此处写入

/etc/profile只供登录shell读取,每个用户登录获取bash时必须读取的配置文件! 所以,如果你想为所有用户设置一个整体环境,那就是改变这里

同样,/etc/profile会去调用外部配置资料,并按顺序调用以下资料

引用自——鸟哥

总之,对于login shell,系统只能读取一个/etc/profile文件。 但是,他调用~/.bash_profile这样的个人配置,依次读取,优先读取第一个配置,之后的配置无效。 bash读取这么多配置主要是因为它与其他shell的兼容性。

~/.bash_profile

~/.bash_login

~/.配置文件

然后~/.bash_profile调用~~/.bashrc。 也就是说,最终登录shell正在读取~~/.bashrc

坑爹知道在这个大圈子周围我改变了巴斯夫勒,对吧?

另一方面,对于非登录shell,只需直接读取~/.bashrc,但bashrc调用/etc/bashrc (在debian中为/etc/bash.bashrc )。

该/etc/bashrc主要有三个作用。

基于不同UID的规格

出UMASK的值

依据不同的UID ,规范出PS1, 也就是提示符的内容

呼叫/etc/profile.d/*sh目录中的内容

顺便一提

PS1

这玩意呢,是 interactive shell 具有的环境变量,用于确定提示符的样式。

bash 默认引用个人配置使用的就是 source 命令,因此我们每次修改 bash 配置,可以使用

source + 配置文件名

命令立刻使之生效.

对于 login shell 和 non-login shell 的区别,有个很简单的办法实践,那就是在自己家目录下建立一个.bash_profile 文件,写上 umask 002,保存退出shell 重新登录,随便新建一个文件,查看属性,bash 调出新的 shell ,再新建一个文件,对比他们的属性。

stardust@Chaos:~$ touch 1 #建立新文件1

stardust@Chaos:~$ ls -al 1 #查看属性是644,因为默认umask是022

-rw-r--r-- 1 stardust stardust 0 Dec 29 16:50 1

stardust@Chaos:~$ bash #采用 non-login 方式启动新 shell

stardust@Chaos:~$ touch 2

stardust@Chaos:~$ ls -al 2 #权限属性是644,因为目前没有修改

-rw-r--r-- 1 stardust stardust 0 Dec 29 16:50 2

stardust@Chaos:~$ nano ./.bash_profile #编辑bash_profile

stardust@Chaos:~$ bash #采用 non-login 方式启动新 shell

stardust@Chaos:~$ touch 3

stardust@Chaos:~$ ls -al 3

-rw-r--r-- 1 stardust stardust 0 Dec 29 16:51 3

#权限还是644,因为non-login shell没有读取 bash_profie

stardust@Chaos:~$ su -l stardust

Password: #su 加 -l 参数之后是 login shell

stardust@Chaos:~$ touch 4

stardust@Chaos:~$ ls -al 4 #权限已经变为664,自定义的 umask 生效

-rw-rw-r-- 1 stardust stardust 0 Dec 29 16:51 4

我本想通过简单测试验证这些加载顺序,但是没成功,那么就只能放一个别人的验证了:理解 bashrc 和 profile

另外附部分 bash man 手册对这几个配置文件的解释:

/etc/profile

The systemwide initialization file, executed for login shells

系统全程的初始化文件,为登录的shell所执行

~/.bash_profile

The personal initialization file, executed for login shells

个人的初始化文件,为登录的shell所执行

~/.bashrc

The individual per-interactive-shell startup file

个人的交互式shell的起始文件

最后我在/etc/passwd 中登陆目录下手动建立了一个 .bashrc 加了一句 umask 002,目的达到

本文链接:https://www.starduster.me/2014/12/29/use-umask-to-config-sftp-upload-files/

本站基于 Creactive Commons BY-NC-SA 4.0 License 允许并欢迎您在注明来源和非商业使用前提下自由地对本文进行复制、分享或基于本文进行创作。

请注意:受限于笔者水平,本站内容可能存在主观臆断或事实错误,文中信息也可能因时间推移而不再准确,在此提醒读者结合自身判断谨慎地采纳。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。