]> git.ipfire.org Git - people/stevee/selinux-policy.git/blame - policy/modules/services/ftp.te
trunk: add missing mplayer_etc_t require in role template.
[people/stevee/selinux-policy.git] / policy / modules / services / ftp.te
CommitLineData
fc6524d7 1
f7925f25 2policy_module(ftp,1.7.0)
fc6524d7
CP
3
4########################################
5#
6# Declarations
7#
8
56e1b3d2
CP
9## <desc>
10## <p>
dd9e1de3
CP
11## Allow ftp servers to upload files, used for public file
12## transfer services. Directories must be labeled
13## public_content_rw_t.
56e1b3d2
CP
14## </p>
15## </desc>
16gen_tunable(allow_ftpd_anon_write,false)
17
18## <desc>
19## <p>
20## Allow ftp servers to login to local users and
21## read/write all files on the system, governed by DAC.
22## </p>
23## </desc>
24gen_tunable(allow_ftpd_full_access,false)
25
26## <desc>
27## <p>
28## Allow ftp servers to use cifs
29## used for public file transfer services.
30## </p>
31## </desc>
32gen_tunable(allow_ftpd_use_cifs,false)
33
34## <desc>
35## <p>
36## Allow ftp servers to use nfs
37## used for public file transfer services.
38## </p>
39## </desc>
40gen_tunable(allow_ftpd_use_nfs,false)
41
42## <desc>
43## <p>
44## Allow ftp to read and write files in the user home directories
45## </p>
46## </desc>
47gen_tunable(ftp_home_dir,false)
48
fc6524d7
CP
49type ftpd_t;
50type ftpd_exec_t;
51init_daemon_domain(ftpd_t,ftpd_exec_t)
52
53type ftpd_etc_t;
9bbc757a 54files_config_file(ftpd_etc_t)
fc6524d7 55
fc6524d7
CP
56type ftpd_lock_t;
57files_lock_file(ftpd_lock_t)
58
59type ftpd_tmp_t;
60files_tmp_file(ftpd_tmp_t)
61
62type ftpd_tmpfs_t;
63files_tmpfs_file(ftpd_tmpfs_t)
64
65type ftpd_var_run_t;
66files_pid_file(ftpd_var_run_t)
67
75fbbb0b
CP
68type ftpdctl_t;
69type ftpdctl_exec_t;
70init_system_domain(ftpdctl_t,ftpdctl_exec_t)
71
72type ftpdctl_tmp_t;
73files_tmp_file(ftpdctl_tmp_t)
74
fc6524d7
CP
75type xferlog_t;
76logging_log_file(xferlog_t)
77
78########################################
79#
75fbbb0b 80# ftpd local policy
fc6524d7
CP
81#
82
83allow ftpd_t self:capability { chown fowner fsetid setgid setuid sys_chroot sys_nice sys_resource };
84dontaudit ftpd_t self:capability sys_tty_config;
85allow ftpd_t self:process signal_perms;
86allow ftpd_t self:process { getcap setcap setsched setrlimit };
c0868a7a 87allow ftpd_t self:fifo_file rw_fifo_file_perms;
fc6524d7 88allow ftpd_t self:unix_dgram_socket { sendto create_socket_perms };
75fbbb0b 89allow ftpd_t self:unix_stream_socket create_stream_socket_perms;
fc6524d7
CP
90allow ftpd_t self:tcp_socket create_stream_socket_perms;
91allow ftpd_t self:udp_socket create_socket_perms;
92
c0868a7a 93allow ftpd_t ftpd_etc_t:file read_file_perms;
fc6524d7 94
56e1b3d2
CP
95allow ftpd_t ftpd_lock_t:file manage_file_perms;
96files_lock_filetrans(ftpd_t,ftpd_lock_t,file)
97
c0868a7a
CP
98manage_dirs_pattern(ftpd_t,ftpd_tmp_t,ftpd_tmp_t)
99manage_files_pattern(ftpd_t,ftpd_tmp_t,ftpd_tmp_t)
103fe280 100files_tmp_filetrans(ftpd_t, ftpd_tmp_t, { file dir })
fc6524d7 101
c0868a7a
CP
102manage_dirs_pattern(ftpd_t,ftpd_tmpfs_t,ftpd_tmpfs_t)
103manage_files_pattern(ftpd_t,ftpd_tmpfs_t,ftpd_tmpfs_t)
104manage_lnk_files_pattern(ftpd_t,ftpd_tmpfs_t,ftpd_tmpfs_t)
105manage_fifo_files_pattern(ftpd_t,ftpd_tmpfs_t,ftpd_tmpfs_t)
106manage_sock_files_pattern(ftpd_t,ftpd_tmpfs_t,ftpd_tmpfs_t)
103fe280 107fs_tmpfs_filetrans(ftpd_t,ftpd_tmpfs_t,{ dir file lnk_file sock_file fifo_file })
fc6524d7 108
c0868a7a
CP
109manage_files_pattern(ftpd_t,ftpd_var_run_t,ftpd_var_run_t)
110manage_sock_files_pattern(ftpd_t,ftpd_var_run_t,ftpd_var_run_t)
1c1ac67f 111files_pid_filetrans(ftpd_t,ftpd_var_run_t,file)
e6a2eaff 112
75fbbb0b
CP
113# proftpd requires the client side to bind a socket so that
114# it can stat the socket to perform access control decisions,
115# since getsockopt with SO_PEERCRED is not available on all
116# proftpd-supported OSs
117allow ftpd_t ftpdctl_tmp_t:sock_file { getattr unlink };
118
fc6524d7 119# Create and modify /var/log/xferlog.
8cfa5a00 120allow ftpd_t xferlog_t:dir search_dir_perms;
c0868a7a 121allow ftpd_t xferlog_t:file manage_file_perms;
1c1ac67f 122logging_log_filetrans(ftpd_t,xferlog_t,file)
fc6524d7 123
445522dc 124kernel_read_kernel_sysctls(ftpd_t)
fc6524d7
CP
125kernel_read_system_state(ftpd_t)
126
127dev_read_sysfs(ftpd_t)
128dev_read_urand(ftpd_t)
129
049e11af 130corecmd_exec_bin(ftpd_t)
fc6524d7 131
19006686
CP
132corenet_all_recvfrom_unlabeled(ftpd_t)
133corenet_all_recvfrom_netlabel(ftpd_t)
fc6524d7
CP
134corenet_tcp_sendrecv_all_if(ftpd_t)
135corenet_udp_sendrecv_all_if(ftpd_t)
fc6524d7
CP
136corenet_tcp_sendrecv_all_nodes(ftpd_t)
137corenet_udp_sendrecv_all_nodes(ftpd_t)
fc6524d7
CP
138corenet_tcp_sendrecv_all_ports(ftpd_t)
139corenet_udp_sendrecv_all_ports(ftpd_t)
140corenet_tcp_bind_all_nodes(ftpd_t)
9a879bd7 141corenet_tcp_bind_ftp_port(ftpd_t)
fc6524d7
CP
142corenet_tcp_bind_ftp_data_port(ftpd_t)
143corenet_tcp_bind_generic_port(ftpd_t)
6b19be33
CP
144corenet_tcp_bind_all_unreserved_ports(ftpd_t)
145corenet_dontaudit_tcp_bind_all_ports(ftpd_t)
fc6524d7 146corenet_tcp_connect_all_ports(ftpd_t)
9a879bd7 147corenet_sendrecv_ftp_server_packets(ftpd_t)
fc6524d7 148
15722ec9 149domain_use_interactive_fds(ftpd_t)
049e11af
CP
150
151files_search_etc(ftpd_t)
152files_read_etc_files(ftpd_t)
153files_read_etc_runtime_files(ftpd_t)
9e04f5c5 154files_search_var_lib(ftpd_t)
049e11af
CP
155
156fs_search_auto_mountpoints(ftpd_t)
157fs_getattr_all_fs(ftpd_t)
158
049e11af 159auth_use_nsswitch(ftpd_t)
e6a2eaff 160auth_domtrans_chk_passwd(ftpd_t)
fc6524d7
CP
161# Append to /var/log/wtmp.
162auth_append_login_records(ftpd_t)
163#kerberized ftp requires the following
164auth_write_login_records(ftpd_t)
09c56f54 165auth_rw_faillog(ftpd_t)
fc6524d7 166
d6d16b97 167init_rw_utmp(ftpd_t)
fc6524d7
CP
168
169libs_use_ld_so(ftpd_t)
170libs_use_shared_libs(ftpd_t)
171
172logging_send_syslog_msg(ftpd_t)
173
174miscfiles_read_localization(ftpd_t)
175miscfiles_read_public_files(ftpd_t)
176
177seutil_dontaudit_search_config(ftpd_t)
178
179sysnet_read_config(ftpd_t)
85a0f967 180sysnet_use_ldap(ftpd_t)
fc6524d7 181
103fe280 182userdom_dontaudit_search_sysadm_home_dirs(ftpd_t)
15722ec9 183userdom_dontaudit_use_unpriv_user_fds(ftpd_t)
fc6524d7 184
fc6524d7
CP
185tunable_policy(`allow_ftpd_anon_write',`
186 miscfiles_manage_public_files(ftpd_t)
522b59bb
CP
187')
188
189tunable_policy(`allow_ftpd_use_cifs',`
190 fs_read_cifs_files(ftpd_t)
191 fs_read_cifs_symlinks(ftpd_t)
192')
193
194tunable_policy(`allow_ftpd_use_cifs && allow_ftpd_anon_write',`
195 fs_manage_cifs_files(ftpd_t)
196')
197
198tunable_policy(`allow_ftpd_use_nfs',`
199 fs_read_nfs_files(ftpd_t)
200 fs_read_nfs_symlinks(ftpd_t)
201')
202
203tunable_policy(`allow_ftpd_use_nfs && allow_ftpd_anon_write',`
204 fs_manage_nfs_files(ftpd_t)
205')
fc6524d7 206
6b19be33
CP
207tunable_policy(`allow_ftpd_full_access',`
208 allow ftpd_t self:capability { dac_override dac_read_search };
209 auth_manage_all_files_except_shadow(ftpd_t)
210')
211
fc6524d7 212tunable_policy(`ftp_home_dir',`
165b42d2
CP
213 allow ftpd_t self:capability { dac_override dac_read_search };
214
fc6524d7 215 # allow access to /home
d8636fc9 216 files_list_home(ftpd_t)
103fe280
CP
217 userdom_read_all_users_home_content_files(ftpd_t)
218 userdom_manage_all_users_home_content_dirs(ftpd_t)
219 userdom_manage_all_users_home_content_files(ftpd_t)
220 userdom_manage_all_users_home_content_symlinks(ftpd_t)
fc6524d7
CP
221')
222
522b59bb
CP
223tunable_policy(`ftp_home_dir && use_nfs_home_dirs',`
224 fs_manage_nfs_files(ftpd_t)
225 fs_read_nfs_symlinks(ftpd_t)
226')
227
228tunable_policy(`ftp_home_dir && use_samba_home_dirs',`
229 fs_manage_cifs_files(ftpd_t)
230 fs_read_cifs_symlinks(ftpd_t)
231')
232
46551033
CP
233optional_policy(`
234 tunable_policy(`ftp_home_dir',`
235 apache_search_sys_content(ftpd_t)
236 ')
237')
238
bb7170f6 239optional_policy(`
fc6524d7
CP
240 corecmd_exec_shell(ftpd_t)
241
77f6e2cd 242 files_read_usr_files(ftpd_t)
fc6524d7
CP
243
244 cron_system_entry(ftpd_t, ftpd_exec_t)
245
bb7170f6 246 optional_policy(`
fc6524d7
CP
247 logrotate_exec(ftpd_t)
248 ')
249')
250
bb7170f6 251optional_policy(`
44d5d93f
CP
252 daemontools_service_domain(ftpd_t, ftpd_exec_t)
253')
254
09c56f54
CP
255optional_policy(`
256 kerberos_read_keytab(ftpd_t)
257')
258
bb7170f6 259optional_policy(`
73ef293b
CP
260 inetd_tcp_service_domain(ftpd_t,ftpd_exec_t)
261
bb7170f6 262 optional_policy(`
56e1b3d2 263 tcpd_domtrans(tcpd_t)
77f6e2cd 264 ')
fc6524d7
CP
265')
266
bb7170f6 267optional_policy(`
fc6524d7
CP
268 seutil_sigchld_newrole(ftpd_t)
269')
270
bb7170f6 271optional_policy(`
fc6524d7
CP
272 udev_read_db(ftpd_t)
273')
75fbbb0b
CP
274
275########################################
276#
277# ftpdctl local policy
278#
279
280# Allow ftpdctl to talk to ftpd over a socket connection
c0868a7a 281stream_connect_pattern(ftpdctl_t,ftpd_var_run_t,ftpd_var_run_t,ftpd_t)
75fbbb0b
CP
282
283# ftpdctl creates a socket so that the daemon can perform
284# access control decisions (see comments in ftpd_t rules above)
285allow ftpdctl_t ftpdctl_tmp_t:sock_file { create setattr };
286files_tmp_filetrans(ftpdctl_t, ftpdctl_tmp_t, sock_file)
287
288# Allow ftpdctl to read config files
289files_read_etc_files(ftpdctl_t)
290
291libs_use_ld_so(ftpdctl_t)
292libs_use_shared_libs(ftpdctl_t)