apue 学习之 Chapter 4 - chown

4.11. chown,fchown, and lchown Functions

在做实验之前,因为操作vim和bash环境设置的问题搞了好长时间,总算勉勉强强顺手了。不过vim操作和bash脚本编程,.vimrc和.bashrc编写确实要抽时间来熟悉一下。

本例的初衷是为了理解上面那几个函数,不过我想功能应该是差不多的,于是就只选取了chown来做实验。

实验代码如下:

#include <stdio.h> #include <unistd.h> #include "apue.h" #include "myerr.c" #include <pwd.h> #ifdef _POSIX_CHOWN_RESTRICTED #undef _POSIX_CHOWN_RESTRICTED #endif #define _POSIX_CHOWN_RESTRICTED 0 int main (int argc, char *argv[]) { uid_t uid ; struct passwd *pwdp ; int i, j ; char *endptr ; char bSuccess ; if (argc != 3) err_quit ("usage : a.out <attribute> <filename> ...\n") ; printf ("current user id :\t\t %d\n", getuid ()) ; printf ("current group id :\t\t %d\n", getgid ()) ; printf ("current effective user id :\t %d\n", geteuid ()) ; printf ("current effective ground id :\t %d\n", getegid ()) ; uid = strtol (argv[1], &endptr, 0) ; if (*endptr != '\0') { // user name if ((pwdp = getpwnam (argv[1])) == NULL) err_msg ("getpwnam error : ") ; } else { if ((pwdp = getpwuid (uid)) == NULL) err_msg ("getpwuid error : ") ; } puts ("\nuser/group info by getpwnam/getpwuid function:") ; printf ("user : %s\n", pwdp->pw_name) ; printf ("pwd : %s\n", pwdp->pw_passwd) ; printf ("uid : %d\n", pwdp->pw_uid) ; printf ("gid : %d\n", pwdp->pw_gid) ; printf ("uifo : %s\n", pwdp->pw_gecos) ; printf ("home : %s\n", pwdp->pw_dir) ; printf ("shell: %s\n", pwdp->pw_shell) ; printf ("-------\n") ; printf ("_POSIX_CHOWN_RESTRICTED : %ld\n", pathconf (argv[2], _PC_CHOWN_RESTRICTED)) ; if (chown (argv[2], pwdp->pw_uid, -1) == -1) err_ret ("chown for uid error ") ; else printf ("success to change uid") ; putchar ('\n') ; if (chown (argv[2], -1, pwdp->pw_gid) == -1) err_ret ("chown for gid error ") ; else printf ("success to change gid") ; putchar ('\n') ; exit (0) ; }

此代码类似于bash的chown命令。从控制台接收三个参数,第一个是程序名,第二个是新的用户名或群组名,第三个是文件名。

第一部分,先输出当前用户的信息(uid,gid,euid,egid);

第二部分,输出新的用户名或群组名的信息,与/etc/passwd保持一致;

第三部分,输出_POSIX_CHOWN_RESTRICTED的值,看系统是否对chown的功能进行了限制;

第四部分,输出是否能改变文件的uid和gid。

实验结果表明,Fedora中对chown的功能是有限制的_POSIX_CHOWN_RESTRICTED被定义为1.

对于非特权用户,只能改变自己文件的所属group,不能改变文件所属者,但可以将自己的文件改变为自己……(听起来很那个= =!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值