gentoo hardened的系统,selinux运行在permissive mode。emerge一个软件,开始就报这么一个错误:
Traceback (most recent call last):
File "/usr/lib/portage/pym/_emerge/EbuildFetcher.py", line 186, in _spawnallow_missing_digests=allow_missing):
File "/usr/lib/portage/pym/portage/package/ebuild/fetch.py", line 491, in fetch
if _userpriv_test_write_file(mysettings, write_test_file):
File "/usr/lib/portage/pym/portage/package/ebuild/fetch.py", line 121, in _userpriv_test_write_file
returncode = _spawn_fetch(settings, args)
File "/usr/lib/portage/pym/portage/package/ebuild/fetch.py", line 89, in _spawn_fetch
rval = spawn_func(args, env=settings.environ(), **kwargs)
File "/usr/lib/portage/pym/portage/_selinux.py", line 105, in wrapper_func
setexec(con)
File "/usr/lib/portage/pym/portage/_selinux.py", line 79, in setexec
if selinux.setexeccon(ctx) < 0:
OSError: [Errno 22] Invalid argument
google只有一个搜索结果http://forums.gentoo.org/viewtopic-t-863567-start-0.html,gentoo的 bug 355745也是这个问题。
大意就是虽然在permissive模式下,但是有些操作还是会被selinux拒绝的。
emerge只能以sysadm_r运行。需要
newrole -r sysadm_r
变换到到sysadm_r的role。
我普通用户su到root的。没法变换到sysadm_r。只能用root登录以后再换,再emerge就OK了。