mkdir中设置文件夹访问权限不起作用

问题描述:

在使用下面函数设置文件夹访问权限时,发现创建的文件夹的访问权限其实不是自己传进去的mode权限。

int mkdir(const char *pathname, mode_t mode)


原因解释如下:

man 2 mkdir 告诉我们:The  argument  mode specifies the permissions to use.  It is modified by the processâs umask in the usual way: the permissions of the created directory are (mode & ~umask & 0777),意思就是,用mkdir创建的文件夹的访问权限不是mode ,而是mode & ~umask & 0777,这里的umask是“文件夹默认权限”,即“当前用户在建立文件或目录时候的属性默认值”。

知道了 mode & ~umask & 0777 这个公式,就明白为什么我们设了mode,却得不到想要的权限了。


解决办法:

先mkdir,然后chmod。


注意:

下面函数中的mode与mkdir中的类似,也存在umask的计算,因此,建议,在open成功后,再做一遍chmod操作,以确保创建的文件的访问权限是正确的。

int open(const char *pathname, int flags, mode_t mode)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ubuntu下ftp服务器搭建 第一步:安装相关的软件包。 apt-get install vsftpd 第二步:修改配置文件/etc/vsftpd.conf 默认配置文件部分解释 listen=NO #设置vsftpd服务器是否以standalone模式运行 listen_ipv6=YES #不用讲了吧 local_enable=YES #是否允许本地用户登录设为YES #write_enable=YES #是否允许登陆用户有写权限。属于全局设置,设为YES不然怎么上传文件呢 #local_umask=022 #本地用户新增档案时的umask 值。默认值为077。 anonymous_enable=NO #是否允许匿名用户,只有此项为YES以下anon_开头配置起作用 #anon_upload_enable=YES #是否允许匿名用户上传 #anon_mkdir_write_enable=YES #如果设为YES,则允许匿名登入者有新增目录的权限,只有在write_enable=YES时生效 dirmessage_enable=YES use_localtime=YES #不用讲了吧 #chroot_local_user=YES #是否限制用户在自己/home目录 #chroot_list_enable=YES #设置是否启用chroot_list_file配置项指定的用户列表文件 #chroot_list_file=/etc/vsftpd.chroot_list #用于指定用户列表文件 #几种搭配 # 当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_ list文件列出的用户,可以切换到其他目录;未在文件列出的用户,不能切换到其他目 录。 # 当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_l ist文件列出的用户,不能切换到其他目录;未在文件列出的用户,可以切换到其他目 录。 # 当chroot_list_enable=NO,所有的用户均不能切换到其他目录。 xferlog_enable=YES #日志相关 #xferlog_file=/var/log/vsftpd.log #xferlog_std_format=YES connect_from_port_20=YES #端口设置 #ftpd_banner=Welcome to blah FTP service. #登录成功提示的欢迎消息 #以下参数不在默认配置文件 userlist_enable=YES/NO(NO)#是否启用vsftpd.user_list文件。 userlist_file=/etc/vsftpd.user_list userlist_deny=YES/NO(YES)#若设置为YES,则vsftpd.user_list文件的用户不允 许访问FTP,若设置为NO,则只有vsftpd.user_list文件的用户才能访问FTP。 #注意还要修改/etc/vsftpd/ftpusers文件,这里的用户不能登陆ftp 的 常用设置情景 有多用户,root和其他,不允许匿名,root可访问任何文件夹,其他用户限制只能访问 自己文件夹,都可上传下载 取消注释write_enable=YES anonymous_enable=NO 取消注释chroot_local_user=YES 取消注释chroot_list_enable=YES 取消注释chroot_list_file=/etc/vsftpd.chroot_list #此时列表内用户可访问上级文件夹 编辑/etc/vsftpd.chroot_list 加入root 编辑/etc/ftpusers文件删除能登陆的用户名如root,这里面是不能登陆的用户 #添加用户 uftp 用户名为uftp 家目录为/home/uftp 此账号登陆只能访问家目录 sudo useradd -d /home/uftp -s /bin/bash uftp #添加用户名为uftp的用户,家目录为/home/uftp sudo passwd uftp #设置密码 #同理 sudo useradd -d /var/ftp -s /bin/bash uftp2 sudo passwd uftp2 #设置密码 sudo service vsftpd restart #重启ftp服务 ----------------------- ubuntu下ftp服务器搭建全文共4页,当前为第1页。 ubuntu下ftp服务器搭建全文共4页,当前为第2页。 ubuntu下f
确认系统vsFTPd的安装和版本情况: [root@localhost ~]#rpm –q vsftpd 安装vsFTPd命令: [root@localhost Server]#rpm –ivh vsftpd-2.0.5-12.el5.i386.rpm 在vsftpd.conf文件配置匿名访问: anonymous_enable=YES 启动vsFTPd服务 [root@localhost ~]#/etc/init.d/vsftpd start 停止vsFTPd服务 [root@localhost ~]#/etc/init.d/vsftpd stop 重新启动vsFTPd服务 [root@localhost ~]#/etc/rc.d/init.dvsftpd restart 重启vsftpd服务: [root@localhost ~]#/etc/rc.d/init.dvsftpd condrestart vsFTPd的配置 在vsftpd.conf文件配置监听地址 listen_address=ip address 在vsftpd.conf文件配置控制端口的格式为: listen_port=port_value vsftpd.conf文件 主动模式的相关配置参数如下:  port_enable=YES|NO  connetc_from_port_20=YES|NO  ftp_data_port=port number  port_promiscuous=YES|NO 关于被动模式的相关配置参数如下:  pasv_enable=YES|NO  pasv_min_port=port number  pasv_promiscuous=YES|NO  pasv_address= IP address ASCII模式相关配置参数如下: ascii_download_enable=YES|NO ascii_upload_enable=YES|NO 超时选项: idle_session_timeout data_connection_timeout accept_timeout connect_timeout 负载控制: max_clients=numerical value max_per_ip=numerical value anon_max_rate=value local_max_rate=value vsFTPd的具体应用 打开vsFTPd的配置文件: [root@localhost ~]# vi /etc/vsftpd/vsftpd.conf 打开匿名用户支持: anonymous_enable=YES 打开写支持: write_enable=YES 允许上传; anon_upload_enable=YES 允许匿名用户上传; anon_mkdir_write_enable=YES 允许匿名用户创建目录和上传; anon_other_write_enable=NO 但不允许匿名用户删除和改名; 执行以下指令让匿名用户具备写权限: [root@localhost ~]#chmod ftp.root /var/ftp/pub 重启vsFTPd服务: [root@localhost ~]# service vsftpd restart 匿名服务器测试 匿名登录vsFTPd匿名服务器,登录名为anonymous,密码都为空: [root@localhost ~]# ftp 192.168.1.6 测试能否上传文件,输入!ls命令查看匿名用户拥有哪些文件: ftp>!ls 假设匿名用户在本机/var/tmp目录下有一个名为test.txt的文件,使用以下命令测试是否能将其传到服务器上: ftp> put test.txt 最后测试匿名用户是否能够新建目录: ftp>mkdir hello /incoming/hello目录建立成功,即测试成功。 配置高安全级别的匿名FTP服务器 在配置文件/etc/vsftpd/vsftpd.conf修改或添加如下设置: anonymous_enable=YES 启用匿名访问 local_enable=NO 关闭本地用户访问 write_enable=NO 关闭本地用户的写权限 anon_upload_enable=NO 关闭匿名用户的上传权限 anon_mkdir_write_enable=NO 关闭匿名用户创建目录和写入文件的权限 anon_other_write_enable=NO 关闭匿名用户删除、改名的权限 安全调
20.1 ftp服务 ftp采用客户/服务器工作模式,这里采用的是vsftpd ftp服务器软件。ftp工作方式分为两种,一种port主动模式,一种pasv被动模式,是服务主动与被动进行连接。一般ftp服务器都为被动模式 。 20.1.1 vsftp概述 rpm -qc vsftpd /etc/logrotate.d/vsftpd.log /etc/pam.d/vsftpd /*vsftp的安全验证文件*/ /etc/vsftpd/ftpusers /*其的用户不能登陆ftp*/ /etc/vsftpd/user_list /*其的用户不能登陆ftp同上一样*/ /etc/vsftpd/vsftpd.conf /*ftp主配置文件*/ /etc/vsftpd/vsftpd_conf_migrate.sh vsftp的主目录的位置在/var/ftp下,并且是系统默认,不能更改。vsftp在通过rpm包安装好后,打开其服务并设为自动运行后,ftp就可以 提供服务了。 20.1.2 vsftp安装与启动 如果没有安装的话,通过以下方式进行安装。 rpm -ivh vsftpd-2.0.4-1.2.i386.rpm warning: vsftpd-2.0.4-1.2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2 Preparing... ########################################### [100%] 1:vsftpd ########################################### [100%] vsftpd服务采用是独立启动方式来启动的。 chkconfig --level 345 vsftpd on设为开机自启动 service vsftpd start 启动ftp服务。 20.2 vsftp访问配置 20.2.1 vsftp匿名用户 匿名用户:ftp 与anonymous其主目录为/var/ftp 普通用户:用户名为登录用户名,主目录为/home/用户名 20.2.2 vsftp默认配置文件 去掉#后配置选项如下: vi vsftpd.conf anonymous_enable=YES /*匿名用户启用*/ local_enable=YES /*本地用户可登陆*/ write_enable=YES /*是否允许写*/ local_umask=022 /*锁定创建文件权限*/ #anon_upload_enable=YES /*是否允许匿名用户上传*/ #anon_mkdir_write_enable=YES /*是否允许匿名用户创建目录*/ dirmessage_enable=YES /*允许显示目录信息*/ xferlog_enable=YES /*启用记录上传与下载日志*/ connect_from_port_20=YES /*开启20端口*/ #chown_uploads=YES #chown_username=whoever #xferlog_file=/var/log/vsftpd.log /*上传与下载日志文件*/ xferlog_std_format=YES /*使用标准日志格式*/ #idle_session_timeout=600 /*会话空闲时间*/ #data_connection_timeout=120 /*连接超时时间*/ #nopriv_user=ftpsecure #async_abor_enable=YES #ascii_upload_enable=YES /*是否使用ascii格式上传*/ #ascii_download_enable=YES /*是否使用ascii格式下载*/ #ftpd_banner=Welcome to blah FTP service. /*服务器banner*/ #deny_email_enable=YES /*启用电子邮件阻止*/ #banned_email_file=/etc/vsftpd/banned_emails /* 阻止的邮件地址文件*/ #chroot_list_enable=YES /*是否允许用户改变主目录*/ #chroot_list_file=/etc/vsftpd/chroot_list /*允许改变主目录的用户*/ #ls_recurse_enable=YES /*是否允许用户ls -R循环显示每一个目录*/ pam_service_name=vsftpd /*验证服务名*/ userlist_enable=YES /*用户列表的用户不能登录FTP*/ #userlist_file=/etc/vsftpd/user_list listen=YES /*监听模式*/ tcp_wrappers=YES 说明:默认配置文件就已经能够实现匿名用户对/var/ftp文件内容的下载,以及本机用户对自已主目录的访问(上传与下载)。 20.3 vsftp配置基本实例 20.3.1 改变端口号 vi vsftpd.conf #新增底下一行,原有的配置不动 listen_port=2121 #重启服务 service vsftpd restart 20.3.2 特定用户不能更改目录 使用者的预设目录为/home/username,若是我们不希望使用者redhat在ftp 时能够切换到上一层目录/home,则可参考以下步骤。 #去掉注释 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list #或以上选项注释掉,所有用户都不能更改目录。 #编辑下列文件 vi /etc/vsftpd/chroot_list #加入内容 redhat #重启服务 service vsftpd restart 20.3.3 允许匿名上传 vi vsftpd.conf #修改以下内容 anon_upload_enable=YES /*是否允许匿名用户上传*/ anon_mkdir_write_enable=YES /*是否允许匿名用户创建目录*/ #重启服务 service vsftpd restart 注意:对于上传目录,必须设为可写才行。 chmod o+w /var/ftp 20.3.4 取消匿名登录 说明:取消匿名登录后,系统用户都可以通过用户名与密码来访问FTP服务器了。 vi vsftpd.conf #修改以下内容 anonymous_enable=NO #重启服务 service vsftpd restart 20.3.5 设置欢迎信息 vi vsftpd.conf #修改以下内容 ftpd_banner=Welcome to koumm’s FTP service. /*服务器欢迎信息*/ dirmessage_enable=YES /*默认是开启状态*/ #然后在/var/ftp建立.message文件。 #该文件为目录说明文件,用于对目录的说明,每个目录都可有。 vi /var/ftp/.message 欢迎访问ftp主目录。 /*通过SecureCRT登录可以打汉字,并可显示*/ #重启服务 service vsftpd restart 20.3.6 以独立进程联机 vi vsftpd.conf #新加入以下内容 setproctitle_enable=YES /*默认是开启状态*/ #重启服务 service vsftpd restart #测试 ps -ef|grep ftp #该功能可能只是在管理上可以查看用户登录的情况吧。 20.3.7 限制下载速度 vi vsftpd.conf #新加入以下内容 anon_max_rate=100000 /*匿名最高速为100KB*/ local_max_rate=200000 /*本机用户最高速为200KB */ #实际速度会在80-120%之间。 #重启服务 service vsftpd restart 20.3.8 使用pasv联机模式 vi vsftpd.conf #新加入以下内容 listen_port=2121 /*监听2121端口,用于防火墙 */ pasv_enable=YES /*启用pasv模式*/ pasv_min_port=9981 /*pasv端口范围*/ pasv_max_port=9986 #重启服务 service vsftpd restart 20.3.9 超级守护程序启动 vi vsftpd.conf #修改以下内容 listen=NO /*监听2121端口,用于防火墙 */ #在/etc/xinetd.d/新建以下内容 vi /etc/xinetd.d/vsftpd service vsftpd { disable = no socket_type = stream wait = no user = root server = /usr/sbin/vsftpd port = 21 log_on_success += PID HOST DURATION log_on_failure += HOST } #重启服务 service xinetd restart 注:该配置是对以前服务的一个加深的理解,也相应的也提供了一个处理问题的思路。 20.3.10 最大连机数 vi vsftpd.conf #加入以下内容 max_clients = 100 /*服务器最大连机默认为0无限制*/ max_per_ip = 5 /*单IP最大连机默认为0无限制*/ #重启服务 service xinetd restart 注:该配置是对以前服务的一个加深的理解,也相应的也提供了一个处理问题的思路。 20.3.11 特定用户不能登录方法一 #其的用户不能登陆ftp /etc/vsftpd/ftpusers #可以通过以下文件来进行控制的,第二行内容。 vi /etc/pam.d/vsftpd #%PAM-1.0 auth required pam_listfile.so item=user sense=deny file= /etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include system-auth account include system-auth session include system-auth session required pam_loginuid.so #如果把上面的sense=deny改为allow后,也就是说只有/etc/vsftpd/ftpusers的用户才能够访问ftp服务器了。这里提供了一个配置思路, 以供在实际环境使用。 20.3.12 特定用户不能登录方法二 #编辑下列文件 vi /etc/vsftpd/chroot_list #修改或加入内容user_list文件本身就有,如没有,请手动添加。 # userlist_enable=YES userlist_file=/etc/vsftpd/ user_list #重启服务 service vsftpd restart 20.4 ftp虚拟用户配置 虚拟帐户与samba的虚拟帐户有点像,就是为了防止别人用真正的帐户登录系统,而采用的一个帐户的别名帐户,而虚拟帐户只能够登录 ftp,而不能用做其它目的。 20.4.1 创建虚拟帐户文件 [root@redhat vsftpd]# vi vuser.txt bill /*用户名*/ password /*密码*/ koumm abc,.123 通过以上文件来创建用户数据库。 20.4.2 创建虚拟帐户数据库文件 [root@redhat vsftpd]# db_load -T -t hash -f vuser.txt /etc/vsftpd_login.db [root@redhat vsftpd]# chmod 600 /etc/vsftpd_login.db [root@redhat vsftpd]# ll /etc/vsftpd_login.db -rw------- 1 root root 12288 6月 15 17:06 /etc/vsftpd_login.db 修改权限以保证安全。 20.4.3 配置pam文件 为了能够使用ftp服务器能够使用数据库文件对用户进行身份验证,还需要修改vsftpd的PAM文件,把以前的pam的内容注释掉,并加入以下 内容。 [root@redhat etc]# vi /etc/pam.d/vsftpd #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed #auth required pam_stack.so service=system-auth #auth required pam_shells.so #account required pam_stack.so service=system-auth #session required pam_stack.so service=system-auth auth required pam_userdb.so db=/etc/vsftpd_login account required pam_userdb.so db=/etc/vsftpd_login 20.4.4 创建虚拟帐户目录 mkdir /var/ftp/vuser useradd -d /var/ftp/vuser vuser useradd ftpvip 说明:创建一个帐户,指定主目录,也是ftp的主目录。不指定就是/home/vuser chown vuser.vuser /var/ftp/vuser chmod o+rw /var/ftp/vuser 20.4.5 编辑配置文件 1.编辑配置文件 [root@redhat pam.d]# vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO /*不能允许匿名用户登录*/ local_enable=YES /*本地用户登录*/ write_enable=NO local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO #加入以下内容 guest_enable=YES /*开启虚拟帐户访问*/ guest_username=vuser /*虚拟帐户对应的系统帐户*/ 说明:虚拟用户的上传下载权限的配置是用匿名配置选项来进行配置的,前提是不能允许匿名用户登录,可以匿名用户可写,虚拟用户就可 以写或上传了。 2.编辑独立配置文件 (1)虚拟帐户配置文件目录 vsftpd可以为不同的虚拟用户创建不同的单独的配置文件,来实现不同的功能,思想就是:可以为不同的虚拟用户对应不同的实体用户,从 而实现不能的功能。 [root@redhat pam.d]# vi /etc/vsftpd/vsftpd.conf 加入以下内容: vi /etc/vsftpd/vsftpd.conf user_config_dir=/ftpconfig /*虚拟用户主配置文件目录*/ (2)单独创建虚拟帐户配置文件 vi /ftpconfig/bill /*创建的虚拟用户*/ guest_enable=yes guest_username=vuser /*设置ftp对应的系统帐号为ftpuser*/ anon_world_readable_only=no /*允许匿名用户浏览文件系统*/ anon_max_rate=50000 /*限定传输速率为50KB/s*/ vi /ftpconfig/koumm /*创建的虚拟用户*/ guest_enable=yes /*开启虚拟帐号登录*/ guest_username=ftpvip /*设置ftp对应的系统帐号为ftpvip*/ anon_world_readable_only=no /*允许匿名用户浏览器整个服务器的文件系统*/ write_enable=yes /*允许在文件系统写入权限*/ anon_mkdir_write_enable=yes /*允许创建文件夹 */ anon_upload_enable=yes /*开启匿名帐号的上传功能*/ anon_max_rate=100000 /*限定传输速度为100KB/s*/ 说明:以上实体用户还需要事先创建,用户的主目录如是事先安装的话在/home。以上方法可以应用一些复杂的应用环境。 20.5 ftp客户端 20.5.1 ftp命令 ftp命令的功能是在本地机和远程机之间传送文件。 该命令的一般格式如下: ftp 主机名/IP 最常用的命令有: ls 列出远程机的当前目录 cd 在远程机上改变工作目录 lcd 在本地机上改变工作目录 ascii 设置文件传输方式为ASCII模式 binary 设置文件传输方式为二进制模式 close 终止当前的ftp会话 hash 每次传输完数据缓冲区的数据后就显示一个#号 get(mget) 从远程机传送指定文件到本地机 put(mput) 从本地机传送指定文件到远程机 open 连接远程ftp站点 quit 断开与远程机的连接并退出ftp ? 显示本地帮助信息
----------------------- samba实验报告全文共4页,当前为第1页。 "实验题目"搭建Samba服务器 " "班级 "网工08101 "指导教师" " "姓名 " "实验地点"寝室 "实验日期"2011-7-4 " "实验目的 " "搭建 Samba 服务器该公司的分支机构有 " "system、develop、productdesign 和 test 等 4 个小组,个人办公机 " "操作系统为 Windows 2000/XP/2003,少数开发人员采用 Linux 操作系 " "统,服务器 操作系统为 RHEL 4,需要设计一套建立再 RHEL 4 之上的 " "安全文件共享方案。每个用户 都有自己的网络磁盘,develop 组到 " "test 组有共用的网络硬盘,所有用户(包括匿名用 户)有一个只读共 " "享资料库;所有用户(包括匿名用户)要有一个存放临时文件的文件夹 " "。 " "项目目标: " " System 组具有管理所有 Samba 空间的权限。 " " 各部门的私有空间:各小组拥有自己的空间,除了小组成员及 system" "组有权限 以外,其他用户不可访问(包括列表、读和写)。 " " 资料库:所有用户(包括匿名用户)都具有读权限而不具有写入数据 " "的权限。 " " Develop 组与 test 组的共享空间,develop 组与 test 组之外的 " "用户不能访问。 " " 公共临时空间:让所有用户可以读取、写入、删除。 " "实验环境及器材(软件、硬件环境及所需实验材料) " " 硬件:P4 / 512M / 80G。 " " 软件:Win XP SP3/Win2003+Vmware 5.5+Red Hat Enterprise Linux " "4.0/5.0。 " "实验内容及步骤 " "创建共享资源目录 " "[root@localhost~]#mkdir –p /data/share " "[root@localhost~]#cd /data/share " "[root@localhost share]#mkdir develop productdesign test library" "develop_testrw temp " "各目录说明如下: " "/data/share:管理员目录,负责管理其下所有目录。 " "/data/share/develop:develop 的主目录,除了用户本身和 system " "之外,其他用 户都是不可读不可写。 " "/data/share/productdesign:productdesign " "的主目录,除了用户本身和 system 组以外,其他用户都是不可读不可 " "写。 " "/data/share/test:test 的主目录,除了用户本身和 system " "组以外,其他用户都 是不可读不可写。 " "/data/share/library:资料库目录,所有用户(除了 system " "组有权限写入外)只读目录。 " "/data/share/develop_testrw: develop组和test组的共享空间, " "develop组与test " " " " " " " " " " " " " " " samba实验报告全文共4页,当前为第2页。 "test组之外的用户不能访问。 " "/data/share/temp:用于所有用户(包括匿名用户)的可读可写。 " "2、 添加用户组。 " "[root@localhost~]#groupadd system " "[root@localhost~]#groupadd develop " "[root@localhost~]#groupadd productdesign " "[root@localhost~]#groupadd test " "[root@localhost~]#groupadd develop_test " "3、添加用户。 " "[root@localhost~]#adduser –g develop –G develop_test –d " "/data/share/develop –s /sbin " "/nologin develop " "[root@localhost~]#adduser –g productdesign –G develop瑟獥 撖⼠ " "慤慴猯慨敲 牰摯捵摴攍楳湧阠 猯楢⽮潮潬楧 牰摯捵摴獥杩൮牛潯䁴潬慣" "桬獯繴 摡畤敳 枖琠獥 䞖搠癥汥灯瑟獥 撖⼠慤慴猯慨敲琯獥 玖⼠扳湩" "港汯杯湩琍獥൴牛潯䁴潬慣桬獯繴 摡畤敳 枖猠獹整 撖⼠慤慴猯慨_test " "–d /data

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值