linux下使用ftp上传是报权限错误,ftp上传的umask文件权限问题
我用root用户正常登陆linux查看的umask是022
然后用另外一台机器用ftp的方式登陆,查看到的umask是027 上网看了一大堆东西都是vsftpd的,而我用的不是vsftpd
主要问题是,我用ftp上传时创建的文件夹权限是rwxr-x---,这样的话其他用户访问不到这目录,我需要的是rwxr-xr-x这样的权限
我也试过在命令行设置umask 022 ,但是这样只是设置当前会话的umask,断开后重新登ftp又变回027了。请高手解决。
|
1、首先要打开root权限的终端。
Ubuntu 的 10.XX以上,已经可以找到root的终端,如果没有,可以使用普通的终端使用sudo命令前缀。
2、下载并安装tftp服务器。
一般网上的教程都要下三个文件,一个是tftp,一个是tftpd ,一个是openBSD-inetd。其实大部分的使用采用tftpd和openBSD-inetd就够了。不过为了统一和傻瓜性,还是用大家都喜欢用的命令。链接网线后,在终端输入。
sudo apt-get install tftpd tftp openbsd-inetd
按照提示确认并完成
3、打开终端,编辑配置文件/etc/inetd.conf
建议采用命令:sudo vim /etc/inetd.conf
在这个配置文件里面找到下面的位置:
#:BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
#我把上面的默认的配置文件用井号注释掉了,自己配置了下面的一行
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftp
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftp //写成自己设置的tftp工作目录
保存文件退出
4、编辑/etc/xinetd.d/tftp文件,本文件为xinetd对tftp服务支持的配置文件,一般来说这个文件会有如下所示的内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftp //tftp工作目录
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
一般来说,在这个配置文件中,我们要注意的就是对tftp服务器共享目录的设置,也就是server_args=-s /tftp这一行,我们可以看到这行有个参数-s,那么对这个配置还有几个相关的参数,现介绍一下:
-l 使用standalone模式运行,此模式下,将会忽略-t选项
-a address:port 在standalone模式下服务所在的IP与端口,如果不指定,则在本机所有IP,/etc/service中指定的port上侦听连接
-c 允许在服务器上新建文件,否则只允许更新现有的文件。如果未指定-U或-p选项,则允许任何人上传文件
-s directory 服务器端默认的目录,默认为/var/lib/tftpdboot
-u username tftp服务以什么身份运行,默认是nobody,一般可以新建一个tftp的账号来运行
-U umask 上传文件的掩码,如果未指定-p则为000,如果指定了-p,则采用指定的umask
-p 对于通过-u指定的用户执行的动作,不做额外的权限检查
5、创建TFTP服务器的文件目录。
打开终端,进入根目录(用cd / )(或cd ..)退到顶。
输入命令:
sudu mkdir tftp
sudu chmod 777 /tftp
如果有需要下载的文件这时可以拷贝进去,也用chmod 777命令把所有权限打开。
6、通过下面命令启动(或重启)xinetd服务
sudo /etc/init.d/openbsd-inetd restart
7、查看69端口是否有打开,使用下面命令
netstat -an | more
打印出的东西中找到如下即可:
udp 0 0 0.0.0.0:69 0.0.0.0:*
8、最好统一一下操作 ,reboot一下系统。
9、系统重启后再使用: sudo /etc/init.d/openbsd-inetd restart 命令 重置一下状态。
10、在本机测试一下:
在/tftp目下新建一个文件,并写入数据:
root@Ubuntu:/tftp# echo tftp test > test.txt
到 home 目录下:
root@Ubuntu:/tftp# cd /home/
root@Ubuntu:/home# tftp 192.168.0.114 //可以是自己本机的ip
tftp> get test.txt
Received 11 bytes in 0.1 seconds
tftp> quit
root@Ubuntu:/home# cat test.txt
tftp test
测试成功,大功告成。
但是,在保证以上步骤没有误操作的情况下,虽然配置运行都没有问题了,到最后获取文件的时候会出现问题,主要会出现以下两个提示:(下面是我在网上找到的解决办法)
1:如果出现permission denied 错误 则是操作者权限不够,需要提升权限
su root
输入密码后就可以正常进行tftp传输操作了
2:如果出现Access violation错误 则是文件权限没有解开,
将要操作的文件操作权限全解开就可以了
chmod 777 文件名
第一个错误一般来说按照上面的办法都可以修正,但是第二个错误按照以上方法修改后如果还是出现的话,可以看看下面的这个文件/etc/inetd.conf,然后在其中找到这样的一行:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
要把最后一个参数改成我们自己设置的tftp共享目录就可以了,即:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftp
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)